From de97c416b7f8b4085809005ea13c23324603fa9e Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 2 Apr 2024 17:36:47 +0200
Subject: [PATCH 01/82] Add copy_from_libjade.yml

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../copy_from_upstream/copy_from_libjade.yml  | 26 +++++++++++++++++++
 1 file changed, 26 insertions(+)
 create mode 100644 scripts/copy_from_upstream/copy_from_libjade.yml

diff --git a/scripts/copy_from_upstream/copy_from_libjade.yml b/scripts/copy_from_upstream/copy_from_libjade.yml
new file mode 100644
index 0000000000..d30cee5020
--- /dev/null
+++ b/scripts/copy_from_upstream/copy_from_libjade.yml
@@ -0,0 +1,26 @@
+upstreams:
+  -
+    name: libjade
+    git_url: https://github.com/formosa-crypto/libjade
+    git_branch: main
+    git_commit: a6845a257a0ebbab4fd93c19423a62557c838a10
+    kem_meta_path: 'src/crypto_kem/{family}/{pqclean_scheme}/META.yml'
+    kem_scheme_path: 'src/crypto_kem/{family}/{pqclean_scheme}'
+    patches: ['libjade-kyber-api.patch', 'libjade-kyber-meta.patch']
+templates:
+    kem_scheme.c: ['kem_scheme.c.libjade', 'kem_scheme_keypair.c.libjade', 'kem_scheme_encaps.c.libjade', 'kem_scheme_decaps.c.libjade']
+kems:
+  -
+    name: kyber
+    default_implementation: amd64/ref
+    upstream_location: libjade
+    schemes:
+      -
+        scheme: "512"
+        pqclean_scheme: kyber512
+        pretty_name_full: Kyber512
+      -
+        scheme: "768"
+        pqclean_scheme: kyber768
+        pretty_name_full: Kyber768
+sigs: []
\ No newline at end of file

From ddcfdb3d5e32a69688308f997c47adbf897da06f Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 2 Apr 2024 17:45:53 +0200
Subject: [PATCH 02/82] Modify copy_from_upstream.py

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../copy_from_upstream/copy_from_upstream.py  | 91 +++++++++++++++----
 1 file changed, 74 insertions(+), 17 deletions(-)

diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index 0db38f54bf..c179411a92 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -24,7 +24,7 @@
 parser = argparse.ArgumentParser()
 parser.add_argument("-v", "--verbosity", type=int)
 parser.add_argument("-k", "--keep_data", action='store_true')
-parser.add_argument("operation", choices=["copy", "verify"])
+parser.add_argument("operation", choices=["copy", "verify", "libjade"])
 args = parser.parse_args()
 
 if args.verbosity:
@@ -65,15 +65,16 @@ def shell(command, expect=0):
     if ret.returncode != expect:
         raise Exception("'{}' failed with error {}. Expected {}.".format(" ".join(command), ret, expect))
 
-def generator(destination_file_path, template_filename, family, scheme_desired):
+def generator(destination_file_path, template_filename, delimiter, family, scheme_desired):
     template = file_get_contents(
         os.path.join(os.environ['LIBOQS_DIR'], 'scripts', 'copy_from_upstream', template_filename))
     f = copy.deepcopy(family)
+    contents = file_get_contents(os.path.join(os.environ['LIBOQS_DIR'], destination_file_path))
     if scheme_desired != None:
         f['schemes'] = [x for x in f['schemes'] if x == scheme_desired]
-        assert (len(f['schemes']) == 1)
-    # if scheme['implementation'] is not set, run over all implementations!
-    file_put_contents(destination_file_path, jinja2.Template(template).render(f))
+    identifier = '{} OQS_COPY_FROM_{}_FRAGMENT_{}'.format(delimiter, 'LIBJADE', os.path.splitext(os.path.basename(template_filename))[0].upper())
+    contents = jinja2.Template(template).render(f)
+    file_put_contents(destination_file_path, contents)
 
 
 def generator_all(filename, instructions):
@@ -82,24 +83,38 @@ def generator_all(filename, instructions):
     file_put_contents(filename, contents)
 
 
-def replacer(filename, instructions, delimiter):
+def replacer(filename, instructions, delimiter, libjade=False):
     fragments = glob.glob(
-        os.path.join(os.environ['LIBOQS_DIR'], 'scripts', 'copy_from_upstream', filename, '*.fragment'))
+        os.path.join(os.environ['LIBOQS_DIR'], 'scripts', 'copy_from_upstream', filename, '*.{}'.format('libjade' if libjade else 'fragment')))
     contents = file_get_contents(os.path.join(os.environ['LIBOQS_DIR'], filename))
     for fragment in fragments:
         template = file_get_contents(fragment)
         identifier = os.path.splitext(os.path.basename(fragment))[0]
-        identifier_start = '{} OQS_COPY_FROM_UPSTREAM_FRAGMENT_{}_START'.format(delimiter, identifier.upper())
-        identifier_end = '{} OQS_COPY_FROM_UPSTREAM_FRAGMENT_{}_END'.format(delimiter, identifier.upper())
+        identifier_start = '{} OQS_COPY_FROM_{}_FRAGMENT_{}_START'.format(delimiter, 'LIBJADE' if libjade else 'UPSTREAM', identifier.upper())
+        identifier_end = '{} OQS_COPY_FROM_{}_FRAGMENT_{}_END'.format(delimiter, 'LIBJADE' if libjade else 'UPSTREAM', identifier.upper())
         preamble = contents[:contents.find(identifier_start)]
         postamble = contents[contents.find(identifier_end):]
         contents = preamble + identifier_start + jinja2.Template(template).render(
             {'instructions': instructions, 'non_upstream_kems': non_upstream_kems}) + postamble
     file_put_contents(os.path.join(os.environ['LIBOQS_DIR'], filename), contents)
 
-def load_instructions():
+def replacer_contextual(destination_file_path, template_file_path, delimiter, family, scheme_desired, libjade=False):
+    contents = file_get_contents(destination_file_path)
+    template = file_get_contents(template_file_path)
+    identifier = os.path.basename(template_file_path).split(os.extsep)[0]
+    identifier_start = '{} OQS_COPY_FROM_{}_FRAGMENT_{}_START'.format(delimiter, 'LIBJADE' if libjade else 'UPSTREAM', identifier.upper())
+    identifier_end = '{} OQS_COPY_FROM_{}_FRAGMENT_{}_END'.format(delimiter, 'LIBJADE' if libjade else 'UPSTREAM', identifier.upper())
+    f = copy.deepcopy(family)
+    if scheme_desired != None:
+        f['schemes'] = [x for x in f['schemes'] if x == scheme_desired]
+    preamble = contents[:contents.find(identifier_start)]
+    postamble = contents[contents.find(identifier_end):]
+    contents = preamble + identifier_start + jinja2.Template(template).render(f) + postamble
+    file_put_contents(destination_file_path, contents)
+
+def load_instructions(file):
     instructions = file_get_contents(
-        os.path.join(os.environ['LIBOQS_DIR'], 'scripts', 'copy_from_upstream', 'copy_from_upstream.yml'),
+        os.path.join(os.environ['LIBOQS_DIR'], 'scripts', 'copy_from_upstream', file),
         encoding='utf-8')
     instructions = yaml.safe_load(instructions)
     upstreams = {}
@@ -118,10 +133,12 @@ def load_instructions():
           if not os.path.exists(work_dotgit):
             shell(['git', 'init', work_dir])
             shell(['git', '--git-dir', work_dotgit, 'remote', 'add', 'origin', upstream_git_url])
-          shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'remote', 'set-url', 'origin', upstream_git_url])
-          shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'fetch', '--depth=1', 'origin', upstream_git_commit])
-          shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'reset', '--hard', upstream_git_commit])
-          if 'patches' in upstream:
+        shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'remote', 'set-url', 'origin', upstream_git_url])
+        shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'fetch', '--depth=1', 'origin', upstream_git_commit])
+        shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'reset', '--hard', upstream_git_commit])
+        if file == 'copy_from_libjade.yml':
+            shell(['make', '-C', os.path.join(work_dir, 'src')])
+        if 'patches' in upstream:
             for patch in upstream['patches']:
                 patch_file = os.path.join('patches', patch)
                 shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'apply', '--whitespace=fix', '--directory', work_dir, patch_file])
@@ -152,6 +169,7 @@ def load_instructions():
         family['common_deps_usedby'] = {}
         family['all_required_flags'] = set()
         for scheme in family['schemes']:
+            scheme['family'] = family['name']
             if not 'upstream_location' in scheme:
                 scheme['upstream_location'] = family['upstream_location']
             if (not 'arch_specific_upstream_locations' in scheme) and 'arch_specific_upstream_locations' in family:
@@ -347,6 +365,7 @@ def load_instructions():
 
     return instructions
 
+
 # Copy over all files for a given impl in a family using scheme
 # Returns list of all relative source files
 def handle_common_deps(common_dep, family, dst_basedir):
@@ -483,7 +502,7 @@ def handle_implementation(impl, family, scheme, dst_basedir):
     return [x[len(srcfolder) + 1:] for x in ffs]
 
 
-def process_families(instructions, basedir, with_kat, with_generator):
+def process_families(instructions, basedir, with_kat, with_generator, with_libjade=False):
     for family in instructions['kems'] + instructions['sigs']:
         try:
             os.makedirs(os.path.join(basedir, 'src', family['type'], family['name']))
@@ -574,12 +593,14 @@ def process_families(instructions, basedir, with_kat, with_generator):
                 os.path.join(os.environ['LIBOQS_DIR'], 'src', family['type'], family['name'],
                              family['type'] + '_{}.h'.format(family['name'])),
                 os.path.join('src', family['type'], 'family', family['type'] + '_family.h'),
+                '/////',
                 family,
                 None,
             )
             generator(
                 os.path.join(os.environ['LIBOQS_DIR'], 'src', family['type'], family['name'], 'CMakeLists.txt'),
                 os.path.join('src', family['type'], 'family', 'CMakeLists.txt'),
+                '#####',
                 family,
                 None,
             )
@@ -589,16 +610,40 @@ def process_families(instructions, basedir, with_kat, with_generator):
                     os.path.join(os.environ['LIBOQS_DIR'], 'src', family['type'], family['name'],
                                  family['type'] + '_{}_{}.c'.format(family['name'], scheme['scheme_c'])),
                     os.path.join('src', family['type'], 'family', family['type'] + '_scheme.c'),
+                    '/////',
                     family,
                     scheme,
                 )
+        
+        if with_libjade:
+            replacer_contextual(
+                os.path.join(os.environ['LIBOQS_DIR'], 'src', family['type'], family['name'], 'CMakeLists.txt'),
+                os.path.join('src', family['type'], 'family', 'CMakeLists.txt.libjade'),
+                '#####',
+                family,
+                None,
+                libjade=True
+            )
+
+            for scheme in family['schemes']:
+                for template in instructions['templates'][family['type'] + '_scheme.c']:
+                    replacer_contextual(
+                        os.path.join(os.environ['LIBOQS_DIR'], 'src', family['type'], family['name'],
+                                    family['type'] + '_{}_{}.c'.format(family['name'], scheme['scheme_c'])),
+                        os.path.join('src', family['type'], 'family', template),
+                        '/////',
+                        family,
+                        scheme,
+                        libjade=True
+                    )
+
 
 def copy_from_upstream():
     for t in ["kem", "sig"]:
         with open(os.path.join(os.environ['LIBOQS_DIR'], 'tests', 'KATs', t, 'kats.json'), 'r') as fp:
             kats[t] = json.load(fp)
 
-    instructions = load_instructions()
+    instructions = load_instructions('copy_from_upstream.yml')
     process_families(instructions, os.environ['LIBOQS_DIR'], True, True)
     replacer('.CMake/alg_support.cmake', instructions, '#####')
     replacer('CMakeLists.txt', instructions, '#####')
@@ -624,6 +669,18 @@ def copy_from_upstream():
     if not keepdata:
         shutil.rmtree('repos')
 
+
+def copy_from_libjade():
+    for t in ["kem", "sig"]:
+        with open(os.path.join(os.environ['LIBOQS_DIR'], 'tests', 'KATs', t, 'kats.json'), 'r') as fp:
+            kats[t] = json.load(fp)
+
+    instructions = load_instructions('copy_from_libjade.yml')
+    process_families(instructions, os.environ['LIBOQS_DIR'], True, False, True)
+    replacer('.CMake/alg_support.cmake', instructions, '#####', libjade=True)
+    replacer('src/oqsconfig.h.cmake', instructions, '/////', libjade=True)
+
+
 def verify_from_upstream():
     instructions = load_instructions()
     basedir = "verify_from_upstream"

From a18fa2aefedd6b482dd85b3309495804243eb29f Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 2 Apr 2024 17:46:54 +0200
Subject: [PATCH 03/82] Add patches for libjade Kyber code

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../patches/libjade-kyber-api.patch           | 309 ++++++++++++++++++
 .../patches/libjade-kyber-meta.patch          |  76 +++++
 2 files changed, 385 insertions(+)
 create mode 100644 scripts/copy_from_upstream/patches/libjade-kyber-api.patch
 create mode 100644 scripts/copy_from_upstream/patches/libjade-kyber-meta.patch

diff --git a/scripts/copy_from_upstream/patches/libjade-kyber-api.patch b/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
new file mode 100644
index 0000000000..5215a7bdee
--- /dev/null
+++ b/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
@@ -0,0 +1,309 @@
+diff --git a/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c b/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c
+new file mode 100644
+index 0000000..0a84abf
+--- /dev/null
++++ b/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c
+@@ -0,0 +1,20 @@
++#include <oqs/rand.h>
++#include "libjade_randombytes.h"
++#include "api.h"
++
++int libjade_kyber512_amd64_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
++    uint8_t keypair_coins[JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES];
++    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2);
++    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2);
++    return jade_kem_kyber_kyber512_amd64_avx2_keypair_derand(public_key, secret_key, keypair_coins);
++}
++
++int libjade_kyber512_amd64_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
++    uint8_t enc_coins[JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES];
++    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES);
++    return jade_kem_kyber_kyber512_amd64_avx2_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
++}
++
++int libjade_kyber512_amd64_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
++    return jade_kem_kyber_kyber512_amd64_avx2_dec( shared_secret, ciphertext, secret_key); 
++}
+\ No newline at end of file
+diff --git a/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h b/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h
+index 5148fd5..0914217 100644
+--- a/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h
++++ b/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h
+@@ -3,16 +3,8 @@
+ 
+ #include <stdint.h>
+ 
+-#define JADE_KEM_kyber_kyber512_amd64_avx2_SECRETKEYBYTES   1632
+-#define JADE_KEM_kyber_kyber512_amd64_avx2_PUBLICKEYBYTES   800
+-#define JADE_KEM_kyber_kyber512_amd64_avx2_CIPHERTEXTBYTES  768
+ #define JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES 64
+ #define JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES     32
+-#define JADE_KEM_kyber_kyber512_amd64_avx2_BYTES            32
+-
+-#define JADE_KEM_kyber_kyber512_amd64_avx2_ALGNAME         "Kyber512"
+-#define JADE_KEM_kyber_kyber512_amd64_avx2_ARCH            "amd64"
+-#define JADE_KEM_kyber_kyber512_amd64_avx2_IMPL            "avx2"
+ 
+ int jade_kem_kyber_kyber512_amd64_avx2_keypair_derand(
+   uint8_t *public_key,
+@@ -20,7 +12,7 @@ int jade_kem_kyber_kyber512_amd64_avx2_keypair_derand(
+   const uint8_t *coins
+ );
+ 
+-int jade_kem_kyber_kyber512_amd64_avx2_keypair(
++int libjade_kyber512_amd64_avx2_keypair(
+   uint8_t *public_key,
+   uint8_t *secret_key
+ );
+@@ -32,7 +24,7 @@ int jade_kem_kyber_kyber512_amd64_avx2_enc_derand(
+   const uint8_t *coins
+ );
+ 
+-int jade_kem_kyber_kyber512_amd64_avx2_enc(
++int libjade_kyber512_amd64_avx2_enc(
+   uint8_t *ciphertext,
+   uint8_t *shared_secret,
+   const uint8_t *public_key
+@@ -44,4 +36,10 @@ int jade_kem_kyber_kyber512_amd64_avx2_dec(
+   const uint8_t *secret_key
+ );
+ 
++int libjade_kyber512_amd64_avx2_dec(
++  uint8_t *shared_secret,
++  const uint8_t *ciphertext,
++  const uint8_t *secret_key
++);
++
+ #endif
+diff --git a/src/crypto_kem/kyber/kyber512/amd64/ref/api.c b/src/crypto_kem/kyber/kyber512/amd64/ref/api.c
+new file mode 100644
+index 0000000..12836e0
+--- /dev/null
++++ b/src/crypto_kem/kyber/kyber512/amd64/ref/api.c
+@@ -0,0 +1,20 @@
++#include <oqs/rand.h>
++#include "libjade_randombytes.h"
++#include "api.h"
++
++int libjade_kyber512_amd64_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
++    uint8_t keypair_coins[JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES];
++    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2);
++    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2);
++    return jade_kem_kyber_kyber512_amd64_ref_keypair_derand(public_key, secret_key, keypair_coins);
++}
++
++int libjade_kyber512_amd64_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
++    uint8_t enc_coins[JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES];
++    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES);
++    return jade_kem_kyber_kyber512_amd64_ref_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
++}
++
++int libjade_kyber512_amd64_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
++    return jade_kem_kyber_kyber512_amd64_ref_dec(shared_secret, ciphertext, secret_key);
++}
+\ No newline at end of file
+diff --git a/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h b/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h
+index 38127cf..2332230 100644
+--- a/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h
++++ b/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h
+@@ -3,17 +3,8 @@
+ 
+ #include <stdint.h>
+ 
+-#define JADE_KEM_kyber_kyber512_amd64_ref_SECRETKEYBYTES   1632
+-#define JADE_KEM_kyber_kyber512_amd64_ref_PUBLICKEYBYTES   800
+-#define JADE_KEM_kyber_kyber512_amd64_ref_CIPHERTEXTBYTES  768
+ #define JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES 64
+ #define JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES     32
+-#define JADE_KEM_kyber_kyber512_amd64_ref_BYTES            32
+-
+-#define JADE_KEM_kyber_kyber512_amd64_ref_ALGNAME         "Kyber512"
+-#define JADE_KEM_kyber_kyber512_amd64_ref_ARCH            "amd64"
+-#define JADE_KEM_kyber_kyber512_amd64_ref_IMPL            "ref"
+-
+ 
+ int jade_kem_kyber_kyber512_amd64_ref_keypair_derand(
+   uint8_t *public_key,
+@@ -21,7 +12,7 @@ int jade_kem_kyber_kyber512_amd64_ref_keypair_derand(
+   const uint8_t *coins
+ );
+ 
+-int jade_kem_kyber_kyber512_amd64_ref_keypair(
++int libjade_kyber512_amd64_ref_keypair(
+   uint8_t *public_key,
+   uint8_t *secret_key
+ );
+@@ -33,7 +24,7 @@ int jade_kem_kyber_kyber512_amd64_ref_enc_derand(
+   const uint8_t *coins
+ );
+ 
+-int jade_kem_kyber_kyber512_amd64_ref_enc(
++int libjade_kyber512_amd64_ref_enc(
+   uint8_t *ciphertext,
+   uint8_t *shared_secret,
+   const uint8_t *public_key
+@@ -45,4 +36,10 @@ int jade_kem_kyber_kyber512_amd64_ref_dec(
+   const uint8_t *secret_key
+ );
+ 
++int libjade_kyber512_amd64_ref_dec(
++  uint8_t *shared_secret,
++  const uint8_t *ciphertext,
++  const uint8_t *secret_key
++);
++
+ #endif
+diff --git a/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c b/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c
+new file mode 100644
+index 0000000..15571bf
+--- /dev/null
++++ b/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c
+@@ -0,0 +1,20 @@
++#include <oqs/rand.h>
++#include "libjade_randombytes.h"
++#include "api.h"
++
++int libjade_kyber768_amd64_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
++    uint8_t keypair_coins[JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES];
++    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2);
++    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2);
++    return jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(public_key, secret_key, keypair_coins);
++}
++
++int libjade_kyber768_amd64_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
++    uint8_t enc_coins[JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES];
++    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES);
++    return jade_kem_kyber_kyber768_amd64_avx2_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
++}
++
++int libjade_kyber768_amd64_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
++    return jade_kem_kyber_kyber768_amd64_avx2_dec(shared_secret, ciphertext, secret_key);
++}
+\ No newline at end of file
+diff --git a/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h b/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h
+index d3b3500..be5f7db 100644
+--- a/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h
++++ b/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h
+@@ -3,16 +3,8 @@
+ 
+ #include <stdint.h>
+ 
+-#define JADE_KEM_kyber_kyber768_amd64_avx2_SECRETKEYBYTES    2400
+-#define JADE_KEM_kyber_kyber768_amd64_avx2_PUBLICKEYBYTES    1184
+-#define JADE_KEM_kyber_kyber768_amd64_avx2_CIPHERTEXTBYTES   1088
+ #define JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES  64
+ #define JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES      32
+-#define JADE_KEM_kyber_kyber768_amd64_avx2_BYTES             32
+-
+-#define JADE_KEM_kyber_kyber768_amd64_avx2_ALGNAME           "Kyber768"
+-#define JADE_KEM_kyber_kyber768_amd64_avx2_ARCH              "amd64"
+-#define JADE_KEM_kyber_kyber768_amd64_avx2_IMPL              "avx2"
+ 
+ int jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(
+   uint8_t *public_key,
+@@ -20,7 +12,7 @@ int jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(
+   const uint8_t *coins
+ );
+ 
+-int jade_kem_kyber_kyber768_amd64_avx2_keypair(
++int libjade_kyber768_amd64_avx2_keypair(
+   uint8_t *public_key,
+   uint8_t *secret_key
+ );
+@@ -32,7 +24,7 @@ int jade_kem_kyber_kyber768_amd64_avx2_enc_derand(
+   const uint8_t *coins
+ );
+ 
+-int jade_kem_kyber_kyber768_amd64_avx2_enc(
++int libjade_kyber768_amd64_avx2_enc(
+   uint8_t *ciphertext,
+   uint8_t *shared_secret,
+   const uint8_t *public_key
+@@ -44,4 +36,10 @@ int jade_kem_kyber_kyber768_amd64_avx2_dec(
+   const uint8_t *secret_key
+ );
+ 
++int libjade_kyber768_amd64_avx2_dec(
++  uint8_t *shared_secret,
++  const uint8_t *ciphertext,
++  const uint8_t *secret_key
++);
++
+ #endif
+diff --git a/src/crypto_kem/kyber/kyber768/amd64/ref/api.c b/src/crypto_kem/kyber/kyber768/amd64/ref/api.c
+new file mode 100644
+index 0000000..6055d87
+--- /dev/null
++++ b/src/crypto_kem/kyber/kyber768/amd64/ref/api.c
+@@ -0,0 +1,20 @@
++#include <oqs/rand.h>
++#include "libjade_randombytes.h"
++#include "api.h"
++
++int libjade_kyber768_amd64_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
++    uint8_t keypair_coins[JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES];
++    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2);
++    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2);
++    return jade_kem_kyber_kyber768_amd64_ref_keypair_derand(public_key, secret_key, keypair_coins);
++}
++
++int libjade_kyber768_amd64_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
++    uint8_t enc_coins[JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES];
++    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES);
++    return jade_kem_kyber_kyber768_amd64_ref_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
++}
++
++int libjade_kyber768_amd64_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
++    return jade_kem_kyber_kyber768_amd64_ref_dec(shared_secret, ciphertext, secret_key); 
++}
+\ No newline at end of file
+diff --git a/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h b/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h
+index e23e1bf..b8f2fc3 100644
+--- a/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h
++++ b/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h
+@@ -3,16 +3,8 @@
+ 
+ #include <stdint.h>
+ 
+-#define JADE_KEM_kyber_kyber768_amd64_ref_SECRETKEYBYTES   2400
+-#define JADE_KEM_kyber_kyber768_amd64_ref_PUBLICKEYBYTES   1184
+-#define JADE_KEM_kyber_kyber768_amd64_ref_CIPHERTEXTBYTES  1088
+ #define JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES 64
+ #define JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES     32
+-#define JADE_KEM_kyber_kyber768_amd64_ref_BYTES            32
+-
+-#define JADE_KEM_kyber_kyber768_amd64_ref_ALGNAME         "Kyber768"
+-#define JADE_KEM_kyber_kyber768_amd64_ref_ARCH            "amd64"
+-#define JADE_KEM_kyber_kyber768_amd64_ref_IMPL            "ref"
+ 
+ int jade_kem_kyber_kyber768_amd64_ref_keypair_derand(
+   uint8_t *public_key,
+@@ -20,7 +12,7 @@ int jade_kem_kyber_kyber768_amd64_ref_keypair_derand(
+   const uint8_t *coins
+ );
+ 
+-int jade_kem_kyber_kyber768_amd64_ref_keypair(
++int libjade_kyber768_amd64_ref_keypair(
+   uint8_t *public_key,
+   uint8_t *secret_key
+ );
+@@ -32,7 +24,7 @@ int jade_kem_kyber_kyber768_amd64_ref_enc_derand(
+   const uint8_t *coins
+ );
+ 
+-int jade_kem_kyber_kyber768_amd64_ref_enc(
++int libjade_kyber768_amd64_ref_enc(
+   uint8_t *ciphertext,
+   uint8_t *shared_secret,
+   const uint8_t *public_key
+@@ -44,4 +36,10 @@ int jade_kem_kyber_kyber768_amd64_ref_dec(
+   const uint8_t *secret_key
+ );
+ 
++int libjade_kyber768_amd64_ref_dec(
++  uint8_t *shared_secret,
++  const uint8_t *ciphertext,
++  const uint8_t *secret_key
++);
++
+ #endif
diff --git a/scripts/copy_from_upstream/patches/libjade-kyber-meta.patch b/scripts/copy_from_upstream/patches/libjade-kyber-meta.patch
new file mode 100644
index 0000000000..e3d110d0c4
--- /dev/null
+++ b/scripts/copy_from_upstream/patches/libjade-kyber-meta.patch
@@ -0,0 +1,76 @@
+diff --git a/src/crypto_kem/kyber/kyber512/META.yml b/src/crypto_kem/kyber/kyber512/META.yml
+index 000ec75..797fca4 100644
+--- a/src/crypto_kem/kyber/kyber512/META.yml
++++ b/src/crypto_kem/kyber/kyber512/META.yml
+@@ -1,7 +1,6 @@
+ name: Kyber512
+ type: kem
+-checksumsmall: 9c1a84c0573d21b5fb50ff68f015c19206cebbda4aa3caa6f9ba4b167eea9514
+-checksumbig: 4596232083e3da10d341576afbc59b24a520073e985a9b9df2d587e67e926a7b
++nistkat-sha256: bb0481d3325d828817900b709d23917cefbc10026fc857f098979451f67bb0ca
+ claimed-nist-level: 1
+ claimed-security: IND-CCA2
+ length-public-key: 800
+@@ -15,17 +14,20 @@ auxiliary-submitters:
+ implementations:
+     - name: amd64/ref
+       version: TODO
++      signature_keypair: libjade_kyber512_amd64_ref_keypair
++      signature_enc: libjade_kyber512_amd64_ref_enc
++      signature_dec: libjade_kyber512_amd64_ref_dec
+       supported_platforms:
+         - architecture: x86_64
+           operating_systems:
+               - Linux
+               - Darwin
+-          required_flags: # FIXME
+-              - avx2
+-              - bmi2
+-              - popcnt
++          required_flags: []
+     - name: amd64/avx2
+       version: TODO
++      signature_keypair: libjade_kyber512_amd64_avx2_keypair
++      signature_enc: libjade_kyber512_amd64_avx2_enc
++      signature_dec: libjade_kyber512_amd64_avx2_dec
+       supported_platforms:
+         - architecture: x86_64
+           operating_systems:
+diff --git a/src/crypto_kem/kyber/kyber768/META.yml b/src/crypto_kem/kyber/kyber768/META.yml
+index d744938..0813fe2 100644
+--- a/src/crypto_kem/kyber/kyber768/META.yml
++++ b/src/crypto_kem/kyber/kyber768/META.yml
+@@ -1,7 +1,6 @@
+ name: Kyber768
+ type: kem
+-checksumsmall: 456bb24a767160dcca466adde267b87f359de6e827d31b5b23512d227d8bbfaa
+-checksumbig: 8004a42f34a4125acb4f88628139576882cdf9502a77937003e34f52d217a730
++nistkat-sha256: 89e82a5bf2d4ddb2c6444e10409e6d9ca65dafbca67d1a0db2c9b54920a29172
+ claimed-nist-level: 3
+ claimed-security: IND-CCA2
+ length-public-key: 1184
+@@ -15,17 +14,20 @@ auxiliary-submitters:
+ implementations:
+     - name: amd64/ref
+       version: TODO
++      signature_keypair: libjade_kyber768_amd64_ref_keypair
++      signature_enc: libjade_kyber768_amd64_ref_enc
++      signature_dec: libjade_kyber768_amd64_ref_dec
+       supported_platforms:
+         - architecture: x86_64
+           operating_systems:
+               - Linux
+               - Darwin
+-          required_flags: # FIXME
+-              - avx2
+-              - bmi2
+-              - popcnt
++          required_flags: []
+     - name: amd64/avx2
+       version: TODO
++      signature_keypair: libjade_kyber768_amd64_avx2_keypair
++      signature_enc: libjade_kyber768_amd64_avx2_enc
++      signature_dec: libjade_kyber768_amd64_avx2_dec
+       supported_platforms:
+         - architecture: x86_64
+           operating_systems:

From e81c66e889c8a525767df1071ad64f486c695976 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 2 Apr 2024 17:56:47 +0200
Subject: [PATCH 04/82] Update alg_support.cmake templates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .CMake/alg_support.cmake                      |  4 ++
 .../add_enable_by_alg.libjade                 | 65 +++++++++++++++++++
 2 files changed, 69 insertions(+)
 create mode 100644 scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade

diff --git a/.CMake/alg_support.cmake b/.CMake/alg_support.cmake
index 3bdb103af7..36c5027f52 100644
--- a/.CMake/alg_support.cmake
+++ b/.CMake/alg_support.cmake
@@ -497,6 +497,10 @@ endif()
 
 ##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ENABLE_BY_ALG_CONDITIONAL_END
 
+##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_START
+
+##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_END
+
 # Set XKCP (Keccak) required for Sphincs AVX2 code even if OpenSSL3 SHA3 is used:
 if (${OQS_ENABLE_SIG_SPHINCS} OR NOT ${OQS_USE_SHA3_OPENSSL})
     set(OQS_ENABLE_SHA3_xkcp_low ON)
diff --git a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
new file mode 100644
index 0000000000..5af2995fda
--- /dev/null
+++ b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
@@ -0,0 +1,65 @@
+
+if(OQS_LIBJADE_BUILD)
+{% for family in instructions['kems'] %}
+option(OQS_ENABLE_KEM_LIBJADE_{{ family['name']|upper }} "Enable {{ family['name'] }} algorithm family" ON)
+    {%- for scheme in family['schemes'] %}
+cmake_dependent_option(OQS_ENABLE_KEM_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }} "" ON "OQS_ENABLE_KEM_LIBJADE_{{ family['name']|upper }}" OFF)
+        {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] and impl['supported_platforms'] -%}
+            {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'x86_64' %}
+{% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
+{% endif -%}
+if(OQS_DIST_X86_64_BUILD OR ({% for flag in platform['required_flags'] -%} OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- if not loop.last %} AND {% endif -%}{%- endfor -%}))
+    cmake_dependent_option(OQS_ENABLE_KEM_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_KEM_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+endif()
+{% if platform['operating_systems'] %}endif()
+{% endif -%}
+            {%- endfor -%}
+            {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'ARM64_V8' %}
+{% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
+{% endif -%}
+if((OQS_DIST_ARM64_V8_BUILD OR (OQS_USE_ARM_NEON_INSTRUCTIONS{% for flag in platform['required_flags'] -%} {%- if not loop.last or loop.first %} AND {% endif -%}OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- endfor -%})))
+{% if impl['upstream']['name'] == 'pqclean' -%}
+if(((CMAKE_C_COMPILER_ID STREQUAL "GNU") AND (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "9.4.0")) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "9.4.0")) OR ((NOT (CMAKE_C_COMPILER_ID STREQUAL "GNU")) AND (NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))))
+{%- endif %}
+    cmake_dependent_option(OQS_ENABLE_KEM_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} "" ON "OQS_ENABLE_KEM_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+{% if impl['upstream']['name'] == 'pqclean' -%}
+else()
+    message(WARNING "  ARM optimizations are not fully supported on this compiler version.")
+endif()
+{%- endif %}
+endif()
+{% if platform['operating_systems'] %}endif()
+{% endif -%}
+            {%- endfor -%}
+        {%- endfor -%}
+    {%- endfor %}
+{% endfor -%}
+
+{% for family in instructions['sigs'] %}
+
+    {%- for scheme in family['schemes'] %}
+cmake_dependent_option(OQS_ENABLE_SIG_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }} "" ON "OQS_ENABLE_SIG_LIBJADE_{{ family['name']|upper }}" OFF)
+        {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] and impl['supported_platforms'] -%}
+            {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'x86_64' %}
+{% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
+{% endif -%}
+if(OQS_DIST_X86_64_BUILD OR ({% for flag in platform['required_flags'] -%} OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- if not loop.last %} AND {% endif -%}{%- endfor -%}))
+    cmake_dependent_option(OQS_ENABLE_SIG_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_SIG_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+endif()
+{% if platform['operating_systems'] %}endif()
+{% endif -%}
+            {%- endfor -%}
+            {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'ARM64_V8' %}
+{% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
+{% endif -%}
+if(OQS_DIST_ARM64_V8_BUILD OR (OQS_USE_ARM_NEON_INSTRUCTIONS{% for flag in platform['required_flags'] -%} {%- if not loop.last or loop.first %} AND {% endif -%}OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- endfor -%}))
+    cmake_dependent_option(OQS_ENABLE_SIG_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} "" ON "OQS_ENABLE_SIG_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+endif()
+{% if platform['operating_systems'] %}endif()
+{% endif -%}
+            {%- endfor -%}
+        {%- endfor -%}
+    {%- endfor %}
+{% endfor -%}
+endif()
+

From 75b33bafea0d8102f365cdcdc75ccc0f86b6eb93 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 2 Apr 2024 18:01:22 +0200
Subject: [PATCH 05/82] Update KEM famiy templates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../src/kem/family/CMakeLists.txt.libjade     | 61 +++++++++++++++++++
 .../kem/family/kem_scheme_decaps.c.libjade    | 42 +++++++++++++
 .../kem/family/kem_scheme_encaps.c.libjade    | 42 +++++++++++++
 .../kem/family/kem_scheme_keypair.c.libjade   | 41 +++++++++++++
 4 files changed, 186 insertions(+)
 create mode 100644 scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
 create mode 100644 scripts/copy_from_upstream/src/kem/family/kem_scheme_decaps.c.libjade
 create mode 100644 scripts/copy_from_upstream/src/kem/family/kem_scheme_encaps.c.libjade
 create mode 100644 scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade

diff --git a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
new file mode 100644
index 0000000000..846c64a8ae
--- /dev/null
+++ b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
@@ -0,0 +1,61 @@
+
+{%- if common_deps is defined %}
+    {%- for common_dep in common_deps %}
+
+if({% for used_by in common_deps_usedby[common_dep['name']] -%}OQS_ENABLE_KEM_LIBJADE_{{ family }}_{{ used_by['scheme_c'] }}{%- if used_by['impl_name'] != default_implementation %}_{{ used_by['impl_name'] }}{% endif -%}{%- if not loop.last %} OR {% endif -%}{%- endfor -%})
+    add_library({{ family }}_{{ common_dep['name'] }} OBJECT {% for source_file in common_dep['sources_addl']|sort -%}{{ upstream_location }}_{{ common_dep['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
+    target_include_directories({{ family }}_{{ common_dep['name'] }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ upstream_location }}_{{ common_dep['name'] }})
+        {%- if common_dep['required_flags'] %}
+    target_compile_options({{ family }}_{{ common_dep['name'] }} PRIVATE {%- for flag in common_dep['required_flags'] %}{%- if flag != 'arm_neon' %} -m{%- if flag == 'bmi1' -%} bmi {%- elif flag == 'sse4_1' -%} sse4.1 {%- elif flag == 'pclmulqdq' -%} pclmul {%- else -%}{{ flag }}{%- endif -%}{%- endif -%}{%- endfor -%})
+        {%- endif %}
+        {%- if common_dep['compile_opts'] %}
+    target_compile_options({{ family }}_{{ common_dep['name'] }} PUBLIC {{ common_dep['compile_opts'] }})
+        {%- endif %}
+    set(_{{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} $<TARGET_OBJECTS:{{ family }}_{{ common_dep['name'] }}>)
+endif()
+
+    {%- endfor %}
+{%- endif %}
+
+{%- for scheme in schemes -%}
+    {%- for impl in scheme['metadata']['implementations'] -%}
+        {%- if impl['name'] == scheme['default_implementation'] %}
+
+if(OQS_ENABLE_KEM_LIBJADE_{{ family }}_{{ scheme['scheme_c'] }})
+    add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} OBJECT kem_{{ family }}_{{ scheme['scheme'] }}.c {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
+           {%- if impl['compile_opts'] %}
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PUBLIC {{ impl['compile_opts'] }})
+           {%- endif -%}
+
+        {%- else %}
+
+if(OQS_ENABLE_KEM_LIBJADE_{{ family }}_{{ scheme['scheme_c'] }}_{{ impl['name'].replace('/', '_') }})
+    add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} OBJECT {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
+        {%- endif %}
+    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/include)
+    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+        {%- if impl['name'].replace('/', '_') != scheme['default_implementation'] and impl['required_flags'] -%}
+           {%- set opts %}{% for flag in impl['required_flags'] %}{%- if flag != 'arm_neon' %} -m{%- if flag == 'bmi1' -%} bmi {% elif flag == 'sse4_1' -%} sse4.1 {% elif flag == 'pclmulqdq' -%} pclmul {% else -%}{{ flag }} {% endif %}{% endif -%}{% endfor %}{% endset %}
+           {%- if opts|length > 0 %}
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE {{ opts }})
+           {%- endif -%}
+        {%- endif %}
+        {%- if impl['compile_opts'] %}
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PUBLIC {{ impl['compile_opts'] }})
+        {%- endif %}
+        {%- if family == 'classic_mceliece' and impl['name'].replace('/', '_') == 'avx2' %}
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE -Wno-language-extension-token -O1)
+        {%- endif %}
+        {%- if family == 'hqc' and impl['name'].replace('/', '_') == 'avx2' %}
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE -Wno-missing-braces)
+        {%- endif %}
+        {%- if impl['upstream']['name'] == 'pqclean' %}
+    if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+        target_compile_definitions({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE old_gas_syntax)
+    endif()
+    	{%- endif %}
+    set(_{{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} $<TARGET_OBJECTS:{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}>)
+endif()
+    {%- endfor -%}
+{%- endfor %}
+
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme_decaps.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme_decaps.c.libjade
new file mode 100644
index 0000000000..544982b41e
--- /dev/null
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme_decaps.c.libjade
@@ -0,0 +1,42 @@
+{% for scheme in schemes -%}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] == scheme['default_implementation'] %}
+        {%- if impl['signature_dec'] %}
+           {%- set cleandec = scheme['metadata'].update({'default_dec_signature': impl['signature_dec']}) -%}
+        {%- else %}
+           {%- set cleandec = scheme['metadata'].update({'default_dec_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_dec"}) -%}
+        {%- endif %}
+    {%- endfor %}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
+    {%- if loop.first %}
+#if defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }})
+    {%- else %}
+#elif defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }})
+    {%- endif %}
+    {%- if 'required_flags' in impl and impl['required_flags'] %}
+#if defined(OQS_DIST_BUILD)
+	if ({%- for flag in impl['required_flags'] -%}OQS_CPU_has_extension(OQS_CPU_EXT_{{ flag|upper }}){%- if not loop.last %} && {% endif -%}{%- endfor -%}) {
+#endif /* OQS_DIST_BUILD */
+    {%- endif -%}
+           {%- if impl['signature_dec'] %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) {{ impl['signature_dec'] }}(shared_secret, ciphertext, secret_key);
+           {%- else %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name'].replace('/', '_')|upper }}_crypto_kem_dec(shared_secret, ciphertext, secret_key);
+           {%- endif %}
+    {%- if 'required_flags' in impl and impl['required_flags'] %}
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) {{ scheme['metadata']['default_dec_signature'] }}(shared_secret, ciphertext, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
+    {%- endif -%}
+    {%- endfor %}
+    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
+#else
+    {%- endif %}
+	return (OQS_STATUS) {{ scheme['metadata']['default_dec_signature'] }}(shared_secret, ciphertext, secret_key);
+    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
+#endif
+    {%- endif %}
+{% endfor -%}
+
+
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme_encaps.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme_encaps.c.libjade
new file mode 100644
index 0000000000..1f193d49f0
--- /dev/null
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme_encaps.c.libjade
@@ -0,0 +1,42 @@
+{% for scheme in schemes -%}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] == scheme['default_implementation'] %}
+        {%- if impl['signature_enc'] %}
+           {%- set cleanenc = scheme['metadata'].update({'default_enc_signature': impl['signature_enc']}) -%}
+        {%- else %}
+           {%- set cleanenc = scheme['metadata'].update({'default_enc_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_enc"}) -%}
+        {%- endif %}
+    {%- endfor %}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
+    {%- if loop.first %}
+#if defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }})
+    {%- else %}
+#elif defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }})
+    {%- endif %}
+    {%- if 'required_flags' in impl and impl['required_flags'] %}
+#if defined(OQS_DIST_BUILD)
+	if ({%- for flag in impl['required_flags'] -%}OQS_CPU_has_extension(OQS_CPU_EXT_{{ flag|upper }}){%- if not loop.last %} && {% endif -%}{%- endfor -%}) {
+#endif /* OQS_DIST_BUILD */
+    {%- endif -%}
+           {%- if impl['signature_enc'] %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) {{ impl['signature_enc'] }}(ciphertext, shared_secret, public_key);
+           {%- else %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name'].replace('/', '_')|upper }}_crypto_kem_enc(ciphertext, shared_secret, public_key);
+           {%- endif %}
+    {%- if 'required_flags' in impl and impl['required_flags'] %}
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) {{ scheme['metadata']['default_enc_signature'] }}(ciphertext, shared_secret, public_key);
+	}
+#endif /* OQS_DIST_BUILD */
+    {%- endif -%}
+    {%- endfor %}
+    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
+#else
+    {%- endif %}
+	return (OQS_STATUS) {{ scheme['metadata']['default_enc_signature'] }}(ciphertext, shared_secret, public_key);
+    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
+#endif
+    {%- endif %}
+{% endfor -%}
+
+
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
new file mode 100644
index 0000000000..d22b5ed660
--- /dev/null
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
@@ -0,0 +1,41 @@
+{% for scheme in schemes -%}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] == scheme['default_implementation'] %}
+
+        {%- if impl['signature_keypair'] %}
+           {%- set cleankeypair = scheme['metadata'].update({'default_keypair_signature': impl['signature_keypair']}) -%}
+        {%- else %}
+           {%- set cleankeypair = scheme['metadata'].update({'default_keypair_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_keypair"}) -%}
+        {%- endif %}
+    {%- endfor %}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
+    {%- if loop.first %}
+#if defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }})
+    {%- else %}
+#elif defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }})
+    {%- endif %}
+    {%- if 'required_flags' in impl and impl['required_flags'] %}
+#if defined(OQS_DIST_BUILD)
+	if ({%- for flag in impl['required_flags'] -%}OQS_CPU_has_extension(OQS_CPU_EXT_{{ flag|upper }}){%- if not loop.last %} && {% endif -%}{%- endfor -%}) {
+#endif /* OQS_DIST_BUILD */
+    {%- endif -%}
+           {%- if impl['signature_keypair'] %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) {{ impl['signature_keypair'] }}(public_key, secret_key);
+           {%- else %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name'].replace('/', '_')|upper }}_crypto_kem_keypair(public_key, secret_key);
+           {%- endif %}
+    {%- if 'required_flags' in impl and impl['required_flags'] %}
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) {{ scheme['metadata']['default_keypair_signature'] }}(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
+    {%- endif -%}
+    {%- endfor %}
+    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
+#else
+    {%- endif %}
+	return (OQS_STATUS) {{ scheme['metadata']['default_keypair_signature'] }}(public_key, secret_key);
+    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
+#endif
+    {%- endif %}
+{% endfor -%}
\ No newline at end of file

From 7137e8c797aadb0e6e53839b60a61e8f771733cc Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 2 Apr 2024 18:03:40 +0200
Subject: [PATCH 06/82] Fix copy_from_upstream.py

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/copy_from_upstream.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index c179411a92..81ba7b6223 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -758,5 +758,7 @@ def verify_from_upstream():
 
 if args.operation == "copy":
     copy_from_upstream()
+elif args.operation == "libjade":
+    copy_from_libjade()
 elif args.operation == "verify":
     verify_from_upstream()

From 532cadf2dcb6263bee2d1cda5023464a2661453e Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 2 Apr 2024 21:12:55 +0200
Subject: [PATCH 07/82] Correct copy_from_upstream.py

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/copy_from_upstream.py | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index 81ba7b6223..3dd7650f59 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -443,11 +443,9 @@ def handle_implementation(impl, family, scheme, dst_basedir):
             of = impl
         origfolder = os.path.join(scheme['scheme_paths'][impl], of)
         upstream_location = i['upstream']['name']
-        shutil.rmtree(os.path.join(dst_basedir, 'src', family['type'], family['name'],
-                               '{}_{}_{}'.format(upstream_location, scheme['pqclean_scheme'], impl)),
-                  ignore_errors=True)
         srcfolder = os.path.join(dst_basedir, 'src', family['type'], family['name'],
-                             '{}_{}_{}'.format(upstream_location, scheme['pqclean_scheme'], impl))
+                             '{}_{}_{}'.format(upstream_location, scheme['pqclean_scheme'], impl.replace('/', '_')))
+        shutil.rmtree(srcfolder, ignore_errors=True)
         # Don't copy from PQClean straight but check for origfile list
         try:
             os.mkdir(srcfolder)

From 49128080ac49efd8d0aec7e4ce8ad3c18252852d Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 2 Apr 2024 21:47:16 +0200
Subject: [PATCH 08/82] Modify copy_from_upstream.yml

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/copy_from_upstream.yml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/scripts/copy_from_upstream/copy_from_upstream.yml b/scripts/copy_from_upstream/copy_from_upstream.yml
index d8a9a4d121..904a409914 100644
--- a/scripts/copy_from_upstream/copy_from_upstream.yml
+++ b/scripts/copy_from_upstream/copy_from_upstream.yml
@@ -119,6 +119,7 @@ kems:
   -
     name: kyber
     default_implementation: ref
+    libjade_implementation: True
     arch_specific_implementations:
                                       aarch64: aarch64
     upstream_location: pqcrystals-kyber
@@ -129,14 +130,17 @@ kems:
         scheme: "512"
         pqclean_scheme: kyber512
         pretty_name_full: Kyber512
+        libjade_implementation: True
       -
         scheme: "768"
         pqclean_scheme: kyber768
         pretty_name_full: Kyber768
+        libjade_implementation: True
       -
         scheme: "1024"
         pqclean_scheme: kyber1024
         pretty_name_full: Kyber1024
+        libjade_implementation: False
   -
     name: ml_kem
     default_implementation: ref

From 8b8a7ef2d7672643968b3e3878eb102d349a4cfc Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 2 Apr 2024 22:31:10 +0200
Subject: [PATCH 09/82] Update KEM family templates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../add_enable_by_alg.libjade                 |  8 ++--
 .../src/kem/family/CMakeLists.txt             |  6 +++
 .../src/kem/family/CMakeLists.txt.libjade     | 36 +++++++--------
 .../src/kem/family/kem_scheme.c               | 25 ++++++++++
 .../src/kem/family/kem_scheme.c.libjade       | 46 +++++++++++++++++++
 .../kem/family/kem_scheme_decaps.c.libjade    |  4 +-
 .../kem/family/kem_scheme_encaps.c.libjade    |  4 +-
 .../kem/family/kem_scheme_keypair.c.libjade   |  4 +-
 8 files changed, 105 insertions(+), 28 deletions(-)
 create mode 100644 scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade

diff --git a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
index 5af2995fda..c54dc66e24 100644
--- a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
+++ b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
@@ -1,15 +1,15 @@
 
 if(OQS_LIBJADE_BUILD)
 {% for family in instructions['kems'] %}
-option(OQS_ENABLE_KEM_LIBJADE_{{ family['name']|upper }} "Enable {{ family['name'] }} algorithm family" ON)
+option(OQS_ENABLE_LIBJADE_KEM_{{ family['name']|upper }} "Enable {{ family['name'] }} algorithm family" ON)
     {%- for scheme in family['schemes'] %}
-cmake_dependent_option(OQS_ENABLE_KEM_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }} "" ON "OQS_ENABLE_KEM_LIBJADE_{{ family['name']|upper }}" OFF)
+cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name']|upper }}" OFF)
         {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] and impl['supported_platforms'] -%}
             {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'x86_64' %}
 {% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
 {% endif -%}
 if(OQS_DIST_X86_64_BUILD OR ({% for flag in platform['required_flags'] -%} OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- if not loop.last %} AND {% endif -%}{%- endfor -%}))
-    cmake_dependent_option(OQS_ENABLE_KEM_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_KEM_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
 endif()
 {% if platform['operating_systems'] %}endif()
 {% endif -%}
@@ -21,7 +21,7 @@ if((OQS_DIST_ARM64_V8_BUILD OR (OQS_USE_ARM_NEON_INSTRUCTIONS{% for flag in plat
 {% if impl['upstream']['name'] == 'pqclean' -%}
 if(((CMAKE_C_COMPILER_ID STREQUAL "GNU") AND (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "9.4.0")) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "9.4.0")) OR ((NOT (CMAKE_C_COMPILER_ID STREQUAL "GNU")) AND (NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))))
 {%- endif %}
-    cmake_dependent_option(OQS_ENABLE_KEM_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} "" ON "OQS_ENABLE_KEM_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
 {% if impl['upstream']['name'] == 'pqclean' -%}
 else()
     message(WARNING "  ARM optimizations are not fully supported on this compiler version.")
diff --git a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt
index 0c60030313..cb55d35bd0 100644
--- a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt
+++ b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt
@@ -65,5 +65,11 @@ endif()
     {%- endfor -%}
 {%- endfor %}
 
+{%- if libjade_implementation is defined %}
+##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_START
+
+##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_END
+{%- endif %}
+
 set({{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} PARENT_SCOPE)
 
diff --git a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
index 846c64a8ae..e97653d775 100644
--- a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
@@ -2,7 +2,7 @@
 {%- if common_deps is defined %}
     {%- for common_dep in common_deps %}
 
-if({% for used_by in common_deps_usedby[common_dep['name']] -%}OQS_ENABLE_KEM_LIBJADE_{{ family }}_{{ used_by['scheme_c'] }}{%- if used_by['impl_name'] != default_implementation %}_{{ used_by['impl_name'] }}{% endif -%}{%- if not loop.last %} OR {% endif -%}{%- endfor -%})
+if({% for used_by in common_deps_usedby[common_dep['name']] -%}OQS_ENABLE_KEM_{{ family }}_{{ used_by['scheme_c'] }}{%- if used_by['impl_name'] != default_implementation %}_{{ used_by['impl_name'] }}{% endif -%}{%- if not loop.last %} OR {% endif -%}{%- endfor -%})
     add_library({{ family }}_{{ common_dep['name'] }} OBJECT {% for source_file in common_dep['sources_addl']|sort -%}{{ upstream_location }}_{{ common_dep['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
     target_include_directories({{ family }}_{{ common_dep['name'] }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ upstream_location }}_{{ common_dep['name'] }})
         {%- if common_dep['required_flags'] %}
@@ -21,40 +21,40 @@ endif()
     {%- for impl in scheme['metadata']['implementations'] -%}
         {%- if impl['name'] == scheme['default_implementation'] %}
 
-if(OQS_ENABLE_KEM_LIBJADE_{{ family }}_{{ scheme['scheme_c'] }})
-    add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} OBJECT kem_{{ family }}_{{ scheme['scheme'] }}.c {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
+if(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme_c'] }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- endif %})
+    add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} OBJECT kem_{{ family }}_{{ scheme['scheme'] }}.c {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
            {%- if impl['compile_opts'] %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PUBLIC {{ impl['compile_opts'] }})
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PUBLIC {{ impl['compile_opts'] }})
            {%- endif -%}
 
         {%- else %}
 
-if(OQS_ENABLE_KEM_LIBJADE_{{ family }}_{{ scheme['scheme_c'] }}_{{ impl['name'].replace('/', '_') }})
-    add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} OBJECT {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
+if(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme_c'] }}_{{ impl['name'] }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}{%- endif %})
+    add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} OBJECT {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
         {%- endif %}
-    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/include)
-    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
-        {%- if impl['name'].replace('/', '_') != scheme['default_implementation'] and impl['required_flags'] -%}
+    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }})
+    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
+        {%- if impl['name'] != scheme['default_implementation'] and impl['required_flags'] -%}
            {%- set opts %}{% for flag in impl['required_flags'] %}{%- if flag != 'arm_neon' %} -m{%- if flag == 'bmi1' -%} bmi {% elif flag == 'sse4_1' -%} sse4.1 {% elif flag == 'pclmulqdq' -%} pclmul {% else -%}{{ flag }} {% endif %}{% endif -%}{% endfor %}{% endset %}
            {%- if opts|length > 0 %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE {{ opts }})
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE {{ opts }})
            {%- endif -%}
         {%- endif %}
         {%- if impl['compile_opts'] %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PUBLIC {{ impl['compile_opts'] }})
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PUBLIC {{ impl['compile_opts'] }})
         {%- endif %}
-        {%- if family == 'classic_mceliece' and impl['name'].replace('/', '_') == 'avx2' %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE -Wno-language-extension-token -O1)
+        {%- if family == 'classic_mceliece' and impl['name'] == 'avx2' %}
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE -Wno-language-extension-token -O1)
         {%- endif %}
-        {%- if family == 'hqc' and impl['name'].replace('/', '_') == 'avx2' %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE -Wno-missing-braces)
+        {%- if family == 'hqc' and impl['name'] == 'avx2' %}
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE -Wno-missing-braces)
         {%- endif %}
-        {%- if impl['upstream']['name'] == 'pqclean' %}
+        {%- if impl['upstream']['name'].endswith('pqclean') %}
     if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
-        target_compile_definitions({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE old_gas_syntax)
+        target_compile_definitions({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE old_gas_syntax)
     endif()
     	{%- endif %}
-    set(_{{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} $<TARGET_OBJECTS:{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}>)
+    set(_{{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} $<TARGET_OBJECTS:{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}>)
 endif()
     {%- endfor -%}
 {%- endfor %}
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
index a78b30fb5a..4193bce883 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
@@ -115,7 +115,20 @@ extern int PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper
 #endif
     {%- endfor %}
 
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_START
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_END
+{%- endif %}
+
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *public_key, uint8_t *secret_key) {
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
+#if OQS_LIBJADE_BUILD
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_KEYPAIR_START
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_KEYPAIR_END
+#else
+{%- endif %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
 #if defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
@@ -150,6 +163,13 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
 }
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
+#if OQS_LIBJADE_BUILD
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_ENCAPS_START
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_ENCAPS_END
+#else
+{%- endif %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
 #if defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
@@ -184,6 +204,11 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
 }
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
+#if OQS_LIBJADE_BUILD
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_START
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_END
+#else
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
 #if defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade
new file mode 100644
index 0000000000..6f9390aa36
--- /dev/null
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade
@@ -0,0 +1,46 @@
+
+{% for scheme in schemes -%}
+    {%- for impl in scheme['metadata']['implementations'] %}
+
+        {%- if impl['signature_keypair'] %}
+           {%- set cleankeypair = scheme['metadata'].update({'default_keypair_signature': impl['signature_keypair']}) -%}
+        {%- else %}
+           {%- set cleankeypair = scheme['metadata'].update({'default_keypair_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_keypair"}) -%}
+        {%- endif %}
+
+        {%- if impl['signature_enc'] %}
+           {%- set cleanenc = scheme['metadata'].update({'default_enc_signature': impl['signature_enc']}) -%}
+        {%- else %}
+           {%- set cleanenc = scheme['metadata'].update({'default_enc_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_enc"}) -%}
+        {%- endif %}
+
+        {%- if impl['signature_dec'] %}
+           {%- set cleandec = scheme['metadata'].update({'default_dec_signature': impl['signature_dec']}) -%}
+        {%- else %}
+           {%- set cleandec = scheme['metadata'].update({'default_dec_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_dec"}) -%}
+        {%- endif %}
+
+#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
+        {%- if impl['signature_keypair'] %}
+extern int {{ impl['signature_keypair'] }}(uint8_t *pk, uint8_t *sk);
+        {%- else %}
+extern int libjade_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name'].replace('/', '_')|upper }}_crypto_kem_keypair(uint8_t *pk, uint8_t *sk);
+        {%- endif %}
+
+        {%- if impl['signature_enc'] %}
+extern int {{ impl['signature_enc'] }}(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
+        {%- else %}
+extern int libjade_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name'].replace('/', '_')|upper }}_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
+        {%- endif %}
+
+        {%- if impl['signature_dec'] %}
+extern int {{ impl['signature_dec'] }}(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
+        {%- else %}
+extern int libjade_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name'].replace('/', '_')|upper }}_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
+        {%- endif %}
+#endif
+    {%- endfor %}
+
+{% endfor -%}
+
+
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme_decaps.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme_decaps.c.libjade
index 544982b41e..8cd5b3e7fa 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme_decaps.c.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme_decaps.c.libjade
@@ -8,9 +8,9 @@
     {%- endfor %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
-#if defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }})
+    #if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
     {%- else %}
-#elif defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }})
+#elif defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
     {%- endif %}
     {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme_encaps.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme_encaps.c.libjade
index 1f193d49f0..4b2b63e3b6 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme_encaps.c.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme_encaps.c.libjade
@@ -8,9 +8,9 @@
     {%- endfor %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
-#if defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }})
+#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
     {%- else %}
-#elif defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }})
+#elif defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
     {%- endif %}
     {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
index d22b5ed660..6563c954b1 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
@@ -9,9 +9,9 @@
     {%- endfor %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
-#if defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }})
+#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
     {%- else %}
-#elif defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }})
+#elif defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
     {%- endif %}
     {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)

From cca5cd448eb0967ec4df9d23fe9761bf4bcd39a3 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 2 Apr 2024 23:33:30 +0200
Subject: [PATCH 10/82] Fix copy_from_upstream.py

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/copy_from_upstream.py | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index 3dd7650f59..3f26196bbe 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -73,7 +73,16 @@ def generator(destination_file_path, template_filename, delimiter, family, schem
     if scheme_desired != None:
         f['schemes'] = [x for x in f['schemes'] if x == scheme_desired]
     identifier = '{} OQS_COPY_FROM_{}_FRAGMENT_{}'.format(delimiter, 'LIBJADE', os.path.splitext(os.path.basename(template_filename))[0].upper())
-    contents = jinja2.Template(template).render(f)
+    if identifier in contents:
+        identifier_start, identifier_end = identifier + '_START', identifier + '_END'
+        contents = contents.split('\n')
+        libjade_contents = '\n'.join(contents[contents.index(identifier_start) + 1: contents.index(identifier_end)])
+        contents = jinja2.Template(template).render(f)
+        preamble = contents[:contents.find(identifier_start)]
+        postamble = contents[contents.find(identifier_end):]
+        contents = preamble + identifier_start + '\n' + libjade_contents + '\n' + postamble
+    else:
+        contents = jinja2.Template(template).render(f)
     file_put_contents(destination_file_path, contents)
 
 

From 0b4af0b8c8168a8a23aed27b01f39b44a32a378b Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 2 Apr 2024 23:34:13 +0200
Subject: [PATCH 11/82] Fix KEM family templates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../src/kem/family/CMakeLists.txt.libjade     | 32 +++++++++----------
 .../src/kem/family/kem_scheme.c               |  2 ++
 2 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
index e97653d775..f73076e18c 100644
--- a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
@@ -2,7 +2,7 @@
 {%- if common_deps is defined %}
     {%- for common_dep in common_deps %}
 
-if({% for used_by in common_deps_usedby[common_dep['name']] -%}OQS_ENABLE_KEM_{{ family }}_{{ used_by['scheme_c'] }}{%- if used_by['impl_name'] != default_implementation %}_{{ used_by['impl_name'] }}{% endif -%}{%- if not loop.last %} OR {% endif -%}{%- endfor -%})
+if({% for used_by in common_deps_usedby[common_dep['name']] -%}OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ used_by['scheme_c'] }}{%- if used_by['impl_name'] != default_implementation %}_{{ used_by['impl_name'] }}{% endif -%}{%- if not loop.last %} OR {% endif -%}{%- endfor -%})
     add_library({{ family }}_{{ common_dep['name'] }} OBJECT {% for source_file in common_dep['sources_addl']|sort -%}{{ upstream_location }}_{{ common_dep['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
     target_include_directories({{ family }}_{{ common_dep['name'] }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ upstream_location }}_{{ common_dep['name'] }})
         {%- if common_dep['required_flags'] %}
@@ -21,40 +21,40 @@ endif()
     {%- for impl in scheme['metadata']['implementations'] -%}
         {%- if impl['name'] == scheme['default_implementation'] %}
 
-if(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme_c'] }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- endif %})
-    add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} OBJECT kem_{{ family }}_{{ scheme['scheme'] }}.c {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
+if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}_{{ impl['name'].replace('/', '_') }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- endif %})
+    add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} OBJECT kem_{{ family }}_{{ scheme['scheme'] }}.c {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
            {%- if impl['compile_opts'] %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PUBLIC {{ impl['compile_opts'] }})
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PUBLIC {{ impl['compile_opts'] }})
            {%- endif -%}
 
         {%- else %}
 
-if(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme_c'] }}_{{ impl['name'] }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}{%- endif %})
-    add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} OBJECT {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
+if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}_{{ impl['name'].replace('/', '_') }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}{%- endif %})
+    add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} OBJECT {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
         {%- endif %}
-    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }})
-    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
+    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }})
+    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
         {%- if impl['name'] != scheme['default_implementation'] and impl['required_flags'] -%}
            {%- set opts %}{% for flag in impl['required_flags'] %}{%- if flag != 'arm_neon' %} -m{%- if flag == 'bmi1' -%} bmi {% elif flag == 'sse4_1' -%} sse4.1 {% elif flag == 'pclmulqdq' -%} pclmul {% else -%}{{ flag }} {% endif %}{% endif -%}{% endfor %}{% endset %}
            {%- if opts|length > 0 %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE {{ opts }})
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE {{ opts }})
            {%- endif -%}
         {%- endif %}
         {%- if impl['compile_opts'] %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PUBLIC {{ impl['compile_opts'] }})
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PUBLIC {{ impl['compile_opts'] }})
         {%- endif %}
-        {%- if family == 'classic_mceliece' and impl['name'] == 'avx2' %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE -Wno-language-extension-token -O1)
+        {%- if family == 'classic_mceliece' and impl['name'].replace('/', '_') == 'avx2' %}
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE -Wno-language-extension-token -O1)
         {%- endif %}
-        {%- if family == 'hqc' and impl['name'] == 'avx2' %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE -Wno-missing-braces)
+        {%- if family == 'hqc' and impl['name'].replace('/', '_') == 'avx2' %}
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE -Wno-missing-braces)
         {%- endif %}
         {%- if impl['upstream']['name'].endswith('pqclean') %}
     if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
-        target_compile_definitions({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE old_gas_syntax)
+        target_compile_definitions({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE old_gas_syntax)
     endif()
     	{%- endif %}
-    set(_{{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} $<TARGET_OBJECTS:{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}>)
+    set(_{{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} $<TARGET_OBJECTS:{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}>)
 endif()
     {%- endfor -%}
 {%- endfor %}
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
index 4193bce883..bb027ab1e3 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
@@ -204,11 +204,13 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
 }
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
 #if OQS_LIBJADE_BUILD
 ///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_START
 
 ///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_END
 #else
+{%- endif %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
 #if defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}

From e1238f9e0ab62cc5838ee0e87e14429c1c1c7dc2 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 00:11:07 +0200
Subject: [PATCH 12/82] Fix KEM family templates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../copy_from_upstream/src/kem/family/CMakeLists.txt.libjade    | 2 +-
 scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
index f73076e18c..0afa4610a6 100644
--- a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
@@ -21,7 +21,7 @@ endif()
     {%- for impl in scheme['metadata']['implementations'] -%}
         {%- if impl['name'] == scheme['default_implementation'] %}
 
-if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}_{{ impl['name'].replace('/', '_') }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- endif %})
+if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- endif %})
     add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} OBJECT kem_{{ family }}_{{ scheme['scheme'] }}.c {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
            {%- if impl['compile_opts'] %}
     target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PUBLIC {{ impl['compile_opts'] }})
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade
index 6f9390aa36..1d1c0f3109 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade
@@ -20,7 +20,7 @@
            {%- set cleandec = scheme['metadata'].update({'default_dec_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_dec"}) -%}
         {%- endif %}
 
-#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
+#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] != scheme['default_implementation'] %}_{{ impl['name'].replace('/', '_') }}{%- endif %}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
         {%- if impl['signature_keypair'] %}
 extern int {{ impl['signature_keypair'] }}(uint8_t *pk, uint8_t *sk);
         {%- else %}

From 4d6aa1fe0b967819da9d06150d2bcd607db3ab94 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 00:41:47 +0200
Subject: [PATCH 13/82] Update templates for build system files

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../add_enable_by_alg.libjade                 | 60 +++------------
 .../add_enable_by_alg_conditional.libjade     | 73 +++++++++++++++++++
 .../add_alg_enable_defines.libjade            | 34 +++++++++
 3 files changed, 116 insertions(+), 51 deletions(-)
 create mode 100644 scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
 create mode 100644 scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade

diff --git a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
index c54dc66e24..dafb4110c9 100644
--- a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
+++ b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
@@ -1,64 +1,22 @@
 
 if(OQS_LIBJADE_BUILD)
 {% for family in instructions['kems'] %}
-option(OQS_ENABLE_LIBJADE_KEM_{{ family['name']|upper }} "Enable {{ family['name'] }} algorithm family" ON)
+option(OQS_ENABLE_LIBJADE_KEM_{{ family['name']|upper }} "Enable libjade implementation of {{ family['name'] }} algorithm family" ON)
     {%- for scheme in family['schemes'] %}
 cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name']|upper }}" OFF)
-        {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] and impl['supported_platforms'] -%}
-            {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'x86_64' %}
-{% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
-{% endif -%}
-if(OQS_DIST_X86_64_BUILD OR ({% for flag in platform['required_flags'] -%} OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- if not loop.last %} AND {% endif -%}{%- endfor -%}))
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
-endif()
-{% if platform['operating_systems'] %}endif()
-{% endif -%}
-            {%- endfor -%}
-            {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'ARM64_V8' %}
-{% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
-{% endif -%}
-if((OQS_DIST_ARM64_V8_BUILD OR (OQS_USE_ARM_NEON_INSTRUCTIONS{% for flag in platform['required_flags'] -%} {%- if not loop.last or loop.first %} AND {% endif -%}OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- endfor -%})))
-{% if impl['upstream']['name'] == 'pqclean' -%}
-if(((CMAKE_C_COMPILER_ID STREQUAL "GNU") AND (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "9.4.0")) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "9.4.0")) OR ((NOT (CMAKE_C_COMPILER_ID STREQUAL "GNU")) AND (NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))))
-{%- endif %}
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
-{% if impl['upstream']['name'] == 'pqclean' -%}
-else()
-    message(WARNING "  ARM optimizations are not fully supported on this compiler version.")
-endif()
-{%- endif %}
-endif()
-{% if platform['operating_systems'] %}endif()
-{% endif -%}
-            {%- endfor -%}
-        {%- endfor -%}
+{%- if 'alias_scheme' in scheme %}
+cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name']|upper }}" OFF)
+{%- endif -%}
     {%- endfor %}
 {% endfor -%}
 
 {% for family in instructions['sigs'] %}
-
+option(OQS_ENABLE_LIBJADE_SIG_{{ family['name']|upper }} "Enable libjade implementation of {{ family['name'] }} algorithm family" ON)
     {%- for scheme in family['schemes'] %}
-cmake_dependent_option(OQS_ENABLE_SIG_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }} "" ON "OQS_ENABLE_SIG_LIBJADE_{{ family['name']|upper }}" OFF)
-        {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] and impl['supported_platforms'] -%}
-            {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'x86_64' %}
-{% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
-{% endif -%}
-if(OQS_DIST_X86_64_BUILD OR ({% for flag in platform['required_flags'] -%} OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- if not loop.last %} AND {% endif -%}{%- endfor -%}))
-    cmake_dependent_option(OQS_ENABLE_SIG_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_SIG_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
-endif()
-{% if platform['operating_systems'] %}endif()
-{% endif -%}
-            {%- endfor -%}
-            {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'ARM64_V8' %}
-{% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
-{% endif -%}
-if(OQS_DIST_ARM64_V8_BUILD OR (OQS_USE_ARM_NEON_INSTRUCTIONS{% for flag in platform['required_flags'] -%} {%- if not loop.last or loop.first %} AND {% endif -%}OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- endfor -%}))
-    cmake_dependent_option(OQS_ENABLE_SIG_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} "" ON "OQS_ENABLE_SIG_LIBJADE_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
-endif()
-{% if platform['operating_systems'] %}endif()
-{% endif -%}
-            {%- endfor -%}
-        {%- endfor -%}
+cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name']|upper }}" OFF)
+{%- if 'alias_scheme' in scheme %}
+cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name']|upper }}" OFF)
+{%- endif -%}
     {%- endfor %}
 {% endfor -%}
 endif()
diff --git a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
new file mode 100644
index 0000000000..395c7cb148
--- /dev/null
+++ b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
@@ -0,0 +1,73 @@
+
+if(OQS_LIBJADE_BUILD)
+{% for family in instructions['kems'] %}
+    {%- for scheme in family['schemes'] %}
+        {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] and impl['supported_platforms'] -%}
+            {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'x86_64' %}
+{% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
+{% endif -%}
+if(OQS_DIST_X86_64_BUILD OR ({% for flag in platform['required_flags'] -%} OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- if not loop.last %} AND {% endif -%}{%- endfor -%}))
+    cmake_dependent_option(OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+{%- if 'alias_scheme' in scheme %}
+    cmake_dependent_option(OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
+{%- endif %}
+endif()
+{% if platform['operating_systems'] %}endif()
+{% endif -%}
+            {%- endfor -%}
+            {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'ARM64_V8' %}
+{% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
+{% endif -%}
+if((OQS_DIST_ARM64_V8_BUILD OR (OQS_USE_ARM_NEON_INSTRUCTIONS{% for flag in platform['required_flags'] -%} {%- if not loop.last or loop.first %} AND {% endif -%}OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- endfor -%})))
+{% if impl['upstream']['name'].endswith('pqclean') -%}
+if(((CMAKE_C_COMPILER_ID STREQUAL "GNU") AND (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "9.4.0")) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "9.4.0")) OR ((NOT (CMAKE_C_COMPILER_ID STREQUAL "GNU")) AND (NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))))
+{%- endif %}
+    cmake_dependent_option(OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+{%- if 'alias_scheme' in scheme %}
+    cmake_dependent_option(OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
+{%- endif %}
+{% if impl['upstream']['name'].endswith('pqclean') -%}
+else()
+    message(WARNING "  ARM optimizations are not fully supported on this compiler version.")
+endif()
+{%- endif %}
+endif()
+{% if platform['operating_systems'] %}endif()
+{% endif -%}
+            {%- endfor -%}
+        {%- endfor -%}
+    {%- endfor %}
+{% endfor -%}
+
+{% for family in instructions['sigs'] %}
+    {%- for scheme in family['schemes'] %}
+        {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] and impl['supported_platforms'] -%}
+            {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'x86_64' %}
+{% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
+{% endif -%}
+if(OQS_DIST_X86_64_BUILD OR ({% for flag in platform['required_flags'] -%} OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- if not loop.last %} AND {% endif -%}{%- endfor -%}))
+    cmake_dependent_option(OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+{%- if 'alias_scheme' in scheme %}
+    cmake_dependent_option(OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
+{%- endif %}
+endif()
+{% if platform['operating_systems'] %}endif()
+{% endif -%}
+            {%- endfor -%}
+            {%- for platform in impl['supported_platforms'] if platform['architecture'] == 'ARM64_V8' %}
+{% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
+{% endif -%}
+if(OQS_DIST_ARM64_V8_BUILD OR (OQS_USE_ARM_NEON_INSTRUCTIONS{% for flag in platform['required_flags'] -%} {%- if not loop.last or loop.first %} AND {% endif -%}OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- endfor -%}))
+    cmake_dependent_option(OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+{%- if 'alias_scheme' in scheme %}
+    cmake_dependent_option(OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
+{%- endif %}
+endif()
+{% if platform['operating_systems'] %}endif()
+{% endif -%}
+            {%- endfor -%}
+        {%- endfor -%}
+    {%- endfor %}
+{% endfor -%}
+endif()
+
diff --git a/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade b/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade
new file mode 100644
index 0000000000..0e19545a59
--- /dev/null
+++ b/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade
@@ -0,0 +1,34 @@
+{% for family in instructions['kems'] %}
+
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name']|upper }} @OQS_LIBJADE_BUILD_BIN@
+    {%- for scheme in family['schemes'] %}
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }} @OQS_LIBJADE_BUILD_BIN@
+{%- if 'alias_scheme' in scheme %}
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }} @OQS_LIBJADE_BUILD_BIN@
+{%- endif -%}
+        {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] %}
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} @OQS_LIBJADE_BUILD_BIN@
+{%- if 'alias_scheme' in scheme %}
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }} @OQS_LIBJADE_BUILD_BIN@
+{%- endif -%}
+        {%- endfor -%}
+    {%- endfor -%}
+{% endfor -%}
+
+{% for family in instructions['sigs'] %}
+
+#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name']|upper }} @OQS_LIBJADE_BUILD_BIN@
+    {%- for scheme in family['schemes'] %}
+#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }} @OQS_LIBJADE_BUILD_BIN@
+{%- if 'alias_scheme' in scheme %}
+#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }} @OQS_LIBJADE_BUILD_BIN@
+{%- endif -%}
+        {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] %}
+#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} @OQS_LIBJADE_BUILD_BIN@
+{%- if 'alias_scheme' in scheme %}
+#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }} @OQS_LIBJADE_BUILD_BIN@
+{%- endif -%}
+        {%- endfor -%}
+    {%- endfor -%}
+{% endfor %}
+

From 41b4af61bf6eb236341147579cc3c6f455da2a6a Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 00:44:21 +0200
Subject: [PATCH 14/82] Update build system files

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .CMake/alg_support.cmake | 27 +++++++++++++++++++++++++--
 CMakeLists.txt           |  7 +++++++
 src/oqsconfig.h.cmake    |  9 +++++++++
 3 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/.CMake/alg_support.cmake b/.CMake/alg_support.cmake
index 36c5027f52..7c6dbf2ce0 100644
--- a/.CMake/alg_support.cmake
+++ b/.CMake/alg_support.cmake
@@ -168,6 +168,15 @@ cmake_dependent_option(OQS_ENABLE_SIG_sphincs_shake_256f_simple "" ON "OQS_ENABL
 cmake_dependent_option(OQS_ENABLE_SIG_sphincs_shake_256s_simple "" ON "OQS_ENABLE_SIG_SPHINCS" OFF)
 ##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ENABLE_BY_ALG_END
 
+##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_START
+if(OQS_LIBJADE_BUILD)
+
+option(OQS_ENABLE_LIBJADE_KEM_KYBER "Enable libjade implementation of kyber algorithm family" ON)
+cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_512 "" ON "OQS_ENABLE_LIBJADE_KEM_KYBER" OFF)
+cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_768 "" ON "OQS_ENABLE_LIBJADE_KEM_KYBER" OFF)
+endif()
+##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_END
+
 if((OQS_MINIMAL_BUILD STREQUAL "ON"))
    message(FATAL_ERROR "OQS_MINIMAL_BUILD option ${OQS_MINIMAL_BUILD} no longer supported")
 endif()
@@ -497,9 +506,23 @@ endif()
 
 ##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ENABLE_BY_ALG_CONDITIONAL_END
 
-##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_START
+##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_CONDITIONAL_START
+if(OQS_LIBJADE_BUILD)
 
-##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_END
+if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
+if(OQS_DIST_X86_64_BUILD OR (OQS_USE_AVX2_INSTRUCTIONS AND OQS_USE_BMI2_INSTRUCTIONS AND OQS_USE_POPCNT_INSTRUCTIONS))
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2 "" ON "OQS_ENABLE_LIBJADE_KEM_kyber_512" OFF)
+endif()
+endif()
+
+if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
+if(OQS_DIST_X86_64_BUILD OR (OQS_USE_AVX2_INSTRUCTIONS AND OQS_USE_BMI2_INSTRUCTIONS AND OQS_USE_POPCNT_INSTRUCTIONS))
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2 "" ON "OQS_ENABLE_LIBJADE_KEM_kyber_768" OFF)
+endif()
+endif()
+
+endif()
+##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_CONDITIONAL_END
 
 # Set XKCP (Keccak) required for Sphincs AVX2 code even if OpenSSL3 SHA3 is used:
 if (${OQS_ENABLE_SIG_SPHINCS} OR NOT ${OQS_USE_SHA3_OPENSSL})
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d0ca5543ed..f74def2575 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -23,12 +23,19 @@ project(liboqs C ASM)
 option(OQS_DIST_BUILD "Build distributable library with optimized code for several CPU microarchitectures. Enables run-time CPU feature detection." ON)
 option(OQS_BUILD_ONLY_LIB "Build only liboqs and do not expose build targets for tests, documentation, and pretty-printing available." OFF)
 set(OQS_MINIMAL_BUILD "" CACHE STRING "Only build specifically listed algorithms.")
+option(OQS_LIBJADE_BUILD "Enable formally verified implementation of supported algorithms from libjade." OFF)
 option(OQS_PERMIT_UNSUPPORTED_ARCHITECTURE "Permit compilation on an an unsupported architecture." OFF)
 option(OQS_STRICT_WARNINGS "Enable all compiler warnings." OFF)
 option(OQS_EMBEDDED_BUILD "Compile liboqs for an Embedded environment without a full standard library." OFF)
 
 set(OQS_OPT_TARGET auto CACHE STRING "The target microarchitecture for optimization.")
 
+if(OQS_LIBJADE_BUILD)
+    set(OQS_LIBJADE_BUILD_BIN 1)
+else()
+    set(OQS_LIBJADE_BUILD_BIN 0)
+endif()
+
 set(CMAKE_C_STANDARD 11)
 set(CMAKE_C_STANDARD_REQUIRED ON)
 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
diff --git a/src/oqsconfig.h.cmake b/src/oqsconfig.h.cmake
index f3b2e7c425..02358b97f5 100644
--- a/src/oqsconfig.h.cmake
+++ b/src/oqsconfig.h.cmake
@@ -190,3 +190,12 @@
 #cmakedefine OQS_ENABLE_SIG_sphincs_shake_256s_simple 1
 #cmakedefine OQS_ENABLE_SIG_sphincs_shake_256s_simple_avx2 1
 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ALG_ENABLE_DEFINES_END
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ALG_ENABLE_DEFINES_START
+
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_KYBER @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512 @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2 @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768 @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2 @OQS_LIBJADE_BUILD_BIN@
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ALG_ENABLE_DEFINES_END

From 0cd7af040c351875b18743e9ddc963780ab16590 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 00:47:13 +0200
Subject: [PATCH 15/82] Fix add_enable_by_alg_conditional.libjade

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../add_enable_by_alg_conditional.libjade        | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
index 395c7cb148..15da56eaf7 100644
--- a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
+++ b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
@@ -7,9 +7,9 @@ if(OQS_LIBJADE_BUILD)
 {% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
 {% endif -%}
 if(OQS_DIST_X86_64_BUILD OR ({% for flag in platform['required_flags'] -%} OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- if not loop.last %} AND {% endif -%}{%- endfor -%}))
-    cmake_dependent_option(OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
 {%- if 'alias_scheme' in scheme %}
-    cmake_dependent_option(OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
 {%- endif %}
 endif()
 {% if platform['operating_systems'] %}endif()
@@ -22,9 +22,9 @@ if((OQS_DIST_ARM64_V8_BUILD OR (OQS_USE_ARM_NEON_INSTRUCTIONS{% for flag in plat
 {% if impl['upstream']['name'].endswith('pqclean') -%}
 if(((CMAKE_C_COMPILER_ID STREQUAL "GNU") AND (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "9.4.0")) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "9.4.0")) OR ((NOT (CMAKE_C_COMPILER_ID STREQUAL "GNU")) AND (NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))))
 {%- endif %}
-    cmake_dependent_option(OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
 {%- if 'alias_scheme' in scheme %}
-    cmake_dependent_option(OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
 {%- endif %}
 {% if impl['upstream']['name'].endswith('pqclean') -%}
 else()
@@ -46,9 +46,9 @@ endif()
 {% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
 {% endif -%}
 if(OQS_DIST_X86_64_BUILD OR ({% for flag in platform['required_flags'] -%} OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- if not loop.last %} AND {% endif -%}{%- endfor -%}))
-    cmake_dependent_option(OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
 {%- if 'alias_scheme' in scheme %}
-    cmake_dependent_option(OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
 {%- endif %}
 endif()
 {% if platform['operating_systems'] %}endif()
@@ -58,9 +58,9 @@ endif()
 {% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
 {% endif -%}
 if(OQS_DIST_ARM64_V8_BUILD OR (OQS_USE_ARM_NEON_INSTRUCTIONS{% for flag in platform['required_flags'] -%} {%- if not loop.last or loop.first %} AND {% endif -%}OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- endfor -%}))
-    cmake_dependent_option(OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
 {%- if 'alias_scheme' in scheme %}
-    cmake_dependent_option(OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
 {%- endif %}
 endif()
 {% if platform['operating_systems'] %}endif()

From d62113d8315094fe8e0db71aba873ff866ad5be9 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 00:48:53 +0200
Subject: [PATCH 16/82] Run copy_from_upstream.py

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 src/kem/kyber/CMakeLists.txt                  |    32 +
 src/kem/kyber/kem_kyber_512.c                 |    31 +
 src/kem/kyber/kem_kyber_768.c                 |    31 +
 .../libjade_kyber512_amd64_avx2/.deps/kem.s.d |     1 +
 .../libjade_kyber512_amd64_avx2/Makefile      |     3 +
 .../kyber/libjade_kyber512_amd64_avx2/api.c   |    20 +
 .../gen_matrix.jinc                           |   658 +
 .../libjade_kyber512_amd64_avx2/include/api.h |    45 +
 .../libjade_kyber512_amd64_avx2/indcpa.jinc   |   217 +
 .../libjade_kyber512_amd64_avx2/kem.jazz      |    66 +
 .../kyber/libjade_kyber512_amd64_avx2/kem.s   | 21455 +++++++++++++
 .../libjade_kyber512_amd64_ref/.deps/kem.s.d  |     1 +
 .../kyber/libjade_kyber512_amd64_ref/Makefile |     2 +
 .../kyber/libjade_kyber512_amd64_ref/api.c    |    20 +
 .../libjade_kyber512_amd64_ref/include/api.h  |    45 +
 .../libjade_kyber512_amd64_ref/indcpa.jinc    |   242 +
 .../kyber/libjade_kyber512_amd64_ref/kem.jazz |    66 +
 .../kyber/libjade_kyber512_amd64_ref/kem.s    | 16332 ++++++++++
 .../libjade_kyber768_amd64_avx2/.deps/kem.s.d |     1 +
 .../libjade_kyber768_amd64_avx2/Makefile      |     3 +
 .../kyber/libjade_kyber768_amd64_avx2/api.c   |    20 +
 .../gen_matrix.jinc                           |   790 +
 .../libjade_kyber768_amd64_avx2/include/api.h |    45 +
 .../libjade_kyber768_amd64_avx2/indcpa.jinc   |   218 +
 .../libjade_kyber768_amd64_avx2/kem.jazz      |    66 +
 .../kyber/libjade_kyber768_amd64_avx2/kem.s   | 26077 ++++++++++++++++
 .../libjade_kyber768_amd64_ref/.deps/kem.s.d  |     1 +
 .../kyber/libjade_kyber768_amd64_ref/Makefile |     4 +
 .../kyber/libjade_kyber768_amd64_ref/api.c    |    20 +
 .../libjade_kyber768_amd64_ref/include/api.h  |    45 +
 .../libjade_kyber768_amd64_ref/indcpa.jinc    |   254 +
 .../kyber/libjade_kyber768_amd64_ref/kem.jazz |    66 +
 .../kyber/libjade_kyber768_amd64_ref/kem.jinc |   150 +
 .../kyber/libjade_kyber768_amd64_ref/kem.s    | 18927 +++++++++++
 .../libjade_kyber768_amd64_ref/params.jinc    |    21 +
 .../libjade_kyber768_amd64_ref/poly.jinc      |   731 +
 .../libjade_kyber768_amd64_ref/polyvec.jinc   |   285 +
 .../libjade_kyber768_amd64_ref/verify.jinc    |    49 +
 38 files changed, 87040 insertions(+)
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/.deps/kem.s.d
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/Makefile
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/api.c
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/gen_matrix.jinc
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/include/api.h
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/indcpa.jinc
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/kem.jazz
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/kem.s
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_ref/.deps/kem.s.d
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_ref/Makefile
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_ref/api.c
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_ref/include/api.h
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_ref/indcpa.jinc
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_ref/kem.jazz
 create mode 100644 src/kem/kyber/libjade_kyber512_amd64_ref/kem.s
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/.deps/kem.s.d
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/Makefile
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/api.c
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/gen_matrix.jinc
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/include/api.h
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/indcpa.jinc
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/kem.jazz
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/kem.s
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/.deps/kem.s.d
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/Makefile
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/api.c
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/include/api.h
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/indcpa.jinc
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/kem.jazz
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/kem.jinc
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/kem.s
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/params.jinc
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/poly.jinc
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/polyvec.jinc
 create mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/verify.jinc

diff --git a/src/kem/kyber/CMakeLists.txt b/src/kem/kyber/CMakeLists.txt
index 948fc0880c..88fcc41ea7 100644
--- a/src/kem/kyber/CMakeLists.txt
+++ b/src/kem/kyber/CMakeLists.txt
@@ -88,5 +88,37 @@ if(OQS_ENABLE_KEM_kyber_1024_aarch64)
     endif()
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_1024_aarch64>)
 endif()
+##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_START
+
+if(OQS_ENABLE_LIBJADE_KEM_kyber_512)
+    add_library(kyber_512_amd64_ref OBJECT kem_kyber_512.c libjade_kyber512_amd64_ref/api.c libjade_kyber512_amd64_ref/kem.s)
+    target_include_directories(kyber_512_amd64_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_amd64_ref)
+    target_include_directories(kyber_512_amd64_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_amd64_ref>)
+endif()
+
+if(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
+    add_library(kyber_512_amd64_avx2 OBJECT libjade_kyber512_amd64_avx2/api.c libjade_kyber512_amd64_avx2/kem.s)
+    target_include_directories(kyber_512_amd64_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_amd64_avx2)
+    target_include_directories(kyber_512_amd64_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    target_compile_options(kyber_512_amd64_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
+    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_amd64_avx2>)
+endif()
+
+if(OQS_ENABLE_LIBJADE_KEM_kyber_768)
+    add_library(kyber_768_amd64_ref OBJECT kem_kyber_768.c libjade_kyber768_amd64_ref/api.c libjade_kyber768_amd64_ref/kem.s)
+    target_include_directories(kyber_768_amd64_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_amd64_ref)
+    target_include_directories(kyber_768_amd64_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_amd64_ref>)
+endif()
+
+if(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
+    add_library(kyber_768_amd64_avx2 OBJECT libjade_kyber768_amd64_avx2/api.c libjade_kyber768_amd64_avx2/kem.s)
+    target_include_directories(kyber_768_amd64_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_amd64_avx2)
+    target_include_directories(kyber_768_amd64_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    target_compile_options(kyber_768_amd64_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
+    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_amd64_avx2>)
+endif()
+##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_END
 
 set(KYBER_OBJS ${_KYBER_OBJS} PARENT_SCOPE)
diff --git a/src/kem/kyber/kem_kyber_512.c b/src/kem/kyber/kem_kyber_512.c
index a226787f65..a0090fb907 100644
--- a/src/kem/kyber/kem_kyber_512.c
+++ b/src/kem/kyber/kem_kyber_512.c
@@ -45,8 +45,29 @@ extern int PQCLEAN_KYBER512_AARCH64_crypto_kem_keypair(uint8_t *pk, uint8_t *sk)
 extern int PQCLEAN_KYBER512_AARCH64_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int PQCLEAN_KYBER512_AARCH64_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_START
+
+
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512)
+extern int libjade_kyber512_amd64_ref_keypair(uint8_t *pk, uint8_t *sk);
+extern int libjade_kyber512_amd64_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
+extern int libjade_kyber512_amd64_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
+#endif
+
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
+extern int libjade_kyber512_amd64_avx2_keypair(uint8_t *pk, uint8_t *sk);
+extern int libjade_kyber512_amd64_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
+extern int libjade_kyber512_amd64_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
+#endif
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_END
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secret_key) {
+#if OQS_LIBJADE_BUILD
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_KEYPAIR_START
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_KEYPAIR_END
+#else
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -73,6 +94,11 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secre
 }
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
+#if OQS_LIBJADE_BUILD
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_ENCAPS_START
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_ENCAPS_END
+#else
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -99,6 +125,11 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared
 }
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
+#if OQS_LIBJADE_BUILD
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_START
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_END
+#else
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
diff --git a/src/kem/kyber/kem_kyber_768.c b/src/kem/kyber/kem_kyber_768.c
index bc21b00380..911340b603 100644
--- a/src/kem/kyber/kem_kyber_768.c
+++ b/src/kem/kyber/kem_kyber_768.c
@@ -45,8 +45,29 @@ extern int PQCLEAN_KYBER768_AARCH64_crypto_kem_keypair(uint8_t *pk, uint8_t *sk)
 extern int PQCLEAN_KYBER768_AARCH64_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int PQCLEAN_KYBER768_AARCH64_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_START
+
+
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768)
+extern int libjade_kyber768_amd64_ref_keypair(uint8_t *pk, uint8_t *sk);
+extern int libjade_kyber768_amd64_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
+extern int libjade_kyber768_amd64_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
+#endif
+
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
+extern int libjade_kyber768_amd64_avx2_keypair(uint8_t *pk, uint8_t *sk);
+extern int libjade_kyber768_amd64_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
+extern int libjade_kyber768_amd64_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
+#endif
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_END
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secret_key) {
+#if OQS_LIBJADE_BUILD
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_KEYPAIR_START
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_KEYPAIR_END
+#else
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -73,6 +94,11 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secre
 }
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
+#if OQS_LIBJADE_BUILD
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_ENCAPS_START
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_ENCAPS_END
+#else
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -99,6 +125,11 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared
 }
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
+#if OQS_LIBJADE_BUILD
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_START
+
+///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_END
+#else
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/.deps/kem.s.d b/src/kem/kyber/libjade_kyber512_amd64_avx2/.deps/kem.s.d
new file mode 100644
index 0000000000..e8c06cc3b9
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_avx2/.deps/kem.s.d
@@ -0,0 +1 @@
+kem.s: kem.jazz /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber512/amd64/avx2/indcpa.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber512/common/params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/poly.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_DIRTY.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/avx2/keccak1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/avx2/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_4x_DIRTY.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/avx2/keccakf1600_4x.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600_globals.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_xof/shake256/amd64/avx2/shake256_4x.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/shuffle.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/consts.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/reduce.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/polyvec.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber512/amd64/avx2/gen_matrix.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_xof/shake128/amd64/avx2/shake128_4x.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/tofromstack.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/verify.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/kem.jinc
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/Makefile b/src/kem/kyber/libjade_kyber512_amd64_avx2/Makefile
new file mode 100644
index 0000000000..eec5ee0e38
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_avx2/Makefile
@@ -0,0 +1,3 @@
+SRCS := kem.jazz
+include ../../../../../Makefile.common
+
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/api.c b/src/kem/kyber/libjade_kyber512_amd64_avx2/api.c
new file mode 100644
index 0000000000..e5620ccfac
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_avx2/api.c
@@ -0,0 +1,20 @@
+#include <oqs/rand.h>
+#include "libjade_randombytes.h"
+#include "api.h"
+
+int libjade_kyber512_amd64_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
+    uint8_t keypair_coins[JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES];
+    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2);
+    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2);
+    return jade_kem_kyber_kyber512_amd64_avx2_keypair_derand(public_key, secret_key, keypair_coins);
+}
+
+int libjade_kyber512_amd64_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
+    uint8_t enc_coins[JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES];
+    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES);
+    return jade_kem_kyber_kyber512_amd64_avx2_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
+}
+
+int libjade_kyber512_amd64_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
+    return jade_kem_kyber_kyber512_amd64_avx2_dec( shared_secret, ciphertext, secret_key);
+}
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/gen_matrix.jinc b/src/kem/kyber/libjade_kyber512_amd64_avx2/gen_matrix.jinc
new file mode 100644
index 0000000000..98ed9b7ab1
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_avx2/gen_matrix.jinc
@@ -0,0 +1,658 @@
+from Jade require "common/keccak/common/fips202_DIRTY.jinc"
+from Jade require "common/keccak/common/fips202_4x_DIRTY.jinc"
+from Jade require "crypto_xof/shake128/amd64/avx2/shake128_4x.jinc"
+
+param int GENMATRIX_NBLOCKS = ((12*KYBER_N/8*4096/KYBER_Q + SHAKE128_RATE)/SHAKE128_RATE);
+param int REJ_UNIFORM_AVX_BUFLEN = GENMATRIX_NBLOCKS * SHAKE128_RATE;
+
+u8[2048] ru_idx = {-1, -1, -1, -1, -1, -1, -1, -1,
+                0, -1, -1, -1, -1, -1, -1, -1,
+                2, -1, -1, -1, -1, -1, -1, -1,
+                0,  2, -1, -1, -1, -1, -1, -1,
+                4, -1, -1, -1, -1, -1, -1, -1,
+                0,  4, -1, -1, -1, -1, -1, -1,
+                2,  4, -1, -1, -1, -1, -1, -1,
+                0,  2,  4, -1, -1, -1, -1, -1,
+                6, -1, -1, -1, -1, -1, -1, -1,
+                0,  6, -1, -1, -1, -1, -1, -1,
+                2,  6, -1, -1, -1, -1, -1, -1,
+                0,  2,  6, -1, -1, -1, -1, -1,
+                4,  6, -1, -1, -1, -1, -1, -1,
+                0,  4,  6, -1, -1, -1, -1, -1,
+                2,  4,  6, -1, -1, -1, -1, -1,
+                0,  2,  4,  6, -1, -1, -1, -1,
+                8, -1, -1, -1, -1, -1, -1, -1,
+                0,  8, -1, -1, -1, -1, -1, -1,
+                2,  8, -1, -1, -1, -1, -1, -1,
+                0,  2,  8, -1, -1, -1, -1, -1,
+                4,  8, -1, -1, -1, -1, -1, -1,
+                0,  4,  8, -1, -1, -1, -1, -1,
+                2,  4,  8, -1, -1, -1, -1, -1,
+                0,  2,  4,  8, -1, -1, -1, -1,
+                6,  8, -1, -1, -1, -1, -1, -1,
+                0,  6,  8, -1, -1, -1, -1, -1,
+                2,  6,  8, -1, -1, -1, -1, -1,
+                0,  2,  6,  8, -1, -1, -1, -1,
+                4,  6,  8, -1, -1, -1, -1, -1,
+                0,  4,  6,  8, -1, -1, -1, -1,
+                2,  4,  6,  8, -1, -1, -1, -1,
+                0,  2,  4,  6,  8, -1, -1, -1,
+                10, -1, -1, -1, -1, -1, -1, -1,
+                0, 10, -1, -1, -1, -1, -1, -1,
+                2, 10, -1, -1, -1, -1, -1, -1,
+                0,  2, 10, -1, -1, -1, -1, -1,
+                4, 10, -1, -1, -1, -1, -1, -1,
+                0,  4, 10, -1, -1, -1, -1, -1,
+                2,  4, 10, -1, -1, -1, -1, -1,
+                0,  2,  4, 10, -1, -1, -1, -1,
+                6, 10, -1, -1, -1, -1, -1, -1,
+                0,  6, 10, -1, -1, -1, -1, -1,
+                2,  6, 10, -1, -1, -1, -1, -1,
+                0,  2,  6, 10, -1, -1, -1, -1,
+                4,  6, 10, -1, -1, -1, -1, -1,
+                0,  4,  6, 10, -1, -1, -1, -1,
+                2,  4,  6, 10, -1, -1, -1, -1,
+                0,  2,  4,  6, 10, -1, -1, -1,
+                8, 10, -1, -1, -1, -1, -1, -1,
+                0,  8, 10, -1, -1, -1, -1, -1,
+                2,  8, 10, -1, -1, -1, -1, -1,
+                0,  2,  8, 10, -1, -1, -1, -1,
+                4,  8, 10, -1, -1, -1, -1, -1,
+                0,  4,  8, 10, -1, -1, -1, -1,
+                2,  4,  8, 10, -1, -1, -1, -1,
+                0,  2,  4,  8, 10, -1, -1, -1,
+                6,  8, 10, -1, -1, -1, -1, -1,
+                0,  6,  8, 10, -1, -1, -1, -1,
+                2,  6,  8, 10, -1, -1, -1, -1,
+                0,  2,  6,  8, 10, -1, -1, -1,
+                4,  6,  8, 10, -1, -1, -1, -1,
+                0,  4,  6,  8, 10, -1, -1, -1,
+                2,  4,  6,  8, 10, -1, -1, -1,
+                0,  2,  4,  6,  8, 10, -1, -1,
+                12, -1, -1, -1, -1, -1, -1, -1,
+                0, 12, -1, -1, -1, -1, -1, -1,
+                2, 12, -1, -1, -1, -1, -1, -1,
+                0,  2, 12, -1, -1, -1, -1, -1,
+                4, 12, -1, -1, -1, -1, -1, -1,
+                0,  4, 12, -1, -1, -1, -1, -1,
+                2,  4, 12, -1, -1, -1, -1, -1,
+                0,  2,  4, 12, -1, -1, -1, -1,
+                6, 12, -1, -1, -1, -1, -1, -1,
+                0,  6, 12, -1, -1, -1, -1, -1,
+                2,  6, 12, -1, -1, -1, -1, -1,
+                0,  2,  6, 12, -1, -1, -1, -1,
+                4,  6, 12, -1, -1, -1, -1, -1,
+                0,  4,  6, 12, -1, -1, -1, -1,
+                2,  4,  6, 12, -1, -1, -1, -1,
+                0,  2,  4,  6, 12, -1, -1, -1,
+                8, 12, -1, -1, -1, -1, -1, -1,
+                0,  8, 12, -1, -1, -1, -1, -1,
+                2,  8, 12, -1, -1, -1, -1, -1,
+                0,  2,  8, 12, -1, -1, -1, -1,
+                4,  8, 12, -1, -1, -1, -1, -1,
+                0,  4,  8, 12, -1, -1, -1, -1,
+                2,  4,  8, 12, -1, -1, -1, -1,
+                0,  2,  4,  8, 12, -1, -1, -1,
+                6,  8, 12, -1, -1, -1, -1, -1,
+                0,  6,  8, 12, -1, -1, -1, -1,
+                2,  6,  8, 12, -1, -1, -1, -1,
+                0,  2,  6,  8, 12, -1, -1, -1,
+                4,  6,  8, 12, -1, -1, -1, -1,
+                0,  4,  6,  8, 12, -1, -1, -1,
+                2,  4,  6,  8, 12, -1, -1, -1,
+                0,  2,  4,  6,  8, 12, -1, -1,
+                10, 12, -1, -1, -1, -1, -1, -1,
+                0, 10, 12, -1, -1, -1, -1, -1,
+                2, 10, 12, -1, -1, -1, -1, -1,
+                0,  2, 10, 12, -1, -1, -1, -1,
+                4, 10, 12, -1, -1, -1, -1, -1,
+                0,  4, 10, 12, -1, -1, -1, -1,
+                2,  4, 10, 12, -1, -1, -1, -1,
+                0,  2,  4, 10, 12, -1, -1, -1,
+                6, 10, 12, -1, -1, -1, -1, -1,
+                0,  6, 10, 12, -1, -1, -1, -1,
+                2,  6, 10, 12, -1, -1, -1, -1,
+                0,  2,  6, 10, 12, -1, -1, -1,
+                4,  6, 10, 12, -1, -1, -1, -1,
+                0,  4,  6, 10, 12, -1, -1, -1,
+                2,  4,  6, 10, 12, -1, -1, -1,
+                0,  2,  4,  6, 10, 12, -1, -1,
+                8, 10, 12, -1, -1, -1, -1, -1,
+                0,  8, 10, 12, -1, -1, -1, -1,
+                2,  8, 10, 12, -1, -1, -1, -1,
+                0,  2,  8, 10, 12, -1, -1, -1,
+                4,  8, 10, 12, -1, -1, -1, -1,
+                0,  4,  8, 10, 12, -1, -1, -1,
+                2,  4,  8, 10, 12, -1, -1, -1,
+                0,  2,  4,  8, 10, 12, -1, -1,
+                6,  8, 10, 12, -1, -1, -1, -1,
+                0,  6,  8, 10, 12, -1, -1, -1,
+                2,  6,  8, 10, 12, -1, -1, -1,
+                0,  2,  6,  8, 10, 12, -1, -1,
+                4,  6,  8, 10, 12, -1, -1, -1,
+                0,  4,  6,  8, 10, 12, -1, -1,
+                2,  4,  6,  8, 10, 12, -1, -1,
+                0,  2,  4,  6,  8, 10, 12, -1,
+                14, -1, -1, -1, -1, -1, -1, -1,
+                0, 14, -1, -1, -1, -1, -1, -1,
+                2, 14, -1, -1, -1, -1, -1, -1,
+                0,  2, 14, -1, -1, -1, -1, -1,
+                4, 14, -1, -1, -1, -1, -1, -1,
+                0,  4, 14, -1, -1, -1, -1, -1,
+                2,  4, 14, -1, -1, -1, -1, -1,
+                0,  2,  4, 14, -1, -1, -1, -1,
+                6, 14, -1, -1, -1, -1, -1, -1,
+                0,  6, 14, -1, -1, -1, -1, -1,
+                2,  6, 14, -1, -1, -1, -1, -1,
+                0,  2,  6, 14, -1, -1, -1, -1,
+                4,  6, 14, -1, -1, -1, -1, -1,
+                0,  4,  6, 14, -1, -1, -1, -1,
+                2,  4,  6, 14, -1, -1, -1, -1,
+                0,  2,  4,  6, 14, -1, -1, -1,
+                8, 14, -1, -1, -1, -1, -1, -1,
+                0,  8, 14, -1, -1, -1, -1, -1,
+                2,  8, 14, -1, -1, -1, -1, -1,
+                0,  2,  8, 14, -1, -1, -1, -1,
+                4,  8, 14, -1, -1, -1, -1, -1,
+                0,  4,  8, 14, -1, -1, -1, -1,
+                2,  4,  8, 14, -1, -1, -1, -1,
+                0,  2,  4,  8, 14, -1, -1, -1,
+                6,  8, 14, -1, -1, -1, -1, -1,
+                0,  6,  8, 14, -1, -1, -1, -1,
+                2,  6,  8, 14, -1, -1, -1, -1,
+                0,  2,  6,  8, 14, -1, -1, -1,
+                4,  6,  8, 14, -1, -1, -1, -1,
+                0,  4,  6,  8, 14, -1, -1, -1,
+                2,  4,  6,  8, 14, -1, -1, -1,
+                0,  2,  4,  6,  8, 14, -1, -1,
+                10, 14, -1, -1, -1, -1, -1, -1,
+                0, 10, 14, -1, -1, -1, -1, -1,
+                2, 10, 14, -1, -1, -1, -1, -1,
+                0,  2, 10, 14, -1, -1, -1, -1,
+                4, 10, 14, -1, -1, -1, -1, -1,
+                0,  4, 10, 14, -1, -1, -1, -1,
+                2,  4, 10, 14, -1, -1, -1, -1,
+                0,  2,  4, 10, 14, -1, -1, -1,
+                6, 10, 14, -1, -1, -1, -1, -1,
+                0,  6, 10, 14, -1, -1, -1, -1,
+                2,  6, 10, 14, -1, -1, -1, -1,
+                0,  2,  6, 10, 14, -1, -1, -1,
+                4,  6, 10, 14, -1, -1, -1, -1,
+                0,  4,  6, 10, 14, -1, -1, -1,
+                2,  4,  6, 10, 14, -1, -1, -1,
+                0,  2,  4,  6, 10, 14, -1, -1,
+                8, 10, 14, -1, -1, -1, -1, -1,
+                0,  8, 10, 14, -1, -1, -1, -1,
+                2,  8, 10, 14, -1, -1, -1, -1,
+                0,  2,  8, 10, 14, -1, -1, -1,
+                4,  8, 10, 14, -1, -1, -1, -1,
+                0,  4,  8, 10, 14, -1, -1, -1,
+                2,  4,  8, 10, 14, -1, -1, -1,
+                0,  2,  4,  8, 10, 14, -1, -1,
+                6,  8, 10, 14, -1, -1, -1, -1,
+                0,  6,  8, 10, 14, -1, -1, -1,
+                2,  6,  8, 10, 14, -1, -1, -1,
+                0,  2,  6,  8, 10, 14, -1, -1,
+                4,  6,  8, 10, 14, -1, -1, -1,
+                0,  4,  6,  8, 10, 14, -1, -1,
+                2,  4,  6,  8, 10, 14, -1, -1,
+                0,  2,  4,  6,  8, 10, 14, -1,
+                12, 14, -1, -1, -1, -1, -1, -1,
+                0, 12, 14, -1, -1, -1, -1, -1,
+                2, 12, 14, -1, -1, -1, -1, -1,
+                0,  2, 12, 14, -1, -1, -1, -1,
+                4, 12, 14, -1, -1, -1, -1, -1,
+                0,  4, 12, 14, -1, -1, -1, -1,
+                2,  4, 12, 14, -1, -1, -1, -1,
+                0,  2,  4, 12, 14, -1, -1, -1,
+                6, 12, 14, -1, -1, -1, -1, -1,
+                0,  6, 12, 14, -1, -1, -1, -1,
+                2,  6, 12, 14, -1, -1, -1, -1,
+                0,  2,  6, 12, 14, -1, -1, -1,
+                4,  6, 12, 14, -1, -1, -1, -1,
+                0,  4,  6, 12, 14, -1, -1, -1,
+                2,  4,  6, 12, 14, -1, -1, -1,
+                0,  2,  4,  6, 12, 14, -1, -1,
+                8, 12, 14, -1, -1, -1, -1, -1,
+                0,  8, 12, 14, -1, -1, -1, -1,
+                2,  8, 12, 14, -1, -1, -1, -1,
+                0,  2,  8, 12, 14, -1, -1, -1,
+                4,  8, 12, 14, -1, -1, -1, -1,
+                0,  4,  8, 12, 14, -1, -1, -1,
+                2,  4,  8, 12, 14, -1, -1, -1,
+                0,  2,  4,  8, 12, 14, -1, -1,
+                6,  8, 12, 14, -1, -1, -1, -1,
+                0,  6,  8, 12, 14, -1, -1, -1,
+                2,  6,  8, 12, 14, -1, -1, -1,
+                0,  2,  6,  8, 12, 14, -1, -1,
+                4,  6,  8, 12, 14, -1, -1, -1,
+                0,  4,  6,  8, 12, 14, -1, -1,
+                2,  4,  6,  8, 12, 14, -1, -1,
+                0,  2,  4,  6,  8, 12, 14, -1,
+                10, 12, 14, -1, -1, -1, -1, -1,
+                0, 10, 12, 14, -1, -1, -1, -1,
+                2, 10, 12, 14, -1, -1, -1, -1,
+                0,  2, 10, 12, 14, -1, -1, -1,
+                4, 10, 12, 14, -1, -1, -1, -1,
+                0,  4, 10, 12, 14, -1, -1, -1,
+                2,  4, 10, 12, 14, -1, -1, -1,
+                0,  2,  4, 10, 12, 14, -1, -1,
+                6, 10, 12, 14, -1, -1, -1, -1,
+                0,  6, 10, 12, 14, -1, -1, -1,
+                2,  6, 10, 12, 14, -1, -1, -1,
+                0,  2,  6, 10, 12, 14, -1, -1,
+                4,  6, 10, 12, 14, -1, -1, -1,
+                0,  4,  6, 10, 12, 14, -1, -1,
+                2,  4,  6, 10, 12, 14, -1, -1,
+                0,  2,  4,  6, 10, 12, 14, -1,
+                8, 10, 12, 14, -1, -1, -1, -1,
+                0,  8, 10, 12, 14, -1, -1, -1,
+                2,  8, 10, 12, 14, -1, -1, -1,
+                0,  2,  8, 10, 12, 14, -1, -1,
+                4,  8, 10, 12, 14, -1, -1, -1,
+                0,  4,  8, 10, 12, 14, -1, -1,
+                2,  4,  8, 10, 12, 14, -1, -1,
+                0,  2,  4,  8, 10, 12, 14, -1,
+                6,  8, 10, 12, 14, -1, -1, -1,
+                0,  6,  8, 10, 12, 14, -1, -1,
+                2,  6,  8, 10, 12, 14, -1, -1,
+                0,  2,  6,  8, 10, 12, 14, -1,
+                4,  6,  8, 10, 12, 14, -1, -1,
+                0,  4,  6,  8, 10, 12, 14, -1,
+                2,  4,  6,  8, 10, 12, 14, -1,
+                0,  2,  4,  6,  8, 10, 12, 14};
+
+inline
+fn __shake128_squeezenblocks4x(reg ptr u256[25] state, reg ptr u8[REJ_UNIFORM_AVX_BUFLEN] h0 h1 h2 h3)
+  -> reg ptr u256[25], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN]
+{
+  inline int i;
+
+  for i = 0 to GENMATRIX_NBLOCKS
+  {
+    state, h0[i*SHAKE128_RATE:SHAKE128_RATE], h1[i*SHAKE128_RATE:SHAKE128_RATE], h2[i*SHAKE128_RATE:SHAKE128_RATE], h3[i*SHAKE128_RATE:SHAKE128_RATE] = __shake128_squeezeblock4x(state, h0[i*SHAKE128_RATE:SHAKE128_RATE], h1[i*SHAKE128_RATE:SHAKE128_RATE], h2[i*SHAKE128_RATE:SHAKE128_RATE], h3[i*SHAKE128_RATE:SHAKE128_RATE]);
+  }
+
+  return state, h0, h1, h2, h3;
+}
+
+inline
+fn __rej_uniform(reg ptr u16[KYBER_N] rp, reg u64 offset, reg ptr u8[SHAKE128_RATE] buf, inline int buflen) ->  reg u64, stack u16[KYBER_N]
+{
+  reg u16 val0 val1;
+  reg u16 t;
+  reg u64 pos ctr;
+  reg u8 fl1 fl2;
+  reg bool cf zf b;
+
+  ctr = offset;
+  pos = 0;
+
+  _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 1);
+  fl1 = #SETcc(cf || zf); //SETBE
+
+  _, cf, _, _, zf = #CMP_64(pos, buflen - 3);
+  fl2 = #SETcc(cf || zf);  //SETBE
+
+  _, _, _, _, b = #TEST_8(fl1, fl2);
+
+  while(!b)
+  {
+    val0 = (16u)buf[(int)pos];
+    pos += 1;
+
+    t   = (16u)buf[(int)pos];
+    val1 = t;
+    val1 >>= 4;
+
+    t &= 0x0F;
+    t <<= 8;
+    val0 |= t;
+    pos += 1;
+
+    t   = (16u)buf[(int)pos];
+    t <<= 4;
+    val1 |= t;
+    pos += 1;
+
+    if(val0 < KYBER_Q)
+    {
+      rp[(int)ctr] = val0;
+      ctr += 1;
+    }
+
+    if(ctr < KYBER_N)
+    {
+      if(val1 < KYBER_Q)
+      {
+        rp[(int)ctr] = val1;
+        ctr += 1;
+      }
+    }
+
+    _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 1);
+    fl1 = #SETcc(cf || zf); //SETBE
+
+    _, cf, _, _, zf = #CMP_64(pos, buflen - 3);
+    fl2 = #SETcc(cf || zf);  //SETBE
+
+    _, _, _, _, b = #TEST_8(fl1, fl2);
+  }
+
+  return ctr, rp;
+}
+
+u8 ru_ones_s = 1;
+u16 ru_mask_s = 0x0FFF;
+u8[32] ru_idx8_s = {0, 1, 1, 2, 3, 4, 4, 5,
+                 6, 7, 7, 8, 9, 10, 10, 11,
+                 4, 5, 5, 6, 7, 8, 8, 9,
+                 10, 11, 11, 12, 13, 14, 14, 15};
+
+fn _rej_uniform_avx(reg ptr u16[KYBER_N] rp, reg ptr u8[REJ_UNIFORM_AVX_BUFLEN] buf) -> reg u64, reg ptr u16[KYBER_N]
+{
+  reg u256 f0 f1 g0 g1 g2 g3;
+  reg u256 bound ones mask idx8;
+  reg u128 f t l h;
+  reg u64 pos ctr t64 t64_1 t64_2 t64_3;
+  reg u64 good;
+  reg u16 val0 val1 t16;
+  reg ptr u8[2048] idxp;
+  reg u8 fl1 fl2;
+  reg bool cf zf b;
+
+  idxp = ru_idx;
+
+  bound = jqx16[u256 0];
+  ctr = 0;
+  pos = 0;
+  ones = #VPBROADCAST_32u8(ru_ones_s);
+  mask = #VPBROADCAST_16u16(ru_mask_s);
+  idx8 = ru_idx8_s[u256 0];
+
+  _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 32);
+  fl1 = #SETcc(cf || zf);
+
+  _, cf, _, _, zf = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 56);
+  fl2 = #SETcc(cf || zf);
+
+   _, _, _, _, b = #TEST_8(fl1, fl2);
+
+  while(!b)
+  {
+    f0 = #VPERMQ(buf.[u256 (int)pos], 0x94);
+    f1 = #VPERMQ(buf.[u256 24 + (int)pos], 0x94);
+    f0 = #VPSHUFB_256(f0, idx8);
+    f1 = #VPSHUFB_256(f1, idx8);
+    g0 = #VPSRL_16u16(f0, 4);
+    g1 = #VPSRL_16u16(f1, 4);
+    f0 = #VPBLEND_16u16(f0, g0, 0xAA);
+    f1 = #VPBLEND_16u16(f1, g1, 0xAA);
+    f0 = #VPAND_256(f0, mask);
+    f1 = #VPAND_256(f1, mask);
+
+    g0 = #VPCMPGT_16u16(bound, f0);
+    g1 = #VPCMPGT_16u16(bound, f1);
+
+    g0 = #VPACKSS_16u16(g0, g1);
+    good = #VPMOVMSKB_u256u64(g0);
+
+    t64 = good;
+    t64 &= 0xFF;
+    g0 = (256u) #VMOV(idxp[u64 (int)t64]);
+
+    t64_1 = good;
+    t64_1 >>= 16;
+    t64_1 &= 0xFF;
+    l = #VMOV(idxp[u64 (int)t64_1]);
+
+    t64_2 = good;
+    t64_2 >>= 8;
+    t64_2 &= 0xFF;
+    g1 = (256u) #VMOV(idxp[u64 (int)t64_2]);
+
+    t64_3 = good;
+    t64_3 >>= 24;
+    t64_3 &= 0xFF;
+    h = #VMOV(idxp[u64 (int)t64_3]);
+
+    g0 = #VINSERTI128(g0, l, 1);
+
+    _, _, _, _, _, t64 = #POPCNT_64(t64);
+    _, _, _, _, _, t64_1 = #POPCNT_64(t64_1);
+    t64 += ctr;
+
+    g1 = #VINSERTI128(g1, h, 1);
+
+    t64_1 += t64;
+    _, _, _, _, _, t64_2 = #POPCNT_64(t64_2);
+    t64_2 += t64_1;
+    _, _, _, _, _, t64_3 = #POPCNT_64(t64_3);
+    t64_3 += t64_2;
+
+    g2 = #VPADD_32u8(g0, ones);
+    g0 = #VPUNPCKL_32u8(g0, g2);
+    g3 = #VPADD_32u8(g1, ones);
+    g1 = #VPUNPCKL_32u8(g1, g3);
+
+    f0 = #VPSHUFB_256(f0, g0);
+    f1 = #VPSHUFB_256(f1, g1);
+
+    rp.[u128 2*(int)ctr] = (128u)f0;
+    rp.[u128 2*(int)t64] = #VEXTRACTI128(f0, 1);
+    rp.[u128 2*(int)t64_1] = (128u)f1;
+    rp.[u128 2*(int)t64_2] = #VEXTRACTI128(f1, 1);
+
+    ctr = t64_3;
+
+    _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 32);
+    fl1 = #SETcc(cf || zf);
+
+    pos += 48;
+    _, cf, _, _, zf = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 56);
+    fl2 = #SETcc(cf || zf);
+
+     _, _, _, _, b = #TEST_8(fl1, fl2);
+  }
+
+  _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 8);
+  fl1 = #SETcc(cf || zf);
+
+  _, cf, _, _, zf = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 16);
+  fl2 = #SETcc(cf || zf);
+
+   _, _, _, _, b = #TEST_8(fl1, fl2);
+
+  t64 = 0x5555;
+  while(!b)
+  {
+    f = buf.[u128 (int)pos];
+    f = #VPSHUFB_128(f, idx8);
+    t = #VPSRL_8u16(f, 4);
+    f = #VPBLEND_8u16(f, t, 0xAA);
+    f = #VPAND_128(f, mask);
+
+    t = #VPCMPGT_8u16(bound, f);
+    good = #VPMOVMSKB_u128u64(t);
+
+    good = #PEXT_64(good, t64);
+    l = #VMOV(idxp[u64 (int)good]);
+    _, _, _, _, _, good =  #POPCNT_64(good);
+
+    h = #VPADD_16u8(l, ones);
+    l = #VPUNPCKL_16u8(l, h);
+    f = #VPSHUFB_128(f, l);
+
+    rp.[u128 2*(int)ctr] = f;
+    ctr += good;
+
+    pos += 12;
+    _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 8);
+    fl1 = #SETcc(cf || zf);
+
+    _, cf, _, _, zf = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 16);
+    fl2 = #SETcc(cf || zf);
+
+     _, _, _, _, b = #TEST_8(fl1, fl2);
+  }
+
+  _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 1);
+  fl1 = #SETcc(cf || zf);
+
+  _, cf, _, _, zf = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 3);
+  fl2 = #SETcc(cf || zf);
+
+   _, _, _, _, b = #TEST_8(fl1, fl2);
+
+  while(!b)
+  {
+    val0 = (16u)buf[(int)pos];
+    pos += 1;
+    t16 = (16u)buf[(int)pos];
+    pos += 1;
+    val1 = t16;
+
+    t16 <<= 8;
+    val0 |= t16;
+    val0 &= 0xFFF;
+
+    val1 >>= 4;
+    t16 = (16u)buf[(int)pos];
+    pos += 1;
+    t16 <<= 4;
+    val1 |= t16;
+
+    if(val0 < KYBER_Q)
+    {
+      rp[(int)ctr] = val0;
+      ctr += 1;
+    }
+    if(val1 < KYBER_Q)
+    {
+      if(ctr < KYBER_N)
+      {
+        rp[(int)ctr] = val1;
+        ctr += 1;
+      }
+    }
+
+    _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 1);
+    fl1 = #SETcc(cf || zf); //SETBE
+
+    _, cf, _, _, zf = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 3);
+    fl2 = #SETcc(cf || zf);  //SETBE
+
+    _, _, _, _, b = #TEST_8(fl1, fl2);
+  }
+
+  return ctr, rp;
+}
+
+inline
+fn __gen_matrix(stack u8[KYBER_SYMBYTES] seed, inline int transposed) -> stack u16[KYBER_K*KYBER_VECN]
+{
+  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf0;
+  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf1;
+  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf2;
+  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf3;
+  stack u256[25] state;
+  stack u16[KYBER_K*KYBER_VECN] rr;
+  reg u256 f;
+  reg u64 ctr0 ctr1 ctr2 ctr3 tmp;
+  reg u8 flg0 flg1 bflg;
+  reg bool cf zf;
+  inline int i, j;
+  
+  f = seed[u256 0];
+  buf0[u256 0] = f;
+  buf1[u256 0] = f;
+  buf2[u256 0] = f;
+  buf3[u256 0] = f;
+
+  if(transposed == 1)
+  {
+    buf0[KYBER_SYMBYTES]   = 0;
+    buf0[KYBER_SYMBYTES+1] = 0;
+    buf1[KYBER_SYMBYTES]   = 0;
+    buf1[KYBER_SYMBYTES+1] = 1;
+    buf2[KYBER_SYMBYTES]   = 1;
+    buf2[KYBER_SYMBYTES+1] = 0;
+    buf3[KYBER_SYMBYTES]   = 1;
+    buf3[KYBER_SYMBYTES+1] = 1;
+  }
+  else
+  {
+    buf0[KYBER_SYMBYTES]   = 0;
+    buf0[KYBER_SYMBYTES+1] = 0;
+    buf1[KYBER_SYMBYTES]   = 1;
+    buf1[KYBER_SYMBYTES+1] = 0;
+    buf2[KYBER_SYMBYTES]   = 0;
+    buf2[KYBER_SYMBYTES+1] = 1;
+    buf3[KYBER_SYMBYTES]   = 1;
+    buf3[KYBER_SYMBYTES+1] = 1;
+  }
+
+  state = _shake128_absorb4x_34(state, buf0[0:34], buf1[0:34], buf2[0:34], buf3[0:34]);
+  state, buf0, buf1, buf2, buf3 = __shake128_squeezenblocks4x(state, buf0, buf1, buf2, buf3);
+
+  tmp, rr[0*KYBER_VECN+0*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[0*KYBER_VECN+0*KYBER_N:KYBER_N], buf0);
+  ctr0 = tmp;
+  tmp, rr[0*KYBER_VECN+1*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[0*KYBER_VECN+1*KYBER_N:KYBER_N], buf1);
+  ctr1 = tmp;
+  tmp, rr[1*KYBER_VECN+0*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[1*KYBER_VECN+0*KYBER_N:KYBER_N], buf2);
+  ctr2 = tmp;
+  ctr3, rr[1*KYBER_VECN+1*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[1*KYBER_VECN+1*KYBER_N:KYBER_N], buf3);
+
+  _, cf, _, _, zf = #CMP_64(ctr0, KYBER_N - 1);
+  flg0 = #SETcc(cf || zf); //SETBE
+
+  _, cf, _, _, zf = #CMP_64(ctr1, KYBER_N - 1);
+  flg1 = #SETcc(cf || zf);
+
+  _, _, _, _, _, bflg = #OR_8(flg0, flg1);
+
+  _, cf, _, _, zf = #CMP_64(ctr2, KYBER_N - 1);
+  flg0 = #SETcc(cf || zf);
+
+  _, cf, _, _, zf = #CMP_64(ctr3, KYBER_N - 1);
+  flg1 = #SETcc(cf || zf);
+
+  _, _, _, _, _, flg0 = #OR_8(flg0, flg1);
+  _, _, _, _, _, bflg = #OR_8(flg0, bflg);
+
+  while(bflg != 0) {
+    state, buf0[0:SHAKE128_RATE], buf1[0:SHAKE128_RATE], buf2[0:SHAKE128_RATE], buf3[0:SHAKE128_RATE] = __shake128_squeezeblock4x(state, buf0[0:SHAKE128_RATE], buf1[0:SHAKE128_RATE], buf2[0:SHAKE128_RATE], buf3[0:SHAKE128_RATE]);
+
+    ctr0, rr[0*KYBER_VECN+0*KYBER_N:KYBER_N] = __rej_uniform(rr[0*KYBER_VECN+0*KYBER_N:KYBER_N], ctr0, buf0[0:SHAKE128_RATE], SHAKE128_RATE);
+    ctr1, rr[0*KYBER_VECN+1*KYBER_N:KYBER_N] = __rej_uniform(rr[0*KYBER_VECN+1*KYBER_N:KYBER_N], ctr1, buf1[0:SHAKE128_RATE], SHAKE128_RATE);
+    ctr2, rr[1*KYBER_VECN+0*KYBER_N:KYBER_N] = __rej_uniform(rr[1*KYBER_VECN+0*KYBER_N:KYBER_N], ctr2, buf2[0:SHAKE128_RATE], SHAKE128_RATE);
+    ctr3, rr[1*KYBER_VECN+1*KYBER_N:KYBER_N] = __rej_uniform(rr[1*KYBER_VECN+1*KYBER_N:KYBER_N], ctr3, buf3[0:SHAKE128_RATE], SHAKE128_RATE);
+
+    _, cf, _, _, zf = #CMP_64(ctr0, KYBER_N - 1);
+    flg0 = #SETcc(cf || zf);
+
+    _, cf, _, _, zf = #CMP_64(ctr1, KYBER_N - 1);
+    flg1 = #SETcc(cf || zf);
+
+    _, _, _, _, _, bflg = #OR_8(flg0, flg1);
+
+    _, cf, _, _, zf = #CMP_64(ctr2, KYBER_N - 1);
+    flg0 = #SETcc(cf || zf);
+
+    _, cf, _, _, zf = #CMP_64(ctr3, KYBER_N - 1);
+    flg1 = #SETcc(cf || zf);
+
+    _, _, _, _, _, flg0 = #OR_8(flg0, flg1);
+    _, _, _, _, _, bflg = #OR_8(flg0, bflg);
+  }
+  for i = 0 to KYBER_K
+  {
+    for j = 0 to KYBER_K
+    {
+      rr[i*KYBER_VECN+j*KYBER_N:KYBER_N] = _nttunpack(rr[i*KYBER_VECN+j*KYBER_N:KYBER_N]);
+    }
+  }
+
+
+  return rr;
+}
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/include/api.h b/src/kem/kyber/libjade_kyber512_amd64_avx2/include/api.h
new file mode 100644
index 0000000000..0914217f40
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_avx2/include/api.h
@@ -0,0 +1,45 @@
+#ifndef JADE_KEM_kyber_kyber512_amd64_avx2_API_H
+#define JADE_KEM_kyber_kyber512_amd64_avx2_API_H
+
+#include <stdint.h>
+
+#define JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES 64
+#define JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES     32
+
+int jade_kem_kyber_kyber512_amd64_avx2_keypair_derand(
+  uint8_t *public_key,
+  uint8_t *secret_key,
+  const uint8_t *coins
+);
+
+int libjade_kyber512_amd64_avx2_keypair(
+  uint8_t *public_key,
+  uint8_t *secret_key
+);
+
+int jade_kem_kyber_kyber512_amd64_avx2_enc_derand(
+  uint8_t *ciphertext,
+  uint8_t *shared_secret,
+  const uint8_t *public_key,
+  const uint8_t *coins
+);
+
+int libjade_kyber512_amd64_avx2_enc(
+  uint8_t *ciphertext,
+  uint8_t *shared_secret,
+  const uint8_t *public_key
+);
+
+int jade_kem_kyber_kyber512_amd64_avx2_dec(
+  uint8_t *shared_secret,
+  const uint8_t *ciphertext,
+  const uint8_t *secret_key
+);
+
+int libjade_kyber512_amd64_avx2_dec(
+  uint8_t *shared_secret,
+  const uint8_t *ciphertext,
+  const uint8_t *secret_key
+);
+
+#endif
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/indcpa.jinc b/src/kem/kyber/libjade_kyber512_amd64_avx2/indcpa.jinc
new file mode 100644
index 0000000000..1f9e08d6e4
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_avx2/indcpa.jinc
@@ -0,0 +1,217 @@
+from Jade require "crypto_kem/kyber/kyber512/common/params.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/avx2/poly.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/avx2/polyvec.jinc"
+require "gen_matrix.jinc"
+
+inline
+fn __indcpa_keypair_derand(reg u64 pkp, reg u64 skp, reg ptr u8[KYBER_SYMBYTES] coins)
+{
+  stack u64 spkp sskp;
+  stack u16[KYBER_K*KYBER_VECN] aa;
+  stack u16[KYBER_VECN] e pkpv skpv;
+  stack u8[64] buf;
+  stack u8[KYBER_SYMBYTES] publicseed noiseseed;
+  reg u64 t64;
+  reg u8 nonce;
+  inline int i;
+
+  spkp = pkp;
+  sskp = skp;
+
+  buf = _sha3_512_32(buf, coins);
+
+  for i=0 to KYBER_SYMBYTES/8
+  {
+    t64 = buf[u64 i];
+    publicseed[u64 i] = t64;
+    t64 = buf[u64 i + KYBER_SYMBYTES/8];
+    noiseseed[u64 i] = t64;
+  }
+
+  aa = __gen_matrix(publicseed, 0);
+
+  nonce = 0;
+  skpv[0:KYBER_N], skpv[KYBER_N:KYBER_N], e[0:KYBER_N], e[KYBER_N:KYBER_N] = _poly_getnoise_eta1_4x(skpv[0:KYBER_N], skpv[KYBER_N:KYBER_N], e[0:KYBER_N], e[KYBER_N:KYBER_N], noiseseed, nonce);
+
+  skpv = __polyvec_ntt(skpv);
+  e    = __polyvec_ntt(e);
+
+  for i=0 to KYBER_K
+  {
+    pkpv[i*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(pkpv[i*KYBER_N:KYBER_N], aa[i*KYBER_VECN:KYBER_VECN], skpv);
+    pkpv[i*KYBER_N:KYBER_N] = _poly_frommont(pkpv[i*KYBER_N:KYBER_N]);
+  }
+
+  pkpv = __polyvec_add2(pkpv, e);
+  pkpv = __polyvec_reduce(pkpv);
+
+  pkp = spkp;
+  skp = sskp;
+
+  __polyvec_tobytes(skp, skpv);
+  __polyvec_tobytes(pkp, pkpv);
+
+  pkp += KYBER_POLYVECBYTES;
+
+  for i=0 to KYBER_SYMBYTES/8
+  {
+    t64 = publicseed[u64 i];
+    (u64)[pkp] = t64;
+    pkp += 8;
+  }
+}
+
+// FIXME: E_EPTR
+inline
+fn __indcpa_enc_0(stack u64 sctp, reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed)
+{
+  stack u16[KYBER_K*KYBER_VECN] aat;
+  stack u16[KYBER_VECN] pkpv sp ep bp;
+  stack u16[KYBER_N] k epp v;
+  stack u8[KYBER_SYMBYTES] publicseed;
+  stack ptr u8[KYBER_SYMBYTES] s_noiseseed;
+  reg ptr u8[KYBER_SYMBYTES] lnoiseseed;
+  reg u64 i ctp t64;
+  reg u8 nonce;
+  inline int w;
+
+  pkpv = __polyvec_frombytes(pkp);
+
+  i = 0;
+  pkp += KYBER_POLYVECBYTES;
+  while (i < KYBER_SYMBYTES/8)
+  {
+    t64 = (u64)[pkp];
+    publicseed[u64 (int)i] = t64;
+    pkp += 8;
+    i += 1;
+  }
+
+  k = _poly_frommsg_1(k, msgp);
+
+  s_noiseseed = noiseseed;
+  aat = __gen_matrix(publicseed, 1);
+  lnoiseseed = s_noiseseed;
+
+  nonce = 0;
+  sp[0:KYBER_N], sp[KYBER_N:KYBER_N], ep[0:KYBER_N], ep[KYBER_N:KYBER_N] = _poly_getnoise_eta1122_4x(sp[0:KYBER_N], sp[KYBER_N:KYBER_N], ep[0:KYBER_N], ep[KYBER_N:KYBER_N], lnoiseseed, nonce);
+
+  nonce = 4;
+  lnoiseseed = s_noiseseed;
+  epp = _poly_getnoise(epp, lnoiseseed, nonce);
+
+  sp = __polyvec_ntt(sp);
+
+  for w=0 to KYBER_K
+  {
+    bp[w*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(bp[w*KYBER_N:KYBER_N], aat[w*KYBER_VECN:KYBER_VECN], sp);
+  }
+
+  v = __polyvec_pointwise_acc(v, pkpv, sp);
+
+  bp = __polyvec_invntt(bp);
+  v = _poly_invntt(v);
+
+  bp = __polyvec_add2(bp, ep);
+  v = _poly_add2(v, epp);
+  v = _poly_add2(v, k);
+  bp = __polyvec_reduce(bp);
+  v  = __poly_reduce(v);
+
+  ctp = sctp;
+  __polyvec_compress(ctp, bp);
+  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
+  v = _poly_compress(ctp, v);
+}
+
+// FIXME: E_EPTR
+inline
+fn __indcpa_enc_1(reg ptr u8[KYBER_INDCPA_BYTES] ctp, reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed) -> reg ptr u8[KYBER_INDCPA_BYTES]
+{
+  stack u16[KYBER_K*KYBER_VECN] aat;
+  stack u16[KYBER_VECN] pkpv sp ep bp;
+  stack u16[KYBER_N] k epp v;
+  stack u8[KYBER_SYMBYTES] publicseed;
+  stack ptr u8[KYBER_SYMBYTES] s_noiseseed;
+  reg ptr u8[KYBER_SYMBYTES] lnoiseseed;
+  stack ptr u8[KYBER_INDCPA_BYTES] sctp;
+  reg u64 i t64;
+  reg u8 nonce;
+  inline int w;
+
+  sctp = ctp;
+
+  pkpv = __polyvec_frombytes(pkp);
+
+  i = 0;
+  pkp += KYBER_POLYVECBYTES;
+  while (i < KYBER_SYMBYTES/8)
+  {
+    t64 = (u64)[pkp];
+    publicseed[u64 (int)i] = t64;
+    pkp += 8;
+    i += 1;
+  }
+
+  k = _poly_frommsg_1(k, msgp);
+
+  s_noiseseed = noiseseed;
+  aat = __gen_matrix(publicseed, 1);
+  lnoiseseed = s_noiseseed;
+
+  nonce = 0;
+  sp[0:KYBER_N], sp[KYBER_N:KYBER_N], ep[0:KYBER_N], ep[KYBER_N:KYBER_N] = _poly_getnoise_eta1122_4x(sp[0:KYBER_N], sp[KYBER_N:KYBER_N], ep[0:KYBER_N], ep[KYBER_N:KYBER_N], lnoiseseed, nonce);
+
+  nonce = 4;
+  lnoiseseed = s_noiseseed;
+  epp = _poly_getnoise(epp, lnoiseseed, nonce);
+
+  sp = __polyvec_ntt(sp);
+    
+  for w=0 to KYBER_K
+  {
+    bp[w*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(bp[w*KYBER_N:KYBER_N], aat[w*KYBER_VECN:KYBER_VECN], sp);
+  }
+ 
+  v = __polyvec_pointwise_acc(v, pkpv, sp);
+
+  bp = __polyvec_invntt(bp);
+  v = _poly_invntt(v);
+
+  bp = __polyvec_add2(bp, ep);
+  v = _poly_add2(v, epp);
+  v = _poly_add2(v, k);
+  bp = __polyvec_reduce(bp);
+  v  = __poly_reduce(v);
+
+  ctp = sctp;
+  ctp[0:KYBER_POLYVECCOMPRESSEDBYTES] = __polyvec_compress_1(ctp[0:KYBER_POLYVECCOMPRESSEDBYTES], bp);
+  ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v = _poly_compress_1(ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v);
+
+  return ctp;
+}
+
+
+inline
+fn __indcpa_dec(reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 ctp, reg u64 skp) -> reg ptr u8[KYBER_INDCPA_MSGBYTES]
+{
+  stack u16[KYBER_N] t v mp;
+  stack u16[KYBER_VECN] bp skpv;
+
+  bp = __polyvec_decompress(ctp);
+  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
+  v = _poly_decompress(v, ctp);
+
+  skpv = __polyvec_frombytes(skp);
+  
+  bp = __polyvec_ntt(bp);
+  t = __polyvec_pointwise_acc(t, skpv, bp);
+  t = _poly_invntt(t);
+
+  mp = _poly_sub(mp, v, t);
+  mp = __poly_reduce(mp);
+  
+  msgp, mp = _poly_tomsg_1(msgp, mp);
+
+  return msgp;
+}
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.jazz b/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.jazz
new file mode 100644
index 0000000000..c4b7a7935b
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.jazz
@@ -0,0 +1,66 @@
+require "indcpa.jinc"
+from Jade require "common/tofromstack.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/avx2/verify.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/kem.jinc"
+
+export fn jade_kem_kyber_kyber512_amd64_avx2_keypair_derand(reg u64 public_key secret_key coins) -> reg u64
+{
+  reg u64 r;
+  stack u8[2*KYBER_SYMBYTES] stack_coins;
+
+  public_key = public_key;
+  secret_key = secret_key;
+  stack_coins = __tostack64u8(stack_coins, coins);
+  __crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber512_amd64_avx2_keypair(reg u64 public_key secret_key) -> reg u64
+{
+  reg u64 r;
+  stack u8[2*KYBER_SYMBYTES] stack_coins;
+
+  public_key = public_key;
+  secret_key = secret_key;
+  stack_coins = #randombytes(stack_coins);
+  __crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber512_amd64_avx2_enc_derand(reg u64 ciphertext shared_secret public_key coins) -> reg u64
+{
+  reg u64 r;
+  stack u8[KYBER_SYMBYTES] stack_coins;
+  
+  ciphertext = ciphertext;
+  shared_secret = shared_secret;
+  public_key = public_key;
+  stack_coins = __tostack32u8(stack_coins, coins);
+  __crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber512_amd64_avx2_enc(reg u64 ciphertext shared_secret public_key) -> reg u64
+{
+  reg u64 r;
+  stack u8[KYBER_SYMBYTES] stack_coins;
+
+  ciphertext = ciphertext;
+  shared_secret = shared_secret;
+  public_key = public_key;
+  stack_coins = #randombytes(stack_coins);
+  __crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber512_amd64_avx2_dec(reg u64 shared_secret ciphertext secret_key) -> reg u64
+{
+  reg u64 r;
+  __crypto_kem_dec_jazz(shared_secret, ciphertext, secret_key);
+  ?{}, r = #set0();
+  return r;
+}
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.s b/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.s
new file mode 100644
index 0000000000..028d549e66
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.s
@@ -0,0 +1,21455 @@
+	.att_syntax
+	.text
+	.p2align	5
+	.globl	_jade_kem_kyber_kyber512_amd64_avx2_dec
+	.globl	jade_kem_kyber_kyber512_amd64_avx2_dec
+	.globl	_jade_kem_kyber_kyber512_amd64_avx2_enc
+	.globl	jade_kem_kyber_kyber512_amd64_avx2_enc
+	.globl	_jade_kem_kyber_kyber512_amd64_avx2_enc_derand
+	.globl	jade_kem_kyber_kyber512_amd64_avx2_enc_derand
+	.globl	_jade_kem_kyber_kyber512_amd64_avx2_keypair
+	.globl	jade_kem_kyber_kyber512_amd64_avx2_keypair
+	.globl	_jade_kem_kyber_kyber512_amd64_avx2_keypair_derand
+	.globl	jade_kem_kyber_kyber512_amd64_avx2_keypair_derand
+_jade_kem_kyber_kyber512_amd64_avx2_dec:
+jade_kem_kyber_kyber512_amd64_avx2_dec:
+	movq	%rsp, %rax
+	leaq	-12064(%rsp), %rsp
+	andq	$-32, %rsp
+	movq	%rax, 12056(%rsp)
+	movq	%r15, 12008(%rsp)
+	movq	%r14, 12016(%rsp)
+	movq	%r13, 12024(%rsp)
+	movq	%r12, 12032(%rsp)
+	movq	%rbp, 12040(%rsp)
+	movq	%rbx, 12048(%rsp)
+	movq	%rdi, 11968(%rsp)
+	movq	%rsi, 11976(%rsp)
+	leaq	32(%rsp), %rax
+	vpbroadcastd	glob_data + 6436(%rip), %ymm0
+	vmovdqu	glob_data + 64(%rip), %ymm1
+	vpbroadcastq	glob_data + 6224(%rip), %ymm2
+	vpbroadcastd	glob_data + 6432(%rip), %ymm3
+	vmovdqu	(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 5824(%rsp)
+	vmovdqu	20(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 5856(%rsp)
+	vmovdqu	40(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 5888(%rsp)
+	vmovdqu	60(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 5920(%rsp)
+	vmovdqu	80(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 5952(%rsp)
+	vmovdqu	100(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 5984(%rsp)
+	vmovdqu	120(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6016(%rsp)
+	vmovdqu	140(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6048(%rsp)
+	vmovdqu	160(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6080(%rsp)
+	vmovdqu	180(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6112(%rsp)
+	vmovdqu	200(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6144(%rsp)
+	vmovdqu	220(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6176(%rsp)
+	vmovdqu	240(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6208(%rsp)
+	vmovdqu	260(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6240(%rsp)
+	vmovdqu	280(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6272(%rsp)
+	vmovdqu	300(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6304(%rsp)
+	vmovdqu	320(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6336(%rsp)
+	vmovdqu	340(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6368(%rsp)
+	vmovdqu	360(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6400(%rsp)
+	vmovdqu	380(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6432(%rsp)
+	vmovdqu	400(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6464(%rsp)
+	vmovdqu	420(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6496(%rsp)
+	vmovdqu	440(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6528(%rsp)
+	vmovdqu	460(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6560(%rsp)
+	vmovdqu	480(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6592(%rsp)
+	vmovdqu	500(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6624(%rsp)
+	vmovdqu	520(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6656(%rsp)
+	vmovdqu	540(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6688(%rsp)
+	vmovdqu	560(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6720(%rsp)
+	vmovdqu	580(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6752(%rsp)
+	vmovdqu	600(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6784(%rsp)
+	vmovdqu	620(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm1
+	vpsllvd	%ymm2, %ymm1, %ymm1
+	vpsrlw	$1, %ymm1, %ymm1
+	vpand	%ymm3, %ymm1, %ymm1
+	vpmulhrsw	%ymm0, %ymm1, %ymm0
+	vmovdqu	%ymm0, 6816(%rsp)
+	addq	$640, %rsi
+	leaq	2208(%rsp), %rcx
+	leaq	-24(%rsp), %rsp
+	call	L_poly_decompress$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$77:
+	leaq	24(%rsp), %rsp
+	movq	%rdx, %rsi
+	leaq	6848(%rsp), %r8
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$76:
+	addq	$384, %rsi
+	leaq	7360(%rsp), %r8
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$75:
+	leaq	5824(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$74:
+	leaq	6336(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$73:
+	leaq	2720(%rsp), %rcx
+	leaq	6848(%rsp), %rsi
+	leaq	5824(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$72:
+	leaq	3232(%rsp), %rcx
+	leaq	7360(%rsp), %rsi
+	leaq	6336(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$71:
+	leaq	2720(%rsp), %rcx
+	leaq	3232(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$70:
+	leaq	2720(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$69:
+	leaq	3232(%rsp), %rcx
+	leaq	2208(%rsp), %rsi
+	leaq	2720(%rsp), %rdi
+	call	L_poly_sub$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$68:
+	leaq	3232(%rsp), %rcx
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vmovdqu	glob_data + 416(%rip), %ymm1
+	vmovdqu	(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rcx)
+	vmovdqu	32(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rcx)
+	vmovdqu	64(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rcx)
+	vmovdqu	96(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rcx)
+	vmovdqu	128(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rcx)
+	vmovdqu	160(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rcx)
+	vmovdqu	192(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rcx)
+	vmovdqu	224(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rcx)
+	vmovdqu	256(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rcx)
+	vmovdqu	288(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rcx)
+	vmovdqu	320(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rcx)
+	vmovdqu	352(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rcx)
+	vmovdqu	384(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rcx)
+	vmovdqu	416(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rcx)
+	vmovdqu	448(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rcx)
+	vmovdqu	480(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rcx)
+	leaq	3232(%rsp), %rcx
+	call	L_poly_tomsg_1$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$67:
+	leaq	32(%rdx), %rax
+	addq	$1536, %rax
+	movq	(%rax), %rcx
+	movq	%rcx, 64(%rsp)
+	movq	8(%rax), %rcx
+	movq	%rcx, 72(%rsp)
+	movq	16(%rax), %rcx
+	movq	%rcx, 80(%rsp)
+	movq	24(%rax), %rax
+	movq	%rax, 88(%rsp)
+	movq	%rdx, 11984(%rsp)
+	leaq	96(%rsp), %rax
+	leaq	32(%rsp), %rcx
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_512_64$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$66:
+	leaq	248(%rsp), %rsp
+	movq	11984(%rsp), %rax
+	addq	$768, %rax
+	leaq	4256(%rsp), %rcx
+	leaq	32(%rsp), %rdi
+	leaq	128(%rsp), %rdx
+	movq	%rcx, 11992(%rsp)
+	movq	%rax, %rsi
+	leaq	5824(%rsp), %r8
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$65:
+	addq	$384, %rsi
+	leaq	6336(%rsp), %r8
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$64:
+	movq	$0, %rcx
+	addq	$768, %rax
+	jmp 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$62
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$63:
+	movq	(%rax), %rsi
+	movq	%rsi, (%rsp,%rcx,8)
+	addq	$8, %rax
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$62:
+	cmpq	$4, %rcx
+	jb  	Ljade_kem_kyber_kyber512_amd64_avx2_dec$63
+	leaq	3232(%rsp), %rax
+	call	L_poly_frommsg_1$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$61:
+	movq	%rdx, 12000(%rsp)
+	vmovdqu	(%rsp), %ymm0
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm0, 672(%rsp)
+	vmovdqu	%ymm0, 1184(%rsp)
+	vmovdqu	%ymm0, 1696(%rsp)
+	movb	$0, 192(%rsp)
+	movb	$0, 193(%rsp)
+	movb	$0, 704(%rsp)
+	movb	$1, 705(%rsp)
+	movb	$1, 1216(%rsp)
+	movb	$0, 1217(%rsp)
+	movb	$1, 1728(%rsp)
+	movb	$1, 1729(%rsp)
+	leaq	5024(%rsp), %rax
+	leaq	160(%rsp), %rcx
+	leaq	672(%rsp), %rdx
+	leaq	1184(%rsp), %rsi
+	leaq	1696(%rsp), %rdi
+	call	L_shake128_absorb4x_34$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$60:
+	leaq	5024(%rsp), %rax
+	leaq	160(%rsp), %rcx
+	leaq	672(%rsp), %r8
+	leaq	1184(%rsp), %r9
+	leaq	1696(%rsp), %r10
+	movq	%rcx, %r11
+	movq	%r8, %rbx
+	movq	%r9, %rbp
+	movq	%r10, %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$59:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	168(%rcx), %r11
+	leaq	168(%r8), %rbx
+	leaq	168(%r9), %rbp
+	leaq	168(%r10), %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$58:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	336(%rcx), %rcx
+	leaq	336(%r8), %r8
+	leaq	336(%r9), %r9
+	leaq	336(%r10), %r10
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$57:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%rcx)
+	vmovhpd	%xmm1, (%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r9)
+	vmovhpd	%xmm0, (%r10)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%rcx)
+	vmovhpd	%xmm1, 8(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r9)
+	vmovhpd	%xmm0, 8(%r10)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%rcx)
+	vmovhpd	%xmm1, 16(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r9)
+	vmovhpd	%xmm0, 16(%r10)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%rcx)
+	vmovhpd	%xmm1, 24(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r9)
+	vmovhpd	%xmm0, 24(%r10)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%rcx)
+	vmovhpd	%xmm1, 32(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r9)
+	vmovhpd	%xmm0, 32(%r10)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%rcx)
+	vmovhpd	%xmm1, 40(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r9)
+	vmovhpd	%xmm0, 40(%r10)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%rcx)
+	vmovhpd	%xmm1, 48(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r9)
+	vmovhpd	%xmm0, 48(%r10)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%rcx)
+	vmovhpd	%xmm1, 56(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r9)
+	vmovhpd	%xmm0, 56(%r10)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%rcx)
+	vmovhpd	%xmm1, 64(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r9)
+	vmovhpd	%xmm0, 64(%r10)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%rcx)
+	vmovhpd	%xmm1, 72(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r9)
+	vmovhpd	%xmm0, 72(%r10)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%rcx)
+	vmovhpd	%xmm1, 80(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r9)
+	vmovhpd	%xmm0, 80(%r10)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%rcx)
+	vmovhpd	%xmm1, 88(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r9)
+	vmovhpd	%xmm0, 88(%r10)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%rcx)
+	vmovhpd	%xmm1, 96(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r9)
+	vmovhpd	%xmm0, 96(%r10)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%rcx)
+	vmovhpd	%xmm1, 104(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r9)
+	vmovhpd	%xmm0, 104(%r10)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%rcx)
+	vmovhpd	%xmm1, 112(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r9)
+	vmovhpd	%xmm0, 112(%r10)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%rcx)
+	vmovhpd	%xmm1, 120(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r9)
+	vmovhpd	%xmm0, 120(%r10)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%rcx)
+	vmovhpd	%xmm1, 128(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r9)
+	vmovhpd	%xmm0, 128(%r10)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%rcx)
+	vmovhpd	%xmm1, 136(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%r9)
+	vmovhpd	%xmm0, 136(%r10)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%rcx)
+	vmovhpd	%xmm1, 144(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%r9)
+	vmovhpd	%xmm0, 144(%r10)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%rcx)
+	vmovhpd	%xmm1, 152(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%r9)
+	vmovhpd	%xmm0, 152(%r10)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%rcx)
+	vmovhpd	%xmm1, 160(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%r9)
+	vmovhpd	%xmm0, 160(%r10)
+	leaq	9920(%rsp), %rbp
+	leaq	160(%rsp), %r12
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$56:
+	movq	%rcx, %r10
+	leaq	10432(%rsp), %rbp
+	leaq	672(%rsp), %r12
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$55:
+	movq	%rcx, %r11
+	leaq	10944(%rsp), %rbp
+	leaq	1184(%rsp), %r12
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$54:
+	movq	%rcx, %rbx
+	leaq	11456(%rsp), %rbp
+	leaq	1696(%rsp), %r12
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$53:
+	cmpq	$255, %r10
+	setbe	%al
+	cmpq	$255, %r11
+	setbe	%dl
+	orb 	%dl, %al
+	cmpq	$255, %rbx
+	setbe	%dl
+	cmpq	$255, %rcx
+	setbe	%sil
+	orb 	%sil, %dl
+	orb 	%al, %dl
+	jmp 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$30
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$31:
+	leaq	5024(%rsp), %rax
+	leaq	160(%rsp), %r8
+	leaq	672(%rsp), %r9
+	leaq	1184(%rsp), %rbp
+	leaq	1696(%rsp), %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$52:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r8)
+	vmovhpd	%xmm1, (%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r8)
+	vmovhpd	%xmm1, 8(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r8)
+	vmovhpd	%xmm1, 16(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r8)
+	vmovhpd	%xmm1, 24(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r8)
+	vmovhpd	%xmm1, 32(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r8)
+	vmovhpd	%xmm1, 40(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r8)
+	vmovhpd	%xmm1, 48(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r8)
+	vmovhpd	%xmm1, 56(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r8)
+	vmovhpd	%xmm1, 64(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r8)
+	vmovhpd	%xmm1, 72(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r8)
+	vmovhpd	%xmm1, 80(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r8)
+	vmovhpd	%xmm1, 88(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r8)
+	vmovhpd	%xmm1, 96(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r8)
+	vmovhpd	%xmm1, 104(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r8)
+	vmovhpd	%xmm1, 112(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r8)
+	vmovhpd	%xmm1, 120(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r8)
+	vmovhpd	%xmm1, 128(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r8)
+	vmovhpd	%xmm1, 136(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r8)
+	vmovhpd	%xmm1, 144(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r8)
+	vmovhpd	%xmm1, 152(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r8)
+	vmovhpd	%xmm1, 160(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	9920(%rsp), %rax
+	leaq	160(%rsp), %rdx
+	movq	$0, %rsi
+	cmpq	$255, %r10
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+	jmp 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$47
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$48:
+	movzbw	(%rdx,%rsi), %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	movw	%r8w, %r9w
+	shrw	$4, %r9w
+	andw	$15, %r8w
+	shlw	$8, %r8w
+	orw 	%r8w, %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	shlw	$4, %r8w
+	orw 	%r8w, %r9w
+	incq	%rsi
+	cmpw	$3329, %di
+	jnb 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$51
+	movw	%di, (%rax,%r10,2)
+	incq	%r10
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$51:
+	cmpq	$256, %r10
+	jnb 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$49
+	cmpw	$3329, %r9w
+	jnb 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$49
+	movw	%r9w, (%rax,%r10,2)
+	incq	%r10
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$50:
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$49:
+	cmpq	$255, %r10
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$47:
+	jne 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$48
+	leaq	10432(%rsp), %rax
+	leaq	672(%rsp), %rdx
+	movq	$0, %rsi
+	cmpq	$255, %r11
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+	jmp 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$42
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$43:
+	movzbw	(%rdx,%rsi), %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	movw	%r8w, %r9w
+	shrw	$4, %r9w
+	andw	$15, %r8w
+	shlw	$8, %r8w
+	orw 	%r8w, %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	shlw	$4, %r8w
+	orw 	%r8w, %r9w
+	incq	%rsi
+	cmpw	$3329, %di
+	jnb 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$46
+	movw	%di, (%rax,%r11,2)
+	incq	%r11
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$46:
+	cmpq	$256, %r11
+	jnb 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$44
+	cmpw	$3329, %r9w
+	jnb 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$44
+	movw	%r9w, (%rax,%r11,2)
+	incq	%r11
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$45:
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$44:
+	cmpq	$255, %r11
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$42:
+	jne 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$43
+	leaq	10944(%rsp), %rax
+	leaq	1184(%rsp), %rdx
+	movq	$0, %rsi
+	cmpq	$255, %rbx
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+	jmp 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$37
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$38:
+	movzbw	(%rdx,%rsi), %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	movw	%r8w, %r9w
+	shrw	$4, %r9w
+	andw	$15, %r8w
+	shlw	$8, %r8w
+	orw 	%r8w, %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	shlw	$4, %r8w
+	orw 	%r8w, %r9w
+	incq	%rsi
+	cmpw	$3329, %di
+	jnb 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$41
+	movw	%di, (%rax,%rbx,2)
+	incq	%rbx
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$41:
+	cmpq	$256, %rbx
+	jnb 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$39
+	cmpw	$3329, %r9w
+	jnb 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$39
+	movw	%r9w, (%rax,%rbx,2)
+	incq	%rbx
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$40:
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$39:
+	cmpq	$255, %rbx
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$37:
+	jne 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$38
+	leaq	11456(%rsp), %rax
+	leaq	1696(%rsp), %rdx
+	movq	$0, %rsi
+	cmpq	$255, %rcx
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+	jmp 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$32
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$33:
+	movzbw	(%rdx,%rsi), %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	movw	%r8w, %r9w
+	shrw	$4, %r9w
+	andw	$15, %r8w
+	shlw	$8, %r8w
+	orw 	%r8w, %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	shlw	$4, %r8w
+	orw 	%r8w, %r9w
+	incq	%rsi
+	cmpw	$3329, %di
+	jnb 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$36
+	movw	%di, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$36:
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$34
+	cmpw	$3329, %r9w
+	jnb 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$34
+	movw	%r9w, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$35:
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$34:
+	cmpq	$255, %rcx
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$32:
+	jne 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$33
+	cmpq	$255, %r10
+	setbe	%al
+	cmpq	$255, %r11
+	setbe	%dl
+	orb 	%dl, %al
+	cmpq	$255, %rbx
+	setbe	%dl
+	cmpq	$255, %rcx
+	setbe	%sil
+	orb 	%sil, %dl
+	orb 	%al, %dl
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$30:
+	cmpb	$0, %dl
+	jne 	Ljade_kem_kyber_kyber512_amd64_avx2_dec$31
+	leaq	9920(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$29:
+	leaq	10432(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$28:
+	leaq	10944(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$27:
+	leaq	11456(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$26:
+	movq	12000(%rsp), %rax
+	movb	$0, %sil
+	leaq	7872(%rsp), %rdx
+	leaq	8384(%rsp), %rcx
+	leaq	6848(%rsp), %r8
+	leaq	7360(%rsp), %r9
+	leaq	-2008(%rsp), %rsp
+	call	L_poly_getnoise_eta1122_4x$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$25:
+	leaq	2008(%rsp), %rsp
+	movb	$4, %al
+	movq	12000(%rsp), %rcx
+	leaq	2720(%rsp), %rdx
+	leaq	-216(%rsp), %rsp
+	call	L_poly_getnoise$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$24:
+	leaq	216(%rsp), %rsp
+	leaq	7872(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$23:
+	leaq	8384(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$22:
+	leaq	8896(%rsp), %rcx
+	leaq	9920(%rsp), %rsi
+	leaq	7872(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$21:
+	leaq	2208(%rsp), %rcx
+	leaq	10432(%rsp), %rsi
+	leaq	8384(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$20:
+	leaq	8896(%rsp), %rcx
+	leaq	2208(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$19:
+	leaq	9408(%rsp), %rcx
+	leaq	10944(%rsp), %rsi
+	leaq	7872(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$18:
+	leaq	2208(%rsp), %rcx
+	leaq	11456(%rsp), %rsi
+	leaq	8384(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$17:
+	leaq	9408(%rsp), %rcx
+	leaq	2208(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$16:
+	leaq	2208(%rsp), %rcx
+	leaq	5824(%rsp), %rsi
+	leaq	7872(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$15:
+	leaq	3744(%rsp), %rcx
+	leaq	6336(%rsp), %rsi
+	leaq	8384(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$14:
+	leaq	2208(%rsp), %rcx
+	leaq	3744(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$13:
+	leaq	8896(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$12:
+	leaq	9408(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$11:
+	leaq	2208(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$10:
+	leaq	8896(%rsp), %rcx
+	leaq	6848(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$9:
+	leaq	9408(%rsp), %rcx
+	leaq	7360(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$8:
+	leaq	2208(%rsp), %rcx
+	leaq	2720(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$7:
+	leaq	2208(%rsp), %rcx
+	leaq	3232(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$6:
+	leaq	8896(%rsp), %rax
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vmovdqu	glob_data + 416(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	9408(%rsp), %rax
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vmovdqu	glob_data + 416(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	2208(%rsp), %rax
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vmovdqu	glob_data + 416(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	movq	11992(%rsp), %rax
+	movq	%rax, %rdx
+	leaq	8896(%rsp), %rcx
+	call	L_poly_csubq$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$5:
+	leaq	9408(%rsp), %rcx
+	call	L_poly_csubq$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$4:
+	leaq	glob_data + 416(%rip), %rcx
+	vmovdqu	(%rcx), %ymm0
+	vpsllw	$3, %ymm0, %ymm1
+	vpbroadcastw	glob_data + 6454(%rip), %ymm2
+	vpbroadcastw	glob_data + 6452(%rip), %ymm3
+	vpbroadcastw	glob_data + 6450(%rip), %ymm4
+	vpbroadcastq	glob_data + 6216(%rip), %ymm5
+	vpbroadcastq	glob_data + 6208(%rip), %ymm6
+	vmovdqu	glob_data + 32(%rip), %ymm7
+	vmovdqu	8896(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, (%rdx)
+	vpextrd	$0, %xmm8, 16(%rdx)
+	vmovdqu	8928(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 20(%rdx)
+	vpextrd	$0, %xmm8, 36(%rdx)
+	vmovdqu	8960(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 40(%rdx)
+	vpextrd	$0, %xmm8, 56(%rdx)
+	vmovdqu	8992(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 60(%rdx)
+	vpextrd	$0, %xmm8, 76(%rdx)
+	vmovdqu	9024(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 80(%rdx)
+	vpextrd	$0, %xmm8, 96(%rdx)
+	vmovdqu	9056(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 100(%rdx)
+	vpextrd	$0, %xmm8, 116(%rdx)
+	vmovdqu	9088(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 120(%rdx)
+	vpextrd	$0, %xmm8, 136(%rdx)
+	vmovdqu	9120(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 140(%rdx)
+	vpextrd	$0, %xmm8, 156(%rdx)
+	vmovdqu	9152(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 160(%rdx)
+	vpextrd	$0, %xmm8, 176(%rdx)
+	vmovdqu	9184(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 180(%rdx)
+	vpextrd	$0, %xmm8, 196(%rdx)
+	vmovdqu	9216(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 200(%rdx)
+	vpextrd	$0, %xmm8, 216(%rdx)
+	vmovdqu	9248(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 220(%rdx)
+	vpextrd	$0, %xmm8, 236(%rdx)
+	vmovdqu	9280(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 240(%rdx)
+	vpextrd	$0, %xmm8, 256(%rdx)
+	vmovdqu	9312(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 260(%rdx)
+	vpextrd	$0, %xmm8, 276(%rdx)
+	vmovdqu	9344(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 280(%rdx)
+	vpextrd	$0, %xmm8, 296(%rdx)
+	vmovdqu	9376(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 300(%rdx)
+	vpextrd	$0, %xmm8, 316(%rdx)
+	vmovdqu	9408(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 320(%rdx)
+	vpextrd	$0, %xmm8, 336(%rdx)
+	vmovdqu	9440(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 340(%rdx)
+	vpextrd	$0, %xmm8, 356(%rdx)
+	vmovdqu	9472(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 360(%rdx)
+	vpextrd	$0, %xmm8, 376(%rdx)
+	vmovdqu	9504(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 380(%rdx)
+	vpextrd	$0, %xmm8, 396(%rdx)
+	vmovdqu	9536(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 400(%rdx)
+	vpextrd	$0, %xmm8, 416(%rdx)
+	vmovdqu	9568(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 420(%rdx)
+	vpextrd	$0, %xmm8, 436(%rdx)
+	vmovdqu	9600(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 440(%rdx)
+	vpextrd	$0, %xmm8, 456(%rdx)
+	vmovdqu	9632(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 460(%rdx)
+	vpextrd	$0, %xmm8, 476(%rdx)
+	vmovdqu	9664(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 480(%rdx)
+	vpextrd	$0, %xmm8, 496(%rdx)
+	vmovdqu	9696(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 500(%rdx)
+	vpextrd	$0, %xmm8, 516(%rdx)
+	vmovdqu	9728(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 520(%rdx)
+	vpextrd	$0, %xmm8, 536(%rdx)
+	vmovdqu	9760(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 540(%rdx)
+	vpextrd	$0, %xmm8, 556(%rdx)
+	vmovdqu	9792(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 560(%rdx)
+	vpextrd	$0, %xmm8, 576(%rdx)
+	vmovdqu	9824(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 580(%rdx)
+	vpextrd	$0, %xmm8, 596(%rdx)
+	vmovdqu	9856(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 600(%rdx)
+	vpextrd	$0, %xmm8, 616(%rdx)
+	vmovdqu	9888(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm1
+	vpaddw	%ymm2, %ymm8, %ymm2
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm0
+	vpsubw	%ymm2, %ymm1, %ymm2
+	vpandn	%ymm2, %ymm1, %ymm1
+	vpsrlw	$15, %ymm1, %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vpmulhrsw	%ymm3, %ymm0, %ymm0
+	vpand	%ymm4, %ymm0, %ymm0
+	vpmaddwd	%ymm5, %ymm0, %ymm0
+	vpsllvd	%ymm6, %ymm0, %ymm0
+	vpsrlq	$12, %ymm0, %ymm0
+	vpshufb	%ymm7, %ymm0, %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vextracti128	$1, %ymm0, %xmm0
+	vpblendw	$-32, %xmm0, %xmm1, %xmm1
+	vmovdqu	%xmm1, 620(%rdx)
+	vpextrd	$0, %xmm0, 636(%rdx)
+	leaq	640(%rax), %rax
+	leaq	2208(%rsp), %rcx
+	call	L_poly_compress_1$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$3:
+	movq	11976(%rsp), %r8
+	leaq	4256(%rsp), %rax
+	movq	$0, %rcx
+	movq	$1, %rdx
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	(%rax), %ymm1
+	vmovdqu	(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	32(%rax), %ymm1
+	vmovdqu	32(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	64(%rax), %ymm1
+	vmovdqu	64(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	96(%rax), %ymm1
+	vmovdqu	96(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	128(%rax), %ymm1
+	vmovdqu	128(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	160(%rax), %ymm1
+	vmovdqu	160(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	192(%rax), %ymm1
+	vmovdqu	192(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	224(%rax), %ymm1
+	vmovdqu	224(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	256(%rax), %ymm1
+	vmovdqu	256(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	288(%rax), %ymm1
+	vmovdqu	288(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	320(%rax), %ymm1
+	vmovdqu	320(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	352(%rax), %ymm1
+	vmovdqu	352(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	384(%rax), %ymm1
+	vmovdqu	384(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	416(%rax), %ymm1
+	vmovdqu	416(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	448(%rax), %ymm1
+	vmovdqu	448(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	480(%rax), %ymm1
+	vmovdqu	480(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	512(%rax), %ymm1
+	vmovdqu	512(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	544(%rax), %ymm1
+	vmovdqu	544(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	576(%rax), %ymm1
+	vmovdqu	576(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	608(%rax), %ymm1
+	vmovdqu	608(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	640(%rax), %ymm1
+	vmovdqu	640(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	672(%rax), %ymm1
+	vmovdqu	672(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	704(%rax), %ymm1
+	vmovdqu	704(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	736(%rax), %ymm1
+	vmovdqu	736(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vptest	%ymm0, %ymm0
+	cmovne	%rdx, %rcx
+	negq	%rcx
+	shrq	$63, %rcx
+	movq	11984(%rsp), %rax
+	addq	$64, %rax
+	addq	$1536, %rax
+	leaq	96(%rsp), %rdx
+	negq	%rcx
+	movq	%rcx, 11984(%rsp)
+	vpbroadcastq	11984(%rsp), %ymm0
+	vmovdqu	(%rdx), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpblendvb	%ymm0, %ymm2, %ymm1, %ymm0
+	vmovdqu	%ymm0, (%rdx)
+	movq	$768, %rdi
+	leaq	128(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_256$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$2:
+	leaq	248(%rsp), %rsp
+	movq	11968(%rsp), %rdx
+	movq	$32, %rcx
+	leaq	96(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_shake256_64$1
+Ljade_kem_kyber_kyber512_amd64_avx2_dec$1:
+	leaq	248(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	12008(%rsp), %r15
+	movq	12016(%rsp), %r14
+	movq	12024(%rsp), %r13
+	movq	12032(%rsp), %r12
+	movq	12040(%rsp), %rbp
+	movq	12048(%rsp), %rbx
+	movq	12056(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber512_amd64_avx2_enc:
+jade_kem_kyber_kyber512_amd64_avx2_enc:
+	movq	%rsp, %rax
+	leaq	-88(%rsp), %rsp
+	andq	$-32, %rsp
+	movq	%rax, 80(%rsp)
+	movq	%r15, 32(%rsp)
+	movq	%r14, 40(%rsp)
+	movq	%r13, 48(%rsp)
+	movq	%r12, 56(%rsp)
+	movq	%rbp, 64(%rsp)
+	movq	%rbx, 72(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %r12
+	movq	%rdx, %rbp
+	movq	%rsp, %rdi
+	movq	$32, %rsi
+	call	__jasmin_syscall_randombytes__
+	movq	%rsp, %rcx
+	leaq	-11256(%rsp), %rsp
+	call	L__crypto_kem_enc_derand_jazz$1
+Ljade_kem_kyber_kyber512_amd64_avx2_enc$1:
+	leaq	11256(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	32(%rsp), %r15
+	movq	40(%rsp), %r14
+	movq	48(%rsp), %r13
+	movq	56(%rsp), %r12
+	movq	64(%rsp), %rbp
+	movq	72(%rsp), %rbx
+	movq	80(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber512_amd64_avx2_enc_derand:
+jade_kem_kyber_kyber512_amd64_avx2_enc_derand:
+	movq	%rsp, %rax
+	leaq	-88(%rsp), %rsp
+	andq	$-32, %rsp
+	movq	%rax, 80(%rsp)
+	movq	%r15, 32(%rsp)
+	movq	%r14, 40(%rsp)
+	movq	%r13, 48(%rsp)
+	movq	%r12, 56(%rsp)
+	movq	%rbp, 64(%rsp)
+	movq	%rbx, 72(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %r12
+	movq	%rdx, %rbp
+	movq	%rsp, %rax
+	movb	(%rcx), %dl
+	movb	%dl, (%rax)
+	movb	1(%rcx), %dl
+	movb	%dl, 1(%rax)
+	movb	2(%rcx), %dl
+	movb	%dl, 2(%rax)
+	movb	3(%rcx), %dl
+	movb	%dl, 3(%rax)
+	movb	4(%rcx), %dl
+	movb	%dl, 4(%rax)
+	movb	5(%rcx), %dl
+	movb	%dl, 5(%rax)
+	movb	6(%rcx), %dl
+	movb	%dl, 6(%rax)
+	movb	7(%rcx), %dl
+	movb	%dl, 7(%rax)
+	movb	8(%rcx), %dl
+	movb	%dl, 8(%rax)
+	movb	9(%rcx), %dl
+	movb	%dl, 9(%rax)
+	movb	10(%rcx), %dl
+	movb	%dl, 10(%rax)
+	movb	11(%rcx), %dl
+	movb	%dl, 11(%rax)
+	movb	12(%rcx), %dl
+	movb	%dl, 12(%rax)
+	movb	13(%rcx), %dl
+	movb	%dl, 13(%rax)
+	movb	14(%rcx), %dl
+	movb	%dl, 14(%rax)
+	movb	15(%rcx), %dl
+	movb	%dl, 15(%rax)
+	movb	16(%rcx), %dl
+	movb	%dl, 16(%rax)
+	movb	17(%rcx), %dl
+	movb	%dl, 17(%rax)
+	movb	18(%rcx), %dl
+	movb	%dl, 18(%rax)
+	movb	19(%rcx), %dl
+	movb	%dl, 19(%rax)
+	movb	20(%rcx), %dl
+	movb	%dl, 20(%rax)
+	movb	21(%rcx), %dl
+	movb	%dl, 21(%rax)
+	movb	22(%rcx), %dl
+	movb	%dl, 22(%rax)
+	movb	23(%rcx), %dl
+	movb	%dl, 23(%rax)
+	movb	24(%rcx), %dl
+	movb	%dl, 24(%rax)
+	movb	25(%rcx), %dl
+	movb	%dl, 25(%rax)
+	movb	26(%rcx), %dl
+	movb	%dl, 26(%rax)
+	movb	27(%rcx), %dl
+	movb	%dl, 27(%rax)
+	movb	28(%rcx), %dl
+	movb	%dl, 28(%rax)
+	movb	29(%rcx), %dl
+	movb	%dl, 29(%rax)
+	movb	30(%rcx), %dl
+	movb	%dl, 30(%rax)
+	movb	31(%rcx), %cl
+	movb	%cl, 31(%rax)
+	movq	%rsp, %rcx
+	leaq	-11256(%rsp), %rsp
+	call	L__crypto_kem_enc_derand_jazz$1
+Ljade_kem_kyber_kyber512_amd64_avx2_enc_derand$1:
+	leaq	11256(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	32(%rsp), %r15
+	movq	40(%rsp), %r14
+	movq	48(%rsp), %r13
+	movq	56(%rsp), %r12
+	movq	64(%rsp), %rbp
+	movq	72(%rsp), %rbx
+	movq	80(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber512_amd64_avx2_keypair:
+jade_kem_kyber_kyber512_amd64_avx2_keypair:
+	movq	%rsp, %rax
+	leaq	-120(%rsp), %rsp
+	andq	$-32, %rsp
+	movq	%rax, 112(%rsp)
+	movq	%r15, 64(%rsp)
+	movq	%r14, 72(%rsp)
+	movq	%r13, 80(%rsp)
+	movq	%r12, 88(%rsp)
+	movq	%rbp, 96(%rsp)
+	movq	%rbx, 104(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %rbp
+	movq	%rsp, %rdi
+	movq	$64, %rsi
+	call	__jasmin_syscall_randombytes__
+	movq	%rsp, %rax
+	leaq	-8696(%rsp), %rsp
+	call	L__crypto_kem_keypair_derand_jazz$1
+Ljade_kem_kyber_kyber512_amd64_avx2_keypair$1:
+	leaq	8696(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	64(%rsp), %r15
+	movq	72(%rsp), %r14
+	movq	80(%rsp), %r13
+	movq	88(%rsp), %r12
+	movq	96(%rsp), %rbp
+	movq	104(%rsp), %rbx
+	movq	112(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber512_amd64_avx2_keypair_derand:
+jade_kem_kyber_kyber512_amd64_avx2_keypair_derand:
+	movq	%rsp, %rax
+	leaq	-120(%rsp), %rsp
+	andq	$-32, %rsp
+	movq	%rax, 112(%rsp)
+	movq	%r15, 64(%rsp)
+	movq	%r14, 72(%rsp)
+	movq	%r13, 80(%rsp)
+	movq	%r12, 88(%rsp)
+	movq	%rbp, 96(%rsp)
+	movq	%rbx, 104(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %rbp
+	movq	%rsp, %rax
+	movb	(%rdx), %cl
+	movb	%cl, (%rax)
+	movb	1(%rdx), %cl
+	movb	%cl, 1(%rax)
+	movb	2(%rdx), %cl
+	movb	%cl, 2(%rax)
+	movb	3(%rdx), %cl
+	movb	%cl, 3(%rax)
+	movb	4(%rdx), %cl
+	movb	%cl, 4(%rax)
+	movb	5(%rdx), %cl
+	movb	%cl, 5(%rax)
+	movb	6(%rdx), %cl
+	movb	%cl, 6(%rax)
+	movb	7(%rdx), %cl
+	movb	%cl, 7(%rax)
+	movb	8(%rdx), %cl
+	movb	%cl, 8(%rax)
+	movb	9(%rdx), %cl
+	movb	%cl, 9(%rax)
+	movb	10(%rdx), %cl
+	movb	%cl, 10(%rax)
+	movb	11(%rdx), %cl
+	movb	%cl, 11(%rax)
+	movb	12(%rdx), %cl
+	movb	%cl, 12(%rax)
+	movb	13(%rdx), %cl
+	movb	%cl, 13(%rax)
+	movb	14(%rdx), %cl
+	movb	%cl, 14(%rax)
+	movb	15(%rdx), %cl
+	movb	%cl, 15(%rax)
+	movb	16(%rdx), %cl
+	movb	%cl, 16(%rax)
+	movb	17(%rdx), %cl
+	movb	%cl, 17(%rax)
+	movb	18(%rdx), %cl
+	movb	%cl, 18(%rax)
+	movb	19(%rdx), %cl
+	movb	%cl, 19(%rax)
+	movb	20(%rdx), %cl
+	movb	%cl, 20(%rax)
+	movb	21(%rdx), %cl
+	movb	%cl, 21(%rax)
+	movb	22(%rdx), %cl
+	movb	%cl, 22(%rax)
+	movb	23(%rdx), %cl
+	movb	%cl, 23(%rax)
+	movb	24(%rdx), %cl
+	movb	%cl, 24(%rax)
+	movb	25(%rdx), %cl
+	movb	%cl, 25(%rax)
+	movb	26(%rdx), %cl
+	movb	%cl, 26(%rax)
+	movb	27(%rdx), %cl
+	movb	%cl, 27(%rax)
+	movb	28(%rdx), %cl
+	movb	%cl, 28(%rax)
+	movb	29(%rdx), %cl
+	movb	%cl, 29(%rax)
+	movb	30(%rdx), %cl
+	movb	%cl, 30(%rax)
+	movb	31(%rdx), %cl
+	movb	%cl, 31(%rax)
+	movb	32(%rdx), %cl
+	movb	%cl, 32(%rax)
+	movb	33(%rdx), %cl
+	movb	%cl, 33(%rax)
+	movb	34(%rdx), %cl
+	movb	%cl, 34(%rax)
+	movb	35(%rdx), %cl
+	movb	%cl, 35(%rax)
+	movb	36(%rdx), %cl
+	movb	%cl, 36(%rax)
+	movb	37(%rdx), %cl
+	movb	%cl, 37(%rax)
+	movb	38(%rdx), %cl
+	movb	%cl, 38(%rax)
+	movb	39(%rdx), %cl
+	movb	%cl, 39(%rax)
+	movb	40(%rdx), %cl
+	movb	%cl, 40(%rax)
+	movb	41(%rdx), %cl
+	movb	%cl, 41(%rax)
+	movb	42(%rdx), %cl
+	movb	%cl, 42(%rax)
+	movb	43(%rdx), %cl
+	movb	%cl, 43(%rax)
+	movb	44(%rdx), %cl
+	movb	%cl, 44(%rax)
+	movb	45(%rdx), %cl
+	movb	%cl, 45(%rax)
+	movb	46(%rdx), %cl
+	movb	%cl, 46(%rax)
+	movb	47(%rdx), %cl
+	movb	%cl, 47(%rax)
+	movb	48(%rdx), %cl
+	movb	%cl, 48(%rax)
+	movb	49(%rdx), %cl
+	movb	%cl, 49(%rax)
+	movb	50(%rdx), %cl
+	movb	%cl, 50(%rax)
+	movb	51(%rdx), %cl
+	movb	%cl, 51(%rax)
+	movb	52(%rdx), %cl
+	movb	%cl, 52(%rax)
+	movb	53(%rdx), %cl
+	movb	%cl, 53(%rax)
+	movb	54(%rdx), %cl
+	movb	%cl, 54(%rax)
+	movb	55(%rdx), %cl
+	movb	%cl, 55(%rax)
+	movb	56(%rdx), %cl
+	movb	%cl, 56(%rax)
+	movb	57(%rdx), %cl
+	movb	%cl, 57(%rax)
+	movb	58(%rdx), %cl
+	movb	%cl, 58(%rax)
+	movb	59(%rdx), %cl
+	movb	%cl, 59(%rax)
+	movb	60(%rdx), %cl
+	movb	%cl, 60(%rax)
+	movb	61(%rdx), %cl
+	movb	%cl, 61(%rax)
+	movb	62(%rdx), %cl
+	movb	%cl, 62(%rax)
+	movb	63(%rdx), %cl
+	movb	%cl, 63(%rax)
+	movq	%rsp, %rax
+	leaq	-8696(%rsp), %rsp
+	call	L__crypto_kem_keypair_derand_jazz$1
+Ljade_kem_kyber_kyber512_amd64_avx2_keypair_derand$1:
+	leaq	8696(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	64(%rsp), %r15
+	movq	72(%rsp), %r14
+	movq	80(%rsp), %r13
+	movq	88(%rsp), %r12
+	movq	96(%rsp), %rbp
+	movq	104(%rsp), %rbx
+	movq	112(%rsp), %rsp
+	ret
+L__crypto_kem_enc_derand_jazz$1:
+	movq	%rbp, 11232(%rsp)
+	movq	%rbx, 11240(%rsp)
+	movq	%r12, 11248(%rsp)
+	leaq	64(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_256_32$1
+L__crypto_kem_enc_derand_jazz$69:
+	leaq	248(%rsp), %rsp
+	movq	11232(%rsp), %r8
+	movq	$800, %rdi
+	leaq	96(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_256$1
+L__crypto_kem_enc_derand_jazz$68:
+	leaq	248(%rsp), %rsp
+	leaq	128(%rsp), %rax
+	leaq	64(%rsp), %rcx
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_512_64$1
+L__crypto_kem_enc_derand_jazz$67:
+	leaq	248(%rsp), %rsp
+	movq	11232(%rsp), %rax
+	leaq	64(%rsp), %rdi
+	leaq	160(%rsp), %rcx
+	movq	%rax, %rsi
+	leaq	5088(%rsp), %r8
+	call	L_poly_frombytes$1
+L__crypto_kem_enc_derand_jazz$66:
+	addq	$384, %rsi
+	leaq	5600(%rsp), %r8
+	call	L_poly_frombytes$1
+L__crypto_kem_enc_derand_jazz$65:
+	movq	$0, %rdx
+	addq	$768, %rax
+	jmp 	L__crypto_kem_enc_derand_jazz$63
+L__crypto_kem_enc_derand_jazz$64:
+	movq	(%rax), %rsi
+	movq	%rsi, 32(%rsp,%rdx,8)
+	addq	$8, %rax
+	incq	%rdx
+L__crypto_kem_enc_derand_jazz$63:
+	cmpq	$4, %rdx
+	jb  	L__crypto_kem_enc_derand_jazz$64
+	leaq	2240(%rsp), %rax
+	call	L_poly_frommsg_1$1
+L__crypto_kem_enc_derand_jazz$62:
+	movq	%rcx, 11232(%rsp)
+	vmovdqu	32(%rsp), %ymm0
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 704(%rsp)
+	vmovdqu	%ymm0, 1216(%rsp)
+	vmovdqu	%ymm0, 1728(%rsp)
+	movb	$0, 224(%rsp)
+	movb	$0, 225(%rsp)
+	movb	$0, 736(%rsp)
+	movb	$1, 737(%rsp)
+	movb	$1, 1248(%rsp)
+	movb	$0, 1249(%rsp)
+	movb	$1, 1760(%rsp)
+	movb	$1, 1761(%rsp)
+	leaq	4288(%rsp), %rax
+	leaq	192(%rsp), %rcx
+	leaq	704(%rsp), %rdx
+	leaq	1216(%rsp), %rsi
+	leaq	1728(%rsp), %rdi
+	call	L_shake128_absorb4x_34$1
+L__crypto_kem_enc_derand_jazz$61:
+	leaq	4288(%rsp), %rax
+	leaq	192(%rsp), %rcx
+	leaq	704(%rsp), %r8
+	leaq	1216(%rsp), %r9
+	leaq	1728(%rsp), %r10
+	movq	%rcx, %r11
+	movq	%r8, %rbx
+	movq	%r9, %rbp
+	movq	%r10, %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_enc_derand_jazz$60:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	168(%rcx), %r11
+	leaq	168(%r8), %rbx
+	leaq	168(%r9), %rbp
+	leaq	168(%r10), %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_enc_derand_jazz$59:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	336(%rcx), %rcx
+	leaq	336(%r8), %r8
+	leaq	336(%r9), %r9
+	leaq	336(%r10), %r10
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_enc_derand_jazz$58:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%rcx)
+	vmovhpd	%xmm1, (%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r9)
+	vmovhpd	%xmm0, (%r10)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%rcx)
+	vmovhpd	%xmm1, 8(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r9)
+	vmovhpd	%xmm0, 8(%r10)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%rcx)
+	vmovhpd	%xmm1, 16(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r9)
+	vmovhpd	%xmm0, 16(%r10)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%rcx)
+	vmovhpd	%xmm1, 24(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r9)
+	vmovhpd	%xmm0, 24(%r10)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%rcx)
+	vmovhpd	%xmm1, 32(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r9)
+	vmovhpd	%xmm0, 32(%r10)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%rcx)
+	vmovhpd	%xmm1, 40(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r9)
+	vmovhpd	%xmm0, 40(%r10)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%rcx)
+	vmovhpd	%xmm1, 48(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r9)
+	vmovhpd	%xmm0, 48(%r10)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%rcx)
+	vmovhpd	%xmm1, 56(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r9)
+	vmovhpd	%xmm0, 56(%r10)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%rcx)
+	vmovhpd	%xmm1, 64(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r9)
+	vmovhpd	%xmm0, 64(%r10)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%rcx)
+	vmovhpd	%xmm1, 72(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r9)
+	vmovhpd	%xmm0, 72(%r10)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%rcx)
+	vmovhpd	%xmm1, 80(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r9)
+	vmovhpd	%xmm0, 80(%r10)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%rcx)
+	vmovhpd	%xmm1, 88(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r9)
+	vmovhpd	%xmm0, 88(%r10)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%rcx)
+	vmovhpd	%xmm1, 96(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r9)
+	vmovhpd	%xmm0, 96(%r10)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%rcx)
+	vmovhpd	%xmm1, 104(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r9)
+	vmovhpd	%xmm0, 104(%r10)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%rcx)
+	vmovhpd	%xmm1, 112(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r9)
+	vmovhpd	%xmm0, 112(%r10)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%rcx)
+	vmovhpd	%xmm1, 120(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r9)
+	vmovhpd	%xmm0, 120(%r10)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%rcx)
+	vmovhpd	%xmm1, 128(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r9)
+	vmovhpd	%xmm0, 128(%r10)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%rcx)
+	vmovhpd	%xmm1, 136(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%r9)
+	vmovhpd	%xmm0, 136(%r10)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%rcx)
+	vmovhpd	%xmm1, 144(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%r9)
+	vmovhpd	%xmm0, 144(%r10)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%rcx)
+	vmovhpd	%xmm1, 152(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%r9)
+	vmovhpd	%xmm0, 152(%r10)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%rcx)
+	vmovhpd	%xmm1, 160(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%r9)
+	vmovhpd	%xmm0, 160(%r10)
+	leaq	9184(%rsp), %rbp
+	leaq	192(%rsp), %r12
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$57:
+	movq	%rcx, %r10
+	leaq	9696(%rsp), %rbp
+	leaq	704(%rsp), %r12
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$56:
+	movq	%rcx, %r11
+	leaq	10208(%rsp), %rbp
+	leaq	1216(%rsp), %r12
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$55:
+	movq	%rcx, %rbx
+	leaq	10720(%rsp), %rbp
+	leaq	1728(%rsp), %r12
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$54:
+	cmpq	$255, %r10
+	setbe	%al
+	cmpq	$255, %r11
+	setbe	%dl
+	orb 	%dl, %al
+	cmpq	$255, %rbx
+	setbe	%dl
+	cmpq	$255, %rcx
+	setbe	%sil
+	orb 	%sil, %dl
+	orb 	%al, %dl
+	jmp 	L__crypto_kem_enc_derand_jazz$31
+L__crypto_kem_enc_derand_jazz$32:
+	leaq	4288(%rsp), %rax
+	leaq	192(%rsp), %r8
+	leaq	704(%rsp), %r9
+	leaq	1216(%rsp), %rbp
+	leaq	1728(%rsp), %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_enc_derand_jazz$53:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r8)
+	vmovhpd	%xmm1, (%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r8)
+	vmovhpd	%xmm1, 8(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r8)
+	vmovhpd	%xmm1, 16(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r8)
+	vmovhpd	%xmm1, 24(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r8)
+	vmovhpd	%xmm1, 32(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r8)
+	vmovhpd	%xmm1, 40(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r8)
+	vmovhpd	%xmm1, 48(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r8)
+	vmovhpd	%xmm1, 56(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r8)
+	vmovhpd	%xmm1, 64(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r8)
+	vmovhpd	%xmm1, 72(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r8)
+	vmovhpd	%xmm1, 80(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r8)
+	vmovhpd	%xmm1, 88(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r8)
+	vmovhpd	%xmm1, 96(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r8)
+	vmovhpd	%xmm1, 104(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r8)
+	vmovhpd	%xmm1, 112(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r8)
+	vmovhpd	%xmm1, 120(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r8)
+	vmovhpd	%xmm1, 128(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r8)
+	vmovhpd	%xmm1, 136(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r8)
+	vmovhpd	%xmm1, 144(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r8)
+	vmovhpd	%xmm1, 152(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r8)
+	vmovhpd	%xmm1, 160(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	9184(%rsp), %rax
+	leaq	192(%rsp), %rdx
+	movq	$0, %rsi
+	cmpq	$255, %r10
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+	jmp 	L__crypto_kem_enc_derand_jazz$48
+L__crypto_kem_enc_derand_jazz$49:
+	movzbw	(%rdx,%rsi), %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	movw	%r8w, %r9w
+	shrw	$4, %r9w
+	andw	$15, %r8w
+	shlw	$8, %r8w
+	orw 	%r8w, %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	shlw	$4, %r8w
+	orw 	%r8w, %r9w
+	incq	%rsi
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_enc_derand_jazz$52
+	movw	%di, (%rax,%r10,2)
+	incq	%r10
+L__crypto_kem_enc_derand_jazz$52:
+	cmpq	$256, %r10
+	jnb 	L__crypto_kem_enc_derand_jazz$50
+	cmpw	$3329, %r9w
+	jnb 	L__crypto_kem_enc_derand_jazz$50
+	movw	%r9w, (%rax,%r10,2)
+	incq	%r10
+L__crypto_kem_enc_derand_jazz$51:
+L__crypto_kem_enc_derand_jazz$50:
+	cmpq	$255, %r10
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+L__crypto_kem_enc_derand_jazz$48:
+	jne 	L__crypto_kem_enc_derand_jazz$49
+	leaq	9696(%rsp), %rax
+	leaq	704(%rsp), %rdx
+	movq	$0, %rsi
+	cmpq	$255, %r11
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+	jmp 	L__crypto_kem_enc_derand_jazz$43
+L__crypto_kem_enc_derand_jazz$44:
+	movzbw	(%rdx,%rsi), %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	movw	%r8w, %r9w
+	shrw	$4, %r9w
+	andw	$15, %r8w
+	shlw	$8, %r8w
+	orw 	%r8w, %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	shlw	$4, %r8w
+	orw 	%r8w, %r9w
+	incq	%rsi
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_enc_derand_jazz$47
+	movw	%di, (%rax,%r11,2)
+	incq	%r11
+L__crypto_kem_enc_derand_jazz$47:
+	cmpq	$256, %r11
+	jnb 	L__crypto_kem_enc_derand_jazz$45
+	cmpw	$3329, %r9w
+	jnb 	L__crypto_kem_enc_derand_jazz$45
+	movw	%r9w, (%rax,%r11,2)
+	incq	%r11
+L__crypto_kem_enc_derand_jazz$46:
+L__crypto_kem_enc_derand_jazz$45:
+	cmpq	$255, %r11
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+L__crypto_kem_enc_derand_jazz$43:
+	jne 	L__crypto_kem_enc_derand_jazz$44
+	leaq	10208(%rsp), %rax
+	leaq	1216(%rsp), %rdx
+	movq	$0, %rsi
+	cmpq	$255, %rbx
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+	jmp 	L__crypto_kem_enc_derand_jazz$38
+L__crypto_kem_enc_derand_jazz$39:
+	movzbw	(%rdx,%rsi), %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	movw	%r8w, %r9w
+	shrw	$4, %r9w
+	andw	$15, %r8w
+	shlw	$8, %r8w
+	orw 	%r8w, %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	shlw	$4, %r8w
+	orw 	%r8w, %r9w
+	incq	%rsi
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_enc_derand_jazz$42
+	movw	%di, (%rax,%rbx,2)
+	incq	%rbx
+L__crypto_kem_enc_derand_jazz$42:
+	cmpq	$256, %rbx
+	jnb 	L__crypto_kem_enc_derand_jazz$40
+	cmpw	$3329, %r9w
+	jnb 	L__crypto_kem_enc_derand_jazz$40
+	movw	%r9w, (%rax,%rbx,2)
+	incq	%rbx
+L__crypto_kem_enc_derand_jazz$41:
+L__crypto_kem_enc_derand_jazz$40:
+	cmpq	$255, %rbx
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+L__crypto_kem_enc_derand_jazz$38:
+	jne 	L__crypto_kem_enc_derand_jazz$39
+	leaq	10720(%rsp), %rax
+	leaq	1728(%rsp), %rdx
+	movq	$0, %rsi
+	cmpq	$255, %rcx
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+	jmp 	L__crypto_kem_enc_derand_jazz$33
+L__crypto_kem_enc_derand_jazz$34:
+	movzbw	(%rdx,%rsi), %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	movw	%r8w, %r9w
+	shrw	$4, %r9w
+	andw	$15, %r8w
+	shlw	$8, %r8w
+	orw 	%r8w, %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	shlw	$4, %r8w
+	orw 	%r8w, %r9w
+	incq	%rsi
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_enc_derand_jazz$37
+	movw	%di, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_enc_derand_jazz$37:
+	cmpq	$256, %rcx
+	jnb 	L__crypto_kem_enc_derand_jazz$35
+	cmpw	$3329, %r9w
+	jnb 	L__crypto_kem_enc_derand_jazz$35
+	movw	%r9w, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_enc_derand_jazz$36:
+L__crypto_kem_enc_derand_jazz$35:
+	cmpq	$255, %rcx
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+L__crypto_kem_enc_derand_jazz$33:
+	jne 	L__crypto_kem_enc_derand_jazz$34
+	cmpq	$255, %r10
+	setbe	%al
+	cmpq	$255, %r11
+	setbe	%dl
+	orb 	%dl, %al
+	cmpq	$255, %rbx
+	setbe	%dl
+	cmpq	$255, %rcx
+	setbe	%sil
+	orb 	%sil, %dl
+	orb 	%al, %dl
+L__crypto_kem_enc_derand_jazz$31:
+	cmpb	$0, %dl
+	jne 	L__crypto_kem_enc_derand_jazz$32
+	leaq	9184(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$30:
+	leaq	9696(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$29:
+	leaq	10208(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$28:
+	leaq	10720(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$27:
+	movq	11232(%rsp), %rax
+	movb	$0, %sil
+	leaq	7136(%rsp), %rdx
+	leaq	7648(%rsp), %rcx
+	leaq	6112(%rsp), %r8
+	leaq	6624(%rsp), %r9
+	leaq	-2008(%rsp), %rsp
+	call	L_poly_getnoise_eta1122_4x$1
+L__crypto_kem_enc_derand_jazz$26:
+	leaq	2008(%rsp), %rsp
+	movb	$4, %al
+	movq	11232(%rsp), %rcx
+	leaq	2752(%rsp), %rdx
+	leaq	-216(%rsp), %rsp
+	call	L_poly_getnoise$1
+L__crypto_kem_enc_derand_jazz$25:
+	leaq	216(%rsp), %rsp
+	leaq	7136(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_enc_derand_jazz$24:
+	leaq	7648(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_enc_derand_jazz$23:
+	leaq	8160(%rsp), %rcx
+	leaq	9184(%rsp), %rsi
+	leaq	7136(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$22:
+	leaq	3264(%rsp), %rcx
+	leaq	9696(%rsp), %rsi
+	leaq	7648(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$21:
+	leaq	8160(%rsp), %rcx
+	leaq	3264(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$20:
+	leaq	8672(%rsp), %rcx
+	leaq	10208(%rsp), %rsi
+	leaq	7136(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$19:
+	leaq	3264(%rsp), %rcx
+	leaq	10720(%rsp), %rsi
+	leaq	7648(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$18:
+	leaq	8672(%rsp), %rcx
+	leaq	3264(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$17:
+	leaq	3264(%rsp), %rcx
+	leaq	5088(%rsp), %rsi
+	leaq	7136(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$16:
+	leaq	3776(%rsp), %rcx
+	leaq	5600(%rsp), %rsi
+	leaq	7648(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$15:
+	leaq	3264(%rsp), %rcx
+	leaq	3776(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$14:
+	leaq	8160(%rsp), %rcx
+	call	L_poly_invntt$1
+L__crypto_kem_enc_derand_jazz$13:
+	leaq	8672(%rsp), %rcx
+	call	L_poly_invntt$1
+L__crypto_kem_enc_derand_jazz$12:
+	leaq	3264(%rsp), %rcx
+	call	L_poly_invntt$1
+L__crypto_kem_enc_derand_jazz$11:
+	leaq	8160(%rsp), %rcx
+	leaq	6112(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$10:
+	leaq	8672(%rsp), %rcx
+	leaq	6624(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$9:
+	leaq	3264(%rsp), %rcx
+	leaq	2752(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$8:
+	leaq	3264(%rsp), %rcx
+	leaq	2240(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$7:
+	leaq	8160(%rsp), %rax
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vmovdqu	glob_data + 416(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	8672(%rsp), %rax
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vmovdqu	glob_data + 416(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	3264(%rsp), %rax
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vmovdqu	glob_data + 416(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	movq	11240(%rsp), %rax
+	leaq	8160(%rsp), %rcx
+	call	L_poly_csubq$1
+L__crypto_kem_enc_derand_jazz$6:
+	leaq	8672(%rsp), %rcx
+	call	L_poly_csubq$1
+L__crypto_kem_enc_derand_jazz$5:
+	leaq	glob_data + 416(%rip), %rcx
+	vmovdqu	(%rcx), %ymm0
+	vpsllw	$3, %ymm0, %ymm1
+	vpbroadcastw	glob_data + 6454(%rip), %ymm2
+	vpbroadcastw	glob_data + 6452(%rip), %ymm3
+	vpbroadcastw	glob_data + 6450(%rip), %ymm4
+	vpbroadcastq	glob_data + 6216(%rip), %ymm5
+	vpbroadcastq	glob_data + 6208(%rip), %ymm6
+	vmovdqu	glob_data + 32(%rip), %ymm7
+	vmovdqu	8160(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, (%rax)
+	vpextrd	$0, %xmm8, 16(%rax)
+	vmovdqu	8192(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 20(%rax)
+	vpextrd	$0, %xmm8, 36(%rax)
+	vmovdqu	8224(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 40(%rax)
+	vpextrd	$0, %xmm8, 56(%rax)
+	vmovdqu	8256(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 60(%rax)
+	vpextrd	$0, %xmm8, 76(%rax)
+	vmovdqu	8288(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 80(%rax)
+	vpextrd	$0, %xmm8, 96(%rax)
+	vmovdqu	8320(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 100(%rax)
+	vpextrd	$0, %xmm8, 116(%rax)
+	vmovdqu	8352(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 120(%rax)
+	vpextrd	$0, %xmm8, 136(%rax)
+	vmovdqu	8384(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 140(%rax)
+	vpextrd	$0, %xmm8, 156(%rax)
+	vmovdqu	8416(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 160(%rax)
+	vpextrd	$0, %xmm8, 176(%rax)
+	vmovdqu	8448(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 180(%rax)
+	vpextrd	$0, %xmm8, 196(%rax)
+	vmovdqu	8480(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 200(%rax)
+	vpextrd	$0, %xmm8, 216(%rax)
+	vmovdqu	8512(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 220(%rax)
+	vpextrd	$0, %xmm8, 236(%rax)
+	vmovdqu	8544(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 240(%rax)
+	vpextrd	$0, %xmm8, 256(%rax)
+	vmovdqu	8576(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 260(%rax)
+	vpextrd	$0, %xmm8, 276(%rax)
+	vmovdqu	8608(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 280(%rax)
+	vpextrd	$0, %xmm8, 296(%rax)
+	vmovdqu	8640(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 300(%rax)
+	vpextrd	$0, %xmm8, 316(%rax)
+	vmovdqu	8672(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 320(%rax)
+	vpextrd	$0, %xmm8, 336(%rax)
+	vmovdqu	8704(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 340(%rax)
+	vpextrd	$0, %xmm8, 356(%rax)
+	vmovdqu	8736(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 360(%rax)
+	vpextrd	$0, %xmm8, 376(%rax)
+	vmovdqu	8768(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 380(%rax)
+	vpextrd	$0, %xmm8, 396(%rax)
+	vmovdqu	8800(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 400(%rax)
+	vpextrd	$0, %xmm8, 416(%rax)
+	vmovdqu	8832(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 420(%rax)
+	vpextrd	$0, %xmm8, 436(%rax)
+	vmovdqu	8864(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 440(%rax)
+	vpextrd	$0, %xmm8, 456(%rax)
+	vmovdqu	8896(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 460(%rax)
+	vpextrd	$0, %xmm8, 476(%rax)
+	vmovdqu	8928(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 480(%rax)
+	vpextrd	$0, %xmm8, 496(%rax)
+	vmovdqu	8960(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 500(%rax)
+	vpextrd	$0, %xmm8, 516(%rax)
+	vmovdqu	8992(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 520(%rax)
+	vpextrd	$0, %xmm8, 536(%rax)
+	vmovdqu	9024(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 540(%rax)
+	vpextrd	$0, %xmm8, 556(%rax)
+	vmovdqu	9056(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 560(%rax)
+	vpextrd	$0, %xmm8, 576(%rax)
+	vmovdqu	9088(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 580(%rax)
+	vpextrd	$0, %xmm8, 596(%rax)
+	vmovdqu	9120(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 600(%rax)
+	vpextrd	$0, %xmm8, 616(%rax)
+	vmovdqu	9152(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm1
+	vpaddw	%ymm2, %ymm8, %ymm2
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm0
+	vpsubw	%ymm2, %ymm1, %ymm2
+	vpandn	%ymm2, %ymm1, %ymm1
+	vpsrlw	$15, %ymm1, %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vpmulhrsw	%ymm3, %ymm0, %ymm0
+	vpand	%ymm4, %ymm0, %ymm0
+	vpmaddwd	%ymm5, %ymm0, %ymm0
+	vpsllvd	%ymm6, %ymm0, %ymm0
+	vpsrlq	$12, %ymm0, %ymm0
+	vpshufb	%ymm7, %ymm0, %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vextracti128	$1, %ymm0, %xmm0
+	vpblendw	$-32, %xmm0, %xmm1, %xmm1
+	vmovdqu	%xmm1, 620(%rax)
+	vpextrd	$0, %xmm0, 636(%rax)
+	addq	$640, %rax
+	leaq	3264(%rsp), %rcx
+	call	L_poly_compress$1
+L__crypto_kem_enc_derand_jazz$4:
+	movq	11240(%rsp), %r8
+	movq	$768, %rdi
+	leaq	160(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_256$1
+L__crypto_kem_enc_derand_jazz$3:
+	leaq	248(%rsp), %rsp
+	movq	11248(%rsp), %rdx
+	movq	$32, %rcx
+	leaq	128(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_shake256_64$1
+L__crypto_kem_enc_derand_jazz$2:
+	leaq	248(%rsp), %rsp
+	ret
+L__crypto_kem_keypair_derand_jazz$1:
+	movq	%rax, 8576(%rsp)
+	movq	%rbx, 8584(%rsp)
+	movq	%rbp, 8592(%rsp)
+	movq	%rax, %rcx
+	movq	%rbx, 8600(%rsp)
+	movq	%rbp, 8608(%rsp)
+	leaq	8616(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_512_32$1
+L__crypto_kem_keypair_derand_jazz$57:
+	leaq	248(%rsp), %rsp
+	movq	8616(%rsp), %rax
+	movq	%rax, 64(%rsp)
+	movq	8648(%rsp), %rax
+	movq	%rax, 32(%rsp)
+	movq	8624(%rsp), %rax
+	movq	%rax, 72(%rsp)
+	movq	8656(%rsp), %rax
+	movq	%rax, 40(%rsp)
+	movq	8632(%rsp), %rax
+	movq	%rax, 80(%rsp)
+	movq	8664(%rsp), %rax
+	movq	%rax, 48(%rsp)
+	movq	8640(%rsp), %rax
+	movq	%rax, 88(%rsp)
+	movq	8672(%rsp), %rax
+	movq	%rax, 56(%rsp)
+	vmovdqu	64(%rsp), %ymm0
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm0, 608(%rsp)
+	vmovdqu	%ymm0, 1120(%rsp)
+	vmovdqu	%ymm0, 1632(%rsp)
+	movb	$0, 128(%rsp)
+	movb	$0, 129(%rsp)
+	movb	$1, 640(%rsp)
+	movb	$0, 641(%rsp)
+	movb	$0, 1152(%rsp)
+	movb	$1, 1153(%rsp)
+	movb	$1, 1664(%rsp)
+	movb	$1, 1665(%rsp)
+	leaq	2656(%rsp), %rax
+	leaq	96(%rsp), %rcx
+	leaq	608(%rsp), %rdx
+	leaq	1120(%rsp), %rsi
+	leaq	1632(%rsp), %rdi
+	call	L_shake128_absorb4x_34$1
+L__crypto_kem_keypair_derand_jazz$56:
+	leaq	2656(%rsp), %rax
+	leaq	96(%rsp), %rcx
+	leaq	608(%rsp), %r8
+	leaq	1120(%rsp), %r9
+	leaq	1632(%rsp), %r10
+	movq	%rcx, %r11
+	movq	%r8, %rbx
+	movq	%r9, %rbp
+	movq	%r10, %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_keypair_derand_jazz$55:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	168(%rcx), %r11
+	leaq	168(%r8), %rbx
+	leaq	168(%r9), %rbp
+	leaq	168(%r10), %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_keypair_derand_jazz$54:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	336(%rcx), %rcx
+	leaq	336(%r8), %r8
+	leaq	336(%r9), %r9
+	leaq	336(%r10), %r10
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_keypair_derand_jazz$53:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%rcx)
+	vmovhpd	%xmm1, (%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r9)
+	vmovhpd	%xmm0, (%r10)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%rcx)
+	vmovhpd	%xmm1, 8(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r9)
+	vmovhpd	%xmm0, 8(%r10)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%rcx)
+	vmovhpd	%xmm1, 16(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r9)
+	vmovhpd	%xmm0, 16(%r10)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%rcx)
+	vmovhpd	%xmm1, 24(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r9)
+	vmovhpd	%xmm0, 24(%r10)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%rcx)
+	vmovhpd	%xmm1, 32(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r9)
+	vmovhpd	%xmm0, 32(%r10)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%rcx)
+	vmovhpd	%xmm1, 40(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r9)
+	vmovhpd	%xmm0, 40(%r10)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%rcx)
+	vmovhpd	%xmm1, 48(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r9)
+	vmovhpd	%xmm0, 48(%r10)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%rcx)
+	vmovhpd	%xmm1, 56(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r9)
+	vmovhpd	%xmm0, 56(%r10)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%rcx)
+	vmovhpd	%xmm1, 64(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r9)
+	vmovhpd	%xmm0, 64(%r10)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%rcx)
+	vmovhpd	%xmm1, 72(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r9)
+	vmovhpd	%xmm0, 72(%r10)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%rcx)
+	vmovhpd	%xmm1, 80(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r9)
+	vmovhpd	%xmm0, 80(%r10)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%rcx)
+	vmovhpd	%xmm1, 88(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r9)
+	vmovhpd	%xmm0, 88(%r10)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%rcx)
+	vmovhpd	%xmm1, 96(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r9)
+	vmovhpd	%xmm0, 96(%r10)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%rcx)
+	vmovhpd	%xmm1, 104(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r9)
+	vmovhpd	%xmm0, 104(%r10)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%rcx)
+	vmovhpd	%xmm1, 112(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r9)
+	vmovhpd	%xmm0, 112(%r10)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%rcx)
+	vmovhpd	%xmm1, 120(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r9)
+	vmovhpd	%xmm0, 120(%r10)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%rcx)
+	vmovhpd	%xmm1, 128(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r9)
+	vmovhpd	%xmm0, 128(%r10)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%rcx)
+	vmovhpd	%xmm1, 136(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%r9)
+	vmovhpd	%xmm0, 136(%r10)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%rcx)
+	vmovhpd	%xmm1, 144(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%r9)
+	vmovhpd	%xmm0, 144(%r10)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%rcx)
+	vmovhpd	%xmm1, 152(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%r9)
+	vmovhpd	%xmm0, 152(%r10)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%rcx)
+	vmovhpd	%xmm1, 160(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%r9)
+	vmovhpd	%xmm0, 160(%r10)
+	leaq	6528(%rsp), %rbp
+	leaq	96(%rsp), %r12
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$52:
+	movq	%rcx, %r10
+	leaq	7040(%rsp), %rbp
+	leaq	608(%rsp), %r12
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$51:
+	movq	%rcx, %r11
+	leaq	7552(%rsp), %rbp
+	leaq	1120(%rsp), %r12
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$50:
+	movq	%rcx, %rbx
+	leaq	8064(%rsp), %rbp
+	leaq	1632(%rsp), %r12
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$49:
+	cmpq	$255, %r10
+	setbe	%al
+	cmpq	$255, %r11
+	setbe	%dl
+	orb 	%dl, %al
+	cmpq	$255, %rbx
+	setbe	%dl
+	cmpq	$255, %rcx
+	setbe	%sil
+	orb 	%sil, %dl
+	orb 	%al, %dl
+	jmp 	L__crypto_kem_keypair_derand_jazz$26
+L__crypto_kem_keypair_derand_jazz$27:
+	leaq	2656(%rsp), %rax
+	leaq	96(%rsp), %r8
+	leaq	608(%rsp), %r9
+	leaq	1120(%rsp), %rbp
+	leaq	1632(%rsp), %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_keypair_derand_jazz$48:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r8)
+	vmovhpd	%xmm1, (%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r8)
+	vmovhpd	%xmm1, 8(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r8)
+	vmovhpd	%xmm1, 16(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r8)
+	vmovhpd	%xmm1, 24(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r8)
+	vmovhpd	%xmm1, 32(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r8)
+	vmovhpd	%xmm1, 40(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r8)
+	vmovhpd	%xmm1, 48(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r8)
+	vmovhpd	%xmm1, 56(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r8)
+	vmovhpd	%xmm1, 64(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r8)
+	vmovhpd	%xmm1, 72(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r8)
+	vmovhpd	%xmm1, 80(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r8)
+	vmovhpd	%xmm1, 88(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r8)
+	vmovhpd	%xmm1, 96(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r8)
+	vmovhpd	%xmm1, 104(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r8)
+	vmovhpd	%xmm1, 112(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r8)
+	vmovhpd	%xmm1, 120(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r8)
+	vmovhpd	%xmm1, 128(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r8)
+	vmovhpd	%xmm1, 136(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r8)
+	vmovhpd	%xmm1, 144(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r8)
+	vmovhpd	%xmm1, 152(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r8)
+	vmovhpd	%xmm1, 160(%r9)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	6528(%rsp), %rax
+	leaq	96(%rsp), %rdx
+	movq	$0, %rsi
+	cmpq	$255, %r10
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+	jmp 	L__crypto_kem_keypair_derand_jazz$43
+L__crypto_kem_keypair_derand_jazz$44:
+	movzbw	(%rdx,%rsi), %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	movw	%r8w, %r9w
+	shrw	$4, %r9w
+	andw	$15, %r8w
+	shlw	$8, %r8w
+	orw 	%r8w, %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	shlw	$4, %r8w
+	orw 	%r8w, %r9w
+	incq	%rsi
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_keypair_derand_jazz$47
+	movw	%di, (%rax,%r10,2)
+	incq	%r10
+L__crypto_kem_keypair_derand_jazz$47:
+	cmpq	$256, %r10
+	jnb 	L__crypto_kem_keypair_derand_jazz$45
+	cmpw	$3329, %r9w
+	jnb 	L__crypto_kem_keypair_derand_jazz$45
+	movw	%r9w, (%rax,%r10,2)
+	incq	%r10
+L__crypto_kem_keypair_derand_jazz$46:
+L__crypto_kem_keypair_derand_jazz$45:
+	cmpq	$255, %r10
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+L__crypto_kem_keypair_derand_jazz$43:
+	jne 	L__crypto_kem_keypair_derand_jazz$44
+	leaq	7040(%rsp), %rax
+	leaq	608(%rsp), %rdx
+	movq	$0, %rsi
+	cmpq	$255, %r11
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+	jmp 	L__crypto_kem_keypair_derand_jazz$38
+L__crypto_kem_keypair_derand_jazz$39:
+	movzbw	(%rdx,%rsi), %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	movw	%r8w, %r9w
+	shrw	$4, %r9w
+	andw	$15, %r8w
+	shlw	$8, %r8w
+	orw 	%r8w, %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	shlw	$4, %r8w
+	orw 	%r8w, %r9w
+	incq	%rsi
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_keypair_derand_jazz$42
+	movw	%di, (%rax,%r11,2)
+	incq	%r11
+L__crypto_kem_keypair_derand_jazz$42:
+	cmpq	$256, %r11
+	jnb 	L__crypto_kem_keypair_derand_jazz$40
+	cmpw	$3329, %r9w
+	jnb 	L__crypto_kem_keypair_derand_jazz$40
+	movw	%r9w, (%rax,%r11,2)
+	incq	%r11
+L__crypto_kem_keypair_derand_jazz$41:
+L__crypto_kem_keypair_derand_jazz$40:
+	cmpq	$255, %r11
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+L__crypto_kem_keypair_derand_jazz$38:
+	jne 	L__crypto_kem_keypair_derand_jazz$39
+	leaq	7552(%rsp), %rax
+	leaq	1120(%rsp), %rdx
+	movq	$0, %rsi
+	cmpq	$255, %rbx
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+	jmp 	L__crypto_kem_keypair_derand_jazz$33
+L__crypto_kem_keypair_derand_jazz$34:
+	movzbw	(%rdx,%rsi), %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	movw	%r8w, %r9w
+	shrw	$4, %r9w
+	andw	$15, %r8w
+	shlw	$8, %r8w
+	orw 	%r8w, %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	shlw	$4, %r8w
+	orw 	%r8w, %r9w
+	incq	%rsi
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_keypair_derand_jazz$37
+	movw	%di, (%rax,%rbx,2)
+	incq	%rbx
+L__crypto_kem_keypair_derand_jazz$37:
+	cmpq	$256, %rbx
+	jnb 	L__crypto_kem_keypair_derand_jazz$35
+	cmpw	$3329, %r9w
+	jnb 	L__crypto_kem_keypair_derand_jazz$35
+	movw	%r9w, (%rax,%rbx,2)
+	incq	%rbx
+L__crypto_kem_keypair_derand_jazz$36:
+L__crypto_kem_keypair_derand_jazz$35:
+	cmpq	$255, %rbx
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+L__crypto_kem_keypair_derand_jazz$33:
+	jne 	L__crypto_kem_keypair_derand_jazz$34
+	leaq	8064(%rsp), %rax
+	leaq	1632(%rsp), %rdx
+	movq	$0, %rsi
+	cmpq	$255, %rcx
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+	jmp 	L__crypto_kem_keypair_derand_jazz$28
+L__crypto_kem_keypair_derand_jazz$29:
+	movzbw	(%rdx,%rsi), %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	movw	%r8w, %r9w
+	shrw	$4, %r9w
+	andw	$15, %r8w
+	shlw	$8, %r8w
+	orw 	%r8w, %di
+	incq	%rsi
+	movzbw	(%rdx,%rsi), %r8w
+	shlw	$4, %r8w
+	orw 	%r8w, %r9w
+	incq	%rsi
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_keypair_derand_jazz$32
+	movw	%di, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_keypair_derand_jazz$32:
+	cmpq	$256, %rcx
+	jnb 	L__crypto_kem_keypair_derand_jazz$30
+	cmpw	$3329, %r9w
+	jnb 	L__crypto_kem_keypair_derand_jazz$30
+	movw	%r9w, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_keypair_derand_jazz$31:
+L__crypto_kem_keypair_derand_jazz$30:
+	cmpq	$255, %rcx
+	setbe	%dil
+	cmpq	$165, %rsi
+	setbe	%r8b
+	testb	%r8b, %dil
+L__crypto_kem_keypair_derand_jazz$28:
+	jne 	L__crypto_kem_keypair_derand_jazz$29
+	cmpq	$255, %r10
+	setbe	%al
+	cmpq	$255, %r11
+	setbe	%dl
+	orb 	%dl, %al
+	cmpq	$255, %rbx
+	setbe	%dl
+	cmpq	$255, %rcx
+	setbe	%sil
+	orb 	%sil, %dl
+	orb 	%al, %dl
+L__crypto_kem_keypair_derand_jazz$26:
+	cmpb	$0, %dl
+	jne 	L__crypto_kem_keypair_derand_jazz$27
+	leaq	6528(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$25:
+	leaq	7040(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$24:
+	leaq	7552(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$23:
+	leaq	8064(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$22:
+	movb	$0, %sil
+	leaq	4480(%rsp), %rax
+	leaq	4992(%rsp), %rcx
+	leaq	3456(%rsp), %r8
+	leaq	3968(%rsp), %r9
+	leaq	32(%rsp), %rdx
+	leaq	-2008(%rsp), %rsp
+	call	L_poly_getnoise_eta1_4x$1
+L__crypto_kem_keypair_derand_jazz$21:
+	leaq	2008(%rsp), %rsp
+	leaq	4480(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$20:
+	leaq	4992(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$19:
+	leaq	3456(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$18:
+	leaq	3968(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$17:
+	leaq	5504(%rsp), %rcx
+	leaq	6528(%rsp), %rsi
+	leaq	4480(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$16:
+	leaq	2144(%rsp), %rcx
+	leaq	7040(%rsp), %rsi
+	leaq	4992(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$15:
+	leaq	5504(%rsp), %rcx
+	leaq	2144(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$14:
+	leaq	5504(%rsp), %rax
+	call	L_poly_frommont$1
+L__crypto_kem_keypair_derand_jazz$13:
+	leaq	6016(%rsp), %rcx
+	leaq	7552(%rsp), %rsi
+	leaq	4480(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$12:
+	leaq	2144(%rsp), %rcx
+	leaq	8064(%rsp), %rsi
+	leaq	4992(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$11:
+	leaq	6016(%rsp), %rcx
+	leaq	2144(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$10:
+	leaq	6016(%rsp), %rax
+	call	L_poly_frommont$1
+L__crypto_kem_keypair_derand_jazz$9:
+	leaq	5504(%rsp), %rcx
+	leaq	3456(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$8:
+	leaq	6016(%rsp), %rcx
+	leaq	3968(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$7:
+	leaq	5504(%rsp), %rax
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vmovdqu	glob_data + 416(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	6016(%rsp), %rax
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vmovdqu	glob_data + 416(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	movq	8600(%rsp), %rax
+	movq	8608(%rsp), %rcx
+	leaq	4480(%rsp), %rdx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$6:
+	addq	$384, %rcx
+	leaq	4992(%rsp), %rdx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$5:
+	movq	%rax, %rcx
+	leaq	5504(%rsp), %rdx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$4:
+	addq	$384, %rcx
+	leaq	6016(%rsp), %rdx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$3:
+	addq	$768, %rax
+	movq	64(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	72(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	80(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	88(%rsp), %rcx
+	movq	%rcx, (%rax)
+	movq	8592(%rsp), %rax
+	addq	$768, %rax
+	movq	8584(%rsp), %rcx
+	movq	(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	8(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	16(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	24(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	32(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	40(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	48(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	56(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	64(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	72(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	80(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	88(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	96(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	104(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	112(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	120(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	128(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	136(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	144(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	152(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	160(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	168(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	176(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	184(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	192(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	200(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	208(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	216(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	224(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	232(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	240(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	248(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	256(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	264(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	272(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	280(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	288(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	296(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	304(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	312(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	320(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	328(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	336(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	344(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	352(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	360(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	368(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	376(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	384(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	392(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	400(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	408(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	416(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	424(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	432(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	440(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	448(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	456(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	464(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	472(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	480(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	488(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	496(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	504(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	512(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	520(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	528(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	536(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	544(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	552(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	560(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	568(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	576(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	584(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	592(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	600(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	608(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	616(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	624(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	632(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	640(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	648(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	656(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	664(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	672(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	680(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	688(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	696(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	704(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	712(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	720(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	728(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	736(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	744(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	752(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	760(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	768(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	776(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	784(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	792(%rcx), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	%rax, 8592(%rsp)
+	movq	8584(%rsp), %r8
+	movq	$800, %rdi
+	leaq	64(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_256$1
+L__crypto_kem_keypair_derand_jazz$2:
+	leaq	248(%rsp), %rsp
+	movq	8592(%rsp), %rax
+	movq	8576(%rsp), %rcx
+	leaq	64(%rsp), %rdx
+	movb	(%rdx), %sil
+	movb	%sil, (%rax)
+	movb	1(%rdx), %sil
+	movb	%sil, 1(%rax)
+	movb	2(%rdx), %sil
+	movb	%sil, 2(%rax)
+	movb	3(%rdx), %sil
+	movb	%sil, 3(%rax)
+	movb	4(%rdx), %sil
+	movb	%sil, 4(%rax)
+	movb	5(%rdx), %sil
+	movb	%sil, 5(%rax)
+	movb	6(%rdx), %sil
+	movb	%sil, 6(%rax)
+	movb	7(%rdx), %sil
+	movb	%sil, 7(%rax)
+	movb	8(%rdx), %sil
+	movb	%sil, 8(%rax)
+	movb	9(%rdx), %sil
+	movb	%sil, 9(%rax)
+	movb	10(%rdx), %sil
+	movb	%sil, 10(%rax)
+	movb	11(%rdx), %sil
+	movb	%sil, 11(%rax)
+	movb	12(%rdx), %sil
+	movb	%sil, 12(%rax)
+	movb	13(%rdx), %sil
+	movb	%sil, 13(%rax)
+	movb	14(%rdx), %sil
+	movb	%sil, 14(%rax)
+	movb	15(%rdx), %sil
+	movb	%sil, 15(%rax)
+	movb	16(%rdx), %sil
+	movb	%sil, 16(%rax)
+	movb	17(%rdx), %sil
+	movb	%sil, 17(%rax)
+	movb	18(%rdx), %sil
+	movb	%sil, 18(%rax)
+	movb	19(%rdx), %sil
+	movb	%sil, 19(%rax)
+	movb	20(%rdx), %sil
+	movb	%sil, 20(%rax)
+	movb	21(%rdx), %sil
+	movb	%sil, 21(%rax)
+	movb	22(%rdx), %sil
+	movb	%sil, 22(%rax)
+	movb	23(%rdx), %sil
+	movb	%sil, 23(%rax)
+	movb	24(%rdx), %sil
+	movb	%sil, 24(%rax)
+	movb	25(%rdx), %sil
+	movb	%sil, 25(%rax)
+	movb	26(%rdx), %sil
+	movb	%sil, 26(%rax)
+	movb	27(%rdx), %sil
+	movb	%sil, 27(%rax)
+	movb	28(%rdx), %sil
+	movb	%sil, 28(%rax)
+	movb	29(%rdx), %sil
+	movb	%sil, 29(%rax)
+	movb	30(%rdx), %sil
+	movb	%sil, 30(%rax)
+	movb	31(%rdx), %dl
+	movb	%dl, 31(%rax)
+	addq	$32, %rax
+	leaq	32(%rcx), %rcx
+	movb	(%rcx), %dl
+	movb	%dl, (%rax)
+	movb	1(%rcx), %dl
+	movb	%dl, 1(%rax)
+	movb	2(%rcx), %dl
+	movb	%dl, 2(%rax)
+	movb	3(%rcx), %dl
+	movb	%dl, 3(%rax)
+	movb	4(%rcx), %dl
+	movb	%dl, 4(%rax)
+	movb	5(%rcx), %dl
+	movb	%dl, 5(%rax)
+	movb	6(%rcx), %dl
+	movb	%dl, 6(%rax)
+	movb	7(%rcx), %dl
+	movb	%dl, 7(%rax)
+	movb	8(%rcx), %dl
+	movb	%dl, 8(%rax)
+	movb	9(%rcx), %dl
+	movb	%dl, 9(%rax)
+	movb	10(%rcx), %dl
+	movb	%dl, 10(%rax)
+	movb	11(%rcx), %dl
+	movb	%dl, 11(%rax)
+	movb	12(%rcx), %dl
+	movb	%dl, 12(%rax)
+	movb	13(%rcx), %dl
+	movb	%dl, 13(%rax)
+	movb	14(%rcx), %dl
+	movb	%dl, 14(%rax)
+	movb	15(%rcx), %dl
+	movb	%dl, 15(%rax)
+	movb	16(%rcx), %dl
+	movb	%dl, 16(%rax)
+	movb	17(%rcx), %dl
+	movb	%dl, 17(%rax)
+	movb	18(%rcx), %dl
+	movb	%dl, 18(%rax)
+	movb	19(%rcx), %dl
+	movb	%dl, 19(%rax)
+	movb	20(%rcx), %dl
+	movb	%dl, 20(%rax)
+	movb	21(%rcx), %dl
+	movb	%dl, 21(%rax)
+	movb	22(%rcx), %dl
+	movb	%dl, 22(%rax)
+	movb	23(%rcx), %dl
+	movb	%dl, 23(%rax)
+	movb	24(%rcx), %dl
+	movb	%dl, 24(%rax)
+	movb	25(%rcx), %dl
+	movb	%dl, 25(%rax)
+	movb	26(%rcx), %dl
+	movb	%dl, 26(%rax)
+	movb	27(%rcx), %dl
+	movb	%dl, 27(%rax)
+	movb	28(%rcx), %dl
+	movb	%dl, 28(%rax)
+	movb	29(%rcx), %dl
+	movb	%dl, 29(%rax)
+	movb	30(%rcx), %dl
+	movb	%dl, 30(%rax)
+	movb	31(%rcx), %cl
+	movb	%cl, 31(%rax)
+	ret
+L_rej_uniform_avx$1:
+	leaq	glob_data + 4160(%rip), %rax
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	movq	$0, %rcx
+	movq	$0, %rdx
+	vpbroadcastb	glob_data + 6462(%rip), %ymm1
+	vpbroadcastw	glob_data + 6448(%rip), %ymm2
+	vmovdqu	glob_data + 0(%rip), %ymm3
+	cmpq	$224, %rcx
+	setbe	%sil
+	cmpq	$448, %rdx
+	setbe	%dil
+	testb	%dil, %sil
+	jmp 	L_rej_uniform_avx$9
+L_rej_uniform_avx$10:
+	vpermq	$-108, (%r12,%rdx), %ymm4
+	vpermq	$-108, 24(%r12,%rdx), %ymm5
+	vpshufb	%ymm3, %ymm4, %ymm4
+	vpshufb	%ymm3, %ymm5, %ymm5
+	vpsrlw	$4, %ymm4, %ymm6
+	vpsrlw	$4, %ymm5, %ymm7
+	vpblendw	$-86, %ymm6, %ymm4, %ymm4
+	vpblendw	$-86, %ymm7, %ymm5, %ymm5
+	vpand	%ymm2, %ymm4, %ymm4
+	vpand	%ymm2, %ymm5, %ymm5
+	vpcmpgtw	%ymm4, %ymm0, %ymm6
+	vpcmpgtw	%ymm5, %ymm0, %ymm7
+	vpacksswb	%ymm7, %ymm6, %ymm6
+	vpmovmskb	%ymm6, %rsi
+	movq	%rsi, %rdi
+	andq	$255, %rdi
+	vmovq	(%rax,%rdi,8), %xmm6
+	movq	%rsi, %r8
+	shrq	$16, %r8
+	andq	$255, %r8
+	vmovq	(%rax,%r8,8), %xmm7
+	movq	%rsi, %r9
+	shrq	$8, %r9
+	andq	$255, %r9
+	vmovq	(%rax,%r9,8), %xmm8
+	shrq	$24, %rsi
+	andq	$255, %rsi
+	vmovq	(%rax,%rsi,8), %xmm9
+	vinserti128	$1, %xmm7, %ymm6, %ymm6
+	popcnt	%rdi, %rdi
+	popcnt	%r8, %r8
+	addq	%rcx, %rdi
+	vinserti128	$1, %xmm9, %ymm8, %ymm7
+	addq	%rdi, %r8
+	popcnt	%r9, %r9
+	addq	%r8, %r9
+	popcnt	%rsi, %rsi
+	addq	%r9, %rsi
+	vpaddb	%ymm1, %ymm6, %ymm8
+	vpunpcklbw	%ymm8, %ymm6, %ymm6
+	vpaddb	%ymm1, %ymm7, %ymm8
+	vpunpcklbw	%ymm8, %ymm7, %ymm7
+	vpshufb	%ymm6, %ymm4, %ymm4
+	vpshufb	%ymm7, %ymm5, %ymm5
+	vmovdqu	%xmm4, (%rbp,%rcx,2)
+	vextracti128	$1, %ymm4, (%rbp,%rdi,2)
+	vmovdqu	%xmm5, (%rbp,%r8,2)
+	vextracti128	$1, %ymm5, (%rbp,%r9,2)
+	movq	%rsi, %rcx
+	cmpq	$224, %rcx
+	setbe	%sil
+	addq	$48, %rdx
+	cmpq	$448, %rdx
+	setbe	%dil
+	testb	%dil, %sil
+L_rej_uniform_avx$9:
+	jne 	L_rej_uniform_avx$10
+	cmpq	$248, %rcx
+	setbe	%sil
+	cmpq	$488, %rdx
+	setbe	%dil
+	testb	%dil, %sil
+	movq	$21845, %rsi
+	jmp 	L_rej_uniform_avx$7
+L_rej_uniform_avx$8:
+	vmovdqu	(%r12,%rdx), %xmm4
+	vpshufb	%xmm3, %xmm4, %xmm4
+	vpsrlw	$4, %xmm4, %xmm5
+	vpblendw	$-86, %xmm5, %xmm4, %xmm4
+	vpand	%xmm2, %xmm4, %xmm4
+	vpcmpgtw	%xmm4, %xmm0, %xmm5
+	vpmovmskb	%xmm5, %rdi
+	pext	%rsi, %rdi, %rdi
+	vmovq	(%rax,%rdi,8), %xmm5
+	popcnt	%rdi, %rdi
+	vpaddb	%xmm1, %xmm5, %xmm6
+	vpunpcklbw	%xmm6, %xmm5, %xmm5
+	vpshufb	%xmm5, %xmm4, %xmm4
+	vmovdqu	%xmm4, (%rbp,%rcx,2)
+	addq	%rdi, %rcx
+	addq	$12, %rdx
+	cmpq	$248, %rcx
+	setbe	%dil
+	cmpq	$488, %rdx
+	setbe	%r8b
+	testb	%r8b, %dil
+L_rej_uniform_avx$7:
+	jne 	L_rej_uniform_avx$8
+	cmpq	$255, %rcx
+	setbe	%al
+	cmpq	$501, %rdx
+	setbe	%sil
+	testb	%sil, %al
+	jmp 	L_rej_uniform_avx$2
+L_rej_uniform_avx$3:
+	movzbw	(%r12,%rdx), %ax
+	incq	%rdx
+	movzbw	(%r12,%rdx), %di
+	incq	%rdx
+	movw	%di, %si
+	shlw	$8, %di
+	orw 	%di, %ax
+	andw	$4095, %ax
+	shrw	$4, %si
+	movzbw	(%r12,%rdx), %di
+	incq	%rdx
+	shlw	$4, %di
+	orw 	%di, %si
+	cmpw	$3329, %ax
+	jnb 	L_rej_uniform_avx$6
+	movw	%ax, (%rbp,%rcx,2)
+	incq	%rcx
+L_rej_uniform_avx$6:
+	cmpw	$3329, %si
+	jnb 	L_rej_uniform_avx$4
+	cmpq	$256, %rcx
+	jnb 	L_rej_uniform_avx$4
+	movw	%si, (%rbp,%rcx,2)
+	incq	%rcx
+L_rej_uniform_avx$5:
+L_rej_uniform_avx$4:
+	cmpq	$255, %rcx
+	setbe	%al
+	cmpq	$501, %rdx
+	setbe	%sil
+	testb	%sil, %al
+L_rej_uniform_avx$2:
+	jne 	L_rej_uniform_avx$3
+	ret
+L_poly_tomsg_1$1:
+	call	L_poly_csubq$1
+L_poly_tomsg_1$2:
+	leaq	glob_data + 256(%rip), %rsi
+	vmovdqu	(%rsi), %ymm0
+	leaq	glob_data + 224(%rip), %rsi
+	vmovdqu	(%rsi), %ymm1
+	vmovdqu	(%rcx), %ymm2
+	vmovdqu	32(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, (%rax)
+	vmovdqu	64(%rcx), %ymm2
+	vmovdqu	96(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, 4(%rax)
+	vmovdqu	128(%rcx), %ymm2
+	vmovdqu	160(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, 8(%rax)
+	vmovdqu	192(%rcx), %ymm2
+	vmovdqu	224(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, 12(%rax)
+	vmovdqu	256(%rcx), %ymm2
+	vmovdqu	288(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, 16(%rax)
+	vmovdqu	320(%rcx), %ymm2
+	vmovdqu	352(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, 20(%rax)
+	vmovdqu	384(%rcx), %ymm2
+	vmovdqu	416(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, 24(%rax)
+	vmovdqu	448(%rcx), %ymm2
+	vmovdqu	480(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm0
+	vpsraw	$15, %ymm2, %ymm3
+	vpsraw	$15, %ymm0, %ymm4
+	vpxor	%ymm3, %ymm2, %ymm2
+	vpxor	%ymm4, %ymm0, %ymm0
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vpacksswb	%ymm0, %ymm2, %ymm0
+	vpermq	$-40, %ymm0, %ymm0
+	vpmovmskb	%ymm0, %ecx
+	movl	%ecx, 28(%rax)
+	ret
+L_poly_tobytes$1:
+	leaq	glob_data + 480(%rip), %rsi
+	vmovdqu	(%rsi), %ymm0
+	vmovdqu	(%rdx), %ymm7
+	vmovdqu	32(%rdx), %ymm8
+	vmovdqu	64(%rdx), %ymm1
+	vmovdqu	96(%rdx), %ymm2
+	vmovdqu	128(%rdx), %ymm3
+	vmovdqu	160(%rdx), %ymm4
+	vmovdqu	192(%rdx), %ymm5
+	vmovdqu	224(%rdx), %ymm6
+	vpsubw	%ymm0, %ymm7, %ymm7
+	vpsraw	$15, %ymm7, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm9, %ymm7
+	vpsubw	%ymm0, %ymm8, %ymm8
+	vpsraw	$15, %ymm8, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm1, %ymm9, %ymm1
+	vpsubw	%ymm0, %ymm2, %ymm2
+	vpsraw	$15, %ymm2, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm2, %ymm9, %ymm2
+	vpsubw	%ymm0, %ymm3, %ymm3
+	vpsraw	$15, %ymm3, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm3, %ymm9, %ymm3
+	vpsubw	%ymm0, %ymm4, %ymm4
+	vpsraw	$15, %ymm4, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm4, %ymm9, %ymm4
+	vpsubw	%ymm0, %ymm5, %ymm5
+	vpsraw	$15, %ymm5, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm5, %ymm9, %ymm5
+	vpsubw	%ymm0, %ymm6, %ymm6
+	vpsraw	$15, %ymm6, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm6, %ymm9, %ymm6
+	vpsllw	$12, %ymm8, %ymm9
+	vpor	%ymm7, %ymm9, %ymm7
+	vpsrlw	$4, %ymm8, %ymm8
+	vpsllw	$8, %ymm1, %ymm9
+	vpor	%ymm9, %ymm8, %ymm8
+	vpsrlw	$8, %ymm1, %ymm1
+	vpsllw	$4, %ymm2, %ymm2
+	vpor	%ymm2, %ymm1, %ymm1
+	vpsllw	$12, %ymm4, %ymm2
+	vpor	%ymm3, %ymm2, %ymm2
+	vpsrlw	$4, %ymm4, %ymm3
+	vpsllw	$8, %ymm5, %ymm4
+	vpor	%ymm4, %ymm3, %ymm3
+	vpsrlw	$8, %ymm5, %ymm4
+	vpsllw	$4, %ymm6, %ymm5
+	vpor	%ymm5, %ymm4, %ymm4
+	vpslld	$16, %ymm8, %ymm5
+	vpblendw	$-86, %ymm5, %ymm7, %ymm5
+	vpsrld	$16, %ymm7, %ymm6
+	vpblendw	$-86, %ymm8, %ymm6, %ymm6
+	vpslld	$16, %ymm2, %ymm7
+	vpblendw	$-86, %ymm7, %ymm1, %ymm7
+	vpsrld	$16, %ymm1, %ymm1
+	vpblendw	$-86, %ymm2, %ymm1, %ymm1
+	vpslld	$16, %ymm4, %ymm2
+	vpblendw	$-86, %ymm2, %ymm3, %ymm8
+	vpsrld	$16, %ymm3, %ymm2
+	vpblendw	$-86, %ymm4, %ymm2, %ymm2
+	vmovsldup	%ymm7, %ymm3
+	vpblendd	$-86, %ymm3, %ymm5, %ymm3
+	vpsrlq	$32, %ymm5, %ymm4
+	vpblendd	$-86, %ymm7, %ymm4, %ymm4
+	vmovsldup	%ymm6, %ymm5
+	vpblendd	$-86, %ymm5, %ymm8, %ymm5
+	vpsrlq	$32, %ymm8, %ymm7
+	vpblendd	$-86, %ymm6, %ymm7, %ymm6
+	vmovsldup	%ymm2, %ymm7
+	vpblendd	$-86, %ymm7, %ymm1, %ymm7
+	vpsrlq	$32, %ymm1, %ymm1
+	vpblendd	$-86, %ymm2, %ymm1, %ymm1
+	vpunpcklqdq	%ymm5, %ymm3, %ymm2
+	vpunpckhqdq	%ymm5, %ymm3, %ymm3
+	vpunpcklqdq	%ymm4, %ymm7, %ymm5
+	vpunpckhqdq	%ymm4, %ymm7, %ymm4
+	vpunpcklqdq	%ymm1, %ymm6, %ymm7
+	vpunpckhqdq	%ymm1, %ymm6, %ymm1
+	vperm2i128	$32, %ymm5, %ymm2, %ymm6
+	vperm2i128	$49, %ymm5, %ymm2, %ymm2
+	vperm2i128	$32, %ymm3, %ymm7, %ymm5
+	vperm2i128	$49, %ymm3, %ymm7, %ymm3
+	vperm2i128	$32, %ymm1, %ymm4, %ymm7
+	vperm2i128	$49, %ymm1, %ymm4, %ymm1
+	vmovdqu	%ymm6, (%rcx)
+	vmovdqu	%ymm5, 32(%rcx)
+	vmovdqu	%ymm7, 64(%rcx)
+	vmovdqu	%ymm2, 96(%rcx)
+	vmovdqu	%ymm3, 128(%rcx)
+	vmovdqu	%ymm1, 160(%rcx)
+	vmovdqu	256(%rdx), %ymm7
+	vmovdqu	288(%rdx), %ymm8
+	vmovdqu	320(%rdx), %ymm1
+	vmovdqu	352(%rdx), %ymm2
+	vmovdqu	384(%rdx), %ymm3
+	vmovdqu	416(%rdx), %ymm4
+	vmovdqu	448(%rdx), %ymm5
+	vmovdqu	480(%rdx), %ymm6
+	vpsubw	%ymm0, %ymm7, %ymm7
+	vpsraw	$15, %ymm7, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm9, %ymm7
+	vpsubw	%ymm0, %ymm8, %ymm8
+	vpsraw	$15, %ymm8, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm1, %ymm9, %ymm1
+	vpsubw	%ymm0, %ymm2, %ymm2
+	vpsraw	$15, %ymm2, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm2, %ymm9, %ymm2
+	vpsubw	%ymm0, %ymm3, %ymm3
+	vpsraw	$15, %ymm3, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm3, %ymm9, %ymm3
+	vpsubw	%ymm0, %ymm4, %ymm4
+	vpsraw	$15, %ymm4, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm4, %ymm9, %ymm4
+	vpsubw	%ymm0, %ymm5, %ymm5
+	vpsraw	$15, %ymm5, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm5, %ymm9, %ymm5
+	vpsubw	%ymm0, %ymm6, %ymm6
+	vpsraw	$15, %ymm6, %ymm9
+	vpand	%ymm0, %ymm9, %ymm0
+	vpaddw	%ymm6, %ymm0, %ymm0
+	vpsllw	$12, %ymm8, %ymm6
+	vpor	%ymm7, %ymm6, %ymm6
+	vpsrlw	$4, %ymm8, %ymm7
+	vpsllw	$8, %ymm1, %ymm8
+	vpor	%ymm8, %ymm7, %ymm7
+	vpsrlw	$8, %ymm1, %ymm1
+	vpsllw	$4, %ymm2, %ymm2
+	vpor	%ymm2, %ymm1, %ymm1
+	vpsllw	$12, %ymm4, %ymm2
+	vpor	%ymm3, %ymm2, %ymm2
+	vpsrlw	$4, %ymm4, %ymm3
+	vpsllw	$8, %ymm5, %ymm4
+	vpor	%ymm4, %ymm3, %ymm3
+	vpsrlw	$8, %ymm5, %ymm4
+	vpsllw	$4, %ymm0, %ymm0
+	vpor	%ymm0, %ymm4, %ymm0
+	vpslld	$16, %ymm7, %ymm4
+	vpblendw	$-86, %ymm4, %ymm6, %ymm4
+	vpsrld	$16, %ymm6, %ymm5
+	vpblendw	$-86, %ymm7, %ymm5, %ymm5
+	vpslld	$16, %ymm2, %ymm6
+	vpblendw	$-86, %ymm6, %ymm1, %ymm6
+	vpsrld	$16, %ymm1, %ymm1
+	vpblendw	$-86, %ymm2, %ymm1, %ymm1
+	vpslld	$16, %ymm0, %ymm2
+	vpblendw	$-86, %ymm2, %ymm3, %ymm7
+	vpsrld	$16, %ymm3, %ymm2
+	vpblendw	$-86, %ymm0, %ymm2, %ymm0
+	vmovsldup	%ymm6, %ymm2
+	vpblendd	$-86, %ymm2, %ymm4, %ymm2
+	vpsrlq	$32, %ymm4, %ymm3
+	vpblendd	$-86, %ymm6, %ymm3, %ymm3
+	vmovsldup	%ymm5, %ymm4
+	vpblendd	$-86, %ymm4, %ymm7, %ymm4
+	vpsrlq	$32, %ymm7, %ymm6
+	vpblendd	$-86, %ymm5, %ymm6, %ymm5
+	vmovsldup	%ymm0, %ymm6
+	vpblendd	$-86, %ymm6, %ymm1, %ymm6
+	vpsrlq	$32, %ymm1, %ymm1
+	vpblendd	$-86, %ymm0, %ymm1, %ymm0
+	vpunpcklqdq	%ymm4, %ymm2, %ymm1
+	vpunpckhqdq	%ymm4, %ymm2, %ymm2
+	vpunpcklqdq	%ymm3, %ymm6, %ymm4
+	vpunpckhqdq	%ymm3, %ymm6, %ymm3
+	vpunpcklqdq	%ymm0, %ymm5, %ymm6
+	vpunpckhqdq	%ymm0, %ymm5, %ymm0
+	vperm2i128	$32, %ymm4, %ymm1, %ymm5
+	vperm2i128	$49, %ymm4, %ymm1, %ymm1
+	vperm2i128	$32, %ymm2, %ymm6, %ymm4
+	vperm2i128	$49, %ymm2, %ymm6, %ymm2
+	vperm2i128	$32, %ymm0, %ymm3, %ymm6
+	vperm2i128	$49, %ymm0, %ymm3, %ymm0
+	vmovdqu	%ymm5, 192(%rcx)
+	vmovdqu	%ymm4, 224(%rcx)
+	vmovdqu	%ymm6, 256(%rcx)
+	vmovdqu	%ymm1, 288(%rcx)
+	vmovdqu	%ymm2, 320(%rcx)
+	vmovdqu	%ymm0, 352(%rcx)
+	ret
+L_poly_sub$1:
+	vmovdqu	(%rsi), %ymm0
+	vmovdqu	(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, (%rcx)
+	vmovdqu	32(%rsi), %ymm0
+	vmovdqu	32(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rcx)
+	vmovdqu	64(%rsi), %ymm0
+	vmovdqu	64(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 64(%rcx)
+	vmovdqu	96(%rsi), %ymm0
+	vmovdqu	96(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 96(%rcx)
+	vmovdqu	128(%rsi), %ymm0
+	vmovdqu	128(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 128(%rcx)
+	vmovdqu	160(%rsi), %ymm0
+	vmovdqu	160(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 160(%rcx)
+	vmovdqu	192(%rsi), %ymm0
+	vmovdqu	192(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 192(%rcx)
+	vmovdqu	224(%rsi), %ymm0
+	vmovdqu	224(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 224(%rcx)
+	vmovdqu	256(%rsi), %ymm0
+	vmovdqu	256(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 256(%rcx)
+	vmovdqu	288(%rsi), %ymm0
+	vmovdqu	288(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 288(%rcx)
+	vmovdqu	320(%rsi), %ymm0
+	vmovdqu	320(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 320(%rcx)
+	vmovdqu	352(%rsi), %ymm0
+	vmovdqu	352(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 352(%rcx)
+	vmovdqu	384(%rsi), %ymm0
+	vmovdqu	384(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 384(%rcx)
+	vmovdqu	416(%rsi), %ymm0
+	vmovdqu	416(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 416(%rcx)
+	vmovdqu	448(%rsi), %ymm0
+	vmovdqu	448(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 448(%rcx)
+	vmovdqu	480(%rsi), %ymm0
+	vmovdqu	480(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 480(%rcx)
+	ret
+L_poly_ntt$1:
+	leaq	glob_data + 1312(%rip), %rsi
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vpbroadcastd	(%rsi), %ymm1
+	vpbroadcastd	4(%rsi), %ymm2
+	vmovdqu	(%rcx), %ymm3
+	vmovdqu	32(%rcx), %ymm14
+	vmovdqu	64(%rcx), %ymm4
+	vmovdqu	96(%rcx), %ymm5
+	vmovdqu	256(%rcx), %ymm6
+	vmovdqu	288(%rcx), %ymm7
+	vmovdqu	320(%rcx), %ymm12
+	vmovdqu	352(%rcx), %ymm8
+	vpmullw	%ymm6, %ymm1, %ymm9
+	vpmulhw	%ymm6, %ymm2, %ymm6
+	vpmullw	%ymm7, %ymm1, %ymm10
+	vpmulhw	%ymm7, %ymm2, %ymm15
+	vpmullw	%ymm12, %ymm1, %ymm11
+	vpmulhw	%ymm12, %ymm2, %ymm7
+	vpmullw	%ymm8, %ymm1, %ymm12
+	vpmulhw	%ymm8, %ymm2, %ymm8
+	vpmulhw	%ymm0, %ymm9, %ymm9
+	vpmulhw	%ymm0, %ymm10, %ymm10
+	vpmulhw	%ymm0, %ymm11, %ymm11
+	vpmulhw	%ymm0, %ymm12, %ymm12
+	vpsubw	%ymm15, %ymm14, %ymm13
+	vpaddw	%ymm14, %ymm15, %ymm14
+	vpsubw	%ymm6, %ymm3, %ymm15
+	vpaddw	%ymm3, %ymm6, %ymm3
+	vpsubw	%ymm8, %ymm5, %ymm6
+	vpaddw	%ymm5, %ymm8, %ymm5
+	vpsubw	%ymm7, %ymm4, %ymm8
+	vpaddw	%ymm4, %ymm7, %ymm4
+	vpaddw	%ymm15, %ymm9, %ymm7
+	vpsubw	%ymm9, %ymm3, %ymm3
+	vpaddw	%ymm13, %ymm10, %ymm9
+	vpsubw	%ymm10, %ymm14, %ymm10
+	vpaddw	%ymm8, %ymm11, %ymm8
+	vpsubw	%ymm11, %ymm4, %ymm4
+	vpaddw	%ymm6, %ymm12, %ymm6
+	vpsubw	%ymm12, %ymm5, %ymm5
+	vmovdqu	%ymm3, (%rcx)
+	vmovdqu	%ymm10, 32(%rcx)
+	vmovdqu	%ymm4, 64(%rcx)
+	vmovdqu	%ymm5, 96(%rcx)
+	vmovdqu	%ymm7, 256(%rcx)
+	vmovdqu	%ymm9, 288(%rcx)
+	vmovdqu	%ymm8, 320(%rcx)
+	vmovdqu	%ymm6, 352(%rcx)
+	vmovdqu	128(%rcx), %ymm3
+	vmovdqu	160(%rcx), %ymm12
+	vmovdqu	192(%rcx), %ymm4
+	vmovdqu	224(%rcx), %ymm5
+	vmovdqu	384(%rcx), %ymm6
+	vmovdqu	416(%rcx), %ymm7
+	vmovdqu	448(%rcx), %ymm10
+	vmovdqu	480(%rcx), %ymm11
+	vpmullw	%ymm6, %ymm1, %ymm14
+	vpmulhw	%ymm6, %ymm2, %ymm6
+	vpmullw	%ymm7, %ymm1, %ymm8
+	vpmulhw	%ymm7, %ymm2, %ymm13
+	vpmullw	%ymm10, %ymm1, %ymm9
+	vpmulhw	%ymm10, %ymm2, %ymm7
+	vpmullw	%ymm11, %ymm1, %ymm10
+	vpmulhw	%ymm11, %ymm2, %ymm1
+	vpmulhw	%ymm0, %ymm14, %ymm2
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm9, %ymm9
+	vpmulhw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm6, %ymm3, %ymm13
+	vpaddw	%ymm3, %ymm6, %ymm3
+	vpsubw	%ymm1, %ymm5, %ymm6
+	vpaddw	%ymm5, %ymm1, %ymm1
+	vpsubw	%ymm7, %ymm4, %ymm5
+	vpaddw	%ymm4, %ymm7, %ymm4
+	vpaddw	%ymm13, %ymm2, %ymm7
+	vpsubw	%ymm2, %ymm3, %ymm2
+	vpaddw	%ymm11, %ymm8, %ymm3
+	vpsubw	%ymm8, %ymm12, %ymm8
+	vpaddw	%ymm5, %ymm9, %ymm5
+	vpsubw	%ymm9, %ymm4, %ymm9
+	vpaddw	%ymm6, %ymm10, %ymm4
+	vpsubw	%ymm10, %ymm1, %ymm14
+	vmovdqu	%ymm7, 384(%rcx)
+	vmovdqu	%ymm3, 416(%rcx)
+	vmovdqu	%ymm5, 448(%rcx)
+	vmovdqu	%ymm4, 480(%rcx)
+	vpbroadcastd	8(%rsi), %ymm1
+	vpbroadcastd	12(%rsi), %ymm4
+	vmovdqu	%ymm8, %ymm10
+	vmovdqu	%ymm9, %ymm3
+	vmovdqu	(%rcx), %ymm6
+	vmovdqu	32(%rcx), %ymm5
+	vmovdqu	64(%rcx), %ymm9
+	vmovdqu	96(%rcx), %ymm7
+	vpmullw	%ymm2, %ymm1, %ymm11
+	vpmulhw	%ymm2, %ymm4, %ymm8
+	vpmullw	%ymm10, %ymm1, %ymm13
+	vpmulhw	%ymm10, %ymm4, %ymm12
+	vpmullw	%ymm3, %ymm1, %ymm2
+	vpmulhw	%ymm3, %ymm4, %ymm10
+	vpmullw	%ymm14, %ymm1, %ymm3
+	vpmulhw	%ymm14, %ymm4, %ymm14
+	vpmulhw	%ymm0, %ymm11, %ymm11
+	vpmulhw	%ymm0, %ymm13, %ymm1
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm12, %ymm5, %ymm4
+	vpaddw	%ymm5, %ymm12, %ymm5
+	vpsubw	%ymm8, %ymm6, %ymm12
+	vpaddw	%ymm6, %ymm8, %ymm13
+	vpsubw	%ymm14, %ymm7, %ymm6
+	vpaddw	%ymm7, %ymm14, %ymm7
+	vpsubw	%ymm10, %ymm9, %ymm8
+	vpaddw	%ymm9, %ymm10, %ymm9
+	vpaddw	%ymm12, %ymm11, %ymm10
+	vpsubw	%ymm11, %ymm13, %ymm12
+	vpaddw	%ymm4, %ymm1, %ymm4
+	vpsubw	%ymm1, %ymm5, %ymm5
+	vpaddw	%ymm8, %ymm2, %ymm8
+	vpsubw	%ymm2, %ymm9, %ymm2
+	vpaddw	%ymm6, %ymm3, %ymm13
+	vpsubw	%ymm3, %ymm7, %ymm7
+	vmovdqu	16(%rsi), %ymm3
+	vmovdqu	48(%rsi), %ymm6
+	vperm2i128	$32, %ymm10, %ymm12, %ymm11
+	vperm2i128	$49, %ymm10, %ymm12, %ymm9
+	vperm2i128	$32, %ymm4, %ymm5, %ymm1
+	vperm2i128	$49, %ymm4, %ymm5, %ymm12
+	vperm2i128	$32, %ymm8, %ymm2, %ymm5
+	vperm2i128	$49, %ymm8, %ymm2, %ymm8
+	vperm2i128	$32, %ymm13, %ymm7, %ymm2
+	vperm2i128	$49, %ymm13, %ymm7, %ymm13
+	vpmullw	%ymm5, %ymm3, %ymm4
+	vpmulhw	%ymm5, %ymm6, %ymm10
+	vpmullw	%ymm8, %ymm3, %ymm14
+	vpmulhw	%ymm8, %ymm6, %ymm8
+	vpmullw	%ymm2, %ymm3, %ymm5
+	vpmulhw	%ymm2, %ymm6, %ymm2
+	vpmullw	%ymm13, %ymm3, %ymm7
+	vpmulhw	%ymm13, %ymm6, %ymm13
+	vpmulhw	%ymm0, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm14, %ymm4
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm7, %ymm6
+	vpsubw	%ymm8, %ymm9, %ymm7
+	vpaddw	%ymm9, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm11, %ymm9
+	vpaddw	%ymm11, %ymm10, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm2, %ymm1, %ymm13
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vpaddw	%ymm9, %ymm3, %ymm2
+	vpsubw	%ymm3, %ymm10, %ymm9
+	vpaddw	%ymm7, %ymm4, %ymm3
+	vpsubw	%ymm4, %ymm8, %ymm4
+	vpaddw	%ymm13, %ymm5, %ymm7
+	vpsubw	%ymm5, %ymm1, %ymm13
+	vpaddw	%ymm11, %ymm6, %ymm11
+	vpsubw	%ymm6, %ymm12, %ymm14
+	vmovdqu	80(%rsi), %ymm1
+	vmovdqu	112(%rsi), %ymm10
+	vpunpcklqdq	%ymm2, %ymm9, %ymm5
+	vpunpckhqdq	%ymm2, %ymm9, %ymm12
+	vpunpcklqdq	%ymm3, %ymm4, %ymm8
+	vpunpckhqdq	%ymm3, %ymm4, %ymm6
+	vpunpcklqdq	%ymm7, %ymm13, %ymm2
+	vpunpckhqdq	%ymm7, %ymm13, %ymm4
+	vpunpcklqdq	%ymm11, %ymm14, %ymm3
+	vpunpckhqdq	%ymm11, %ymm14, %ymm7
+	vpmullw	%ymm2, %ymm1, %ymm11
+	vpmulhw	%ymm2, %ymm10, %ymm13
+	vpmullw	%ymm4, %ymm1, %ymm14
+	vpmulhw	%ymm4, %ymm10, %ymm4
+	vpmullw	%ymm3, %ymm1, %ymm2
+	vpmulhw	%ymm3, %ymm10, %ymm9
+	vpmullw	%ymm7, %ymm1, %ymm3
+	vpmulhw	%ymm7, %ymm10, %ymm7
+	vpmulhw	%ymm0, %ymm11, %ymm10
+	vpmulhw	%ymm0, %ymm14, %ymm1
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm4, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm4, %ymm4
+	vpsubw	%ymm13, %ymm5, %ymm12
+	vpaddw	%ymm5, %ymm13, %ymm13
+	vpsubw	%ymm7, %ymm6, %ymm5
+	vpaddw	%ymm6, %ymm7, %ymm6
+	vpsubw	%ymm9, %ymm8, %ymm7
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpaddw	%ymm12, %ymm10, %ymm9
+	vpsubw	%ymm10, %ymm13, %ymm12
+	vpaddw	%ymm11, %ymm1, %ymm10
+	vpsubw	%ymm1, %ymm4, %ymm4
+	vpaddw	%ymm7, %ymm2, %ymm7
+	vpsubw	%ymm2, %ymm8, %ymm2
+	vpaddw	%ymm5, %ymm3, %ymm13
+	vpsubw	%ymm3, %ymm6, %ymm6
+	vmovdqu	144(%rsi), %ymm3
+	vmovdqu	176(%rsi), %ymm5
+	vmovsldup	%ymm9, %ymm1
+	vpblendd	$-86, %ymm1, %ymm12, %ymm11
+	vpsrlq	$32, %ymm12, %ymm1
+	vpblendd	$-86, %ymm9, %ymm1, %ymm8
+	vmovsldup	%ymm10, %ymm1
+	vpblendd	$-86, %ymm1, %ymm4, %ymm1
+	vpsrlq	$32, %ymm4, %ymm4
+	vpblendd	$-86, %ymm10, %ymm4, %ymm12
+	vmovsldup	%ymm7, %ymm4
+	vpblendd	$-86, %ymm4, %ymm2, %ymm9
+	vpsrlq	$32, %ymm2, %ymm2
+	vpblendd	$-86, %ymm7, %ymm2, %ymm7
+	vmovsldup	%ymm13, %ymm2
+	vpblendd	$-86, %ymm2, %ymm6, %ymm2
+	vpsrlq	$32, %ymm6, %ymm4
+	vpblendd	$-86, %ymm13, %ymm4, %ymm13
+	vpmullw	%ymm9, %ymm3, %ymm4
+	vpmulhw	%ymm9, %ymm5, %ymm10
+	vpmullw	%ymm7, %ymm3, %ymm14
+	vpmulhw	%ymm7, %ymm5, %ymm9
+	vpmullw	%ymm2, %ymm3, %ymm6
+	vpmulhw	%ymm2, %ymm5, %ymm2
+	vpmullw	%ymm13, %ymm3, %ymm7
+	vpmulhw	%ymm13, %ymm5, %ymm13
+	vpmulhw	%ymm0, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm14, %ymm4
+	vpmulhw	%ymm0, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm7, %ymm6
+	vpsubw	%ymm9, %ymm8, %ymm7
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpsubw	%ymm10, %ymm11, %ymm9
+	vpaddw	%ymm11, %ymm10, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm2, %ymm1, %ymm13
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vpaddw	%ymm9, %ymm3, %ymm2
+	vpsubw	%ymm3, %ymm10, %ymm9
+	vpaddw	%ymm7, %ymm4, %ymm3
+	vpsubw	%ymm4, %ymm8, %ymm4
+	vpaddw	%ymm13, %ymm5, %ymm7
+	vpsubw	%ymm5, %ymm1, %ymm13
+	vpaddw	%ymm11, %ymm6, %ymm11
+	vpsubw	%ymm6, %ymm12, %ymm14
+	vmovdqu	208(%rsi), %ymm5
+	vmovdqu	240(%rsi), %ymm6
+	vpslld	$16, %ymm2, %ymm1
+	vpblendw	$-86, %ymm1, %ymm9, %ymm10
+	vpsrld	$16, %ymm9, %ymm1
+	vpblendw	$-86, %ymm2, %ymm1, %ymm8
+	vpslld	$16, %ymm3, %ymm1
+	vpblendw	$-86, %ymm1, %ymm4, %ymm1
+	vpsrld	$16, %ymm4, %ymm2
+	vpblendw	$-86, %ymm3, %ymm2, %ymm12
+	vpslld	$16, %ymm7, %ymm2
+	vpblendw	$-86, %ymm2, %ymm13, %ymm4
+	vpsrld	$16, %ymm13, %ymm2
+	vpblendw	$-86, %ymm7, %ymm2, %ymm7
+	vpslld	$16, %ymm11, %ymm2
+	vpblendw	$-86, %ymm2, %ymm14, %ymm2
+	vpsrld	$16, %ymm14, %ymm3
+	vpblendw	$-86, %ymm11, %ymm3, %ymm13
+	vpmullw	%ymm4, %ymm5, %ymm3
+	vpmulhw	%ymm4, %ymm6, %ymm11
+	vpmullw	%ymm7, %ymm5, %ymm4
+	vpmulhw	%ymm7, %ymm6, %ymm9
+	vpmullw	%ymm2, %ymm5, %ymm7
+	vpmulhw	%ymm2, %ymm6, %ymm2
+	vpmullw	%ymm13, %ymm5, %ymm14
+	vpmulhw	%ymm13, %ymm6, %ymm13
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm4, %ymm4
+	vpmulhw	%ymm0, %ymm7, %ymm5
+	vpmulhw	%ymm0, %ymm14, %ymm6
+	vpsubw	%ymm9, %ymm8, %ymm7
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpsubw	%ymm11, %ymm10, %ymm9
+	vpaddw	%ymm10, %ymm11, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm2, %ymm1, %ymm13
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vpaddw	%ymm9, %ymm3, %ymm2
+	vpsubw	%ymm3, %ymm10, %ymm3
+	vpaddw	%ymm7, %ymm4, %ymm7
+	vpsubw	%ymm4, %ymm8, %ymm4
+	vpaddw	%ymm13, %ymm5, %ymm8
+	vpsubw	%ymm5, %ymm1, %ymm1
+	vpaddw	%ymm11, %ymm6, %ymm5
+	vpsubw	%ymm6, %ymm12, %ymm10
+	vmovdqu	272(%rsi), %ymm9
+	vmovdqu	304(%rsi), %ymm13
+	vmovdqu	336(%rsi), %ymm11
+	vmovdqu	368(%rsi), %ymm6
+	vpmullw	%ymm1, %ymm9, %ymm14
+	vpmulhw	%ymm1, %ymm13, %ymm12
+	vpmullw	%ymm10, %ymm9, %ymm9
+	vpmulhw	%ymm10, %ymm13, %ymm13
+	vpmullw	%ymm8, %ymm11, %ymm10
+	vpmulhw	%ymm8, %ymm6, %ymm1
+	vpmullw	%ymm5, %ymm11, %ymm11
+	vpmulhw	%ymm5, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm14, %ymm6
+	vpmulhw	%ymm0, %ymm9, %ymm8
+	vpmulhw	%ymm0, %ymm10, %ymm9
+	vpmulhw	%ymm0, %ymm11, %ymm10
+	vpsubw	%ymm13, %ymm4, %ymm11
+	vpaddw	%ymm4, %ymm13, %ymm4
+	vpsubw	%ymm12, %ymm3, %ymm13
+	vpaddw	%ymm3, %ymm12, %ymm3
+	vpsubw	%ymm5, %ymm7, %ymm12
+	vpaddw	%ymm7, %ymm5, %ymm5
+	vpsubw	%ymm1, %ymm2, %ymm7
+	vpaddw	%ymm2, %ymm1, %ymm1
+	vpaddw	%ymm13, %ymm6, %ymm2
+	vpsubw	%ymm6, %ymm3, %ymm3
+	vpaddw	%ymm11, %ymm8, %ymm6
+	vpsubw	%ymm8, %ymm4, %ymm4
+	vpaddw	%ymm7, %ymm9, %ymm7
+	vpsubw	%ymm9, %ymm1, %ymm8
+	vpaddw	%ymm12, %ymm10, %ymm1
+	vpsubw	%ymm10, %ymm5, %ymm5
+	vmovdqu	glob_data + 416(%rip), %ymm9
+	vpmulhw	%ymm9, %ymm3, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm3, %ymm3
+	vpmulhw	%ymm9, %ymm4, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm4, %ymm4
+	vpmulhw	%ymm9, %ymm8, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm8, %ymm8
+	vpmulhw	%ymm9, %ymm5, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm5, %ymm5
+	vpmulhw	%ymm9, %ymm2, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm2, %ymm2
+	vpmulhw	%ymm9, %ymm6, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm6, %ymm6
+	vpmulhw	%ymm9, %ymm7, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm7, %ymm7
+	vpmulhw	%ymm9, %ymm1, %ymm9
+	vpsraw	$10, %ymm9, %ymm9
+	vpmullw	%ymm0, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm1, %ymm1
+	vmovdqu	%ymm3, (%rcx)
+	vmovdqu	%ymm4, 32(%rcx)
+	vmovdqu	%ymm2, 64(%rcx)
+	vmovdqu	%ymm6, 96(%rcx)
+	vmovdqu	%ymm8, 128(%rcx)
+	vmovdqu	%ymm5, 160(%rcx)
+	vmovdqu	%ymm7, 192(%rcx)
+	vmovdqu	%ymm1, 224(%rcx)
+	vpbroadcastd	400(%rsi), %ymm5
+	vpbroadcastd	404(%rsi), %ymm8
+	vmovdqu	384(%rcx), %ymm1
+	vmovdqu	416(%rcx), %ymm2
+	vmovdqu	448(%rcx), %ymm10
+	vmovdqu	480(%rcx), %ymm9
+	vmovdqu	256(%rcx), %ymm3
+	vmovdqu	288(%rcx), %ymm7
+	vmovdqu	320(%rcx), %ymm6
+	vmovdqu	352(%rcx), %ymm4
+	vpmullw	%ymm1, %ymm5, %ymm14
+	vpmulhw	%ymm1, %ymm8, %ymm12
+	vpmullw	%ymm2, %ymm5, %ymm1
+	vpmulhw	%ymm2, %ymm8, %ymm11
+	vpmullw	%ymm10, %ymm5, %ymm2
+	vpmulhw	%ymm10, %ymm8, %ymm13
+	vpmullw	%ymm9, %ymm5, %ymm10
+	vpmulhw	%ymm9, %ymm8, %ymm5
+	vpmulhw	%ymm0, %ymm14, %ymm8
+	vpmulhw	%ymm0, %ymm1, %ymm9
+	vpmulhw	%ymm0, %ymm2, %ymm1
+	vpmulhw	%ymm0, %ymm10, %ymm2
+	vpsubw	%ymm11, %ymm7, %ymm10
+	vpaddw	%ymm7, %ymm11, %ymm11
+	vpsubw	%ymm12, %ymm3, %ymm7
+	vpaddw	%ymm3, %ymm12, %ymm12
+	vpsubw	%ymm5, %ymm4, %ymm3
+	vpaddw	%ymm4, %ymm5, %ymm4
+	vpsubw	%ymm13, %ymm6, %ymm5
+	vpaddw	%ymm6, %ymm13, %ymm6
+	vpaddw	%ymm7, %ymm8, %ymm7
+	vpsubw	%ymm8, %ymm12, %ymm12
+	vpaddw	%ymm10, %ymm9, %ymm8
+	vpsubw	%ymm9, %ymm11, %ymm9
+	vpaddw	%ymm5, %ymm1, %ymm5
+	vpsubw	%ymm1, %ymm6, %ymm6
+	vpaddw	%ymm3, %ymm2, %ymm13
+	vpsubw	%ymm2, %ymm4, %ymm2
+	vmovdqu	408(%rsi), %ymm3
+	vmovdqu	440(%rsi), %ymm4
+	vperm2i128	$32, %ymm7, %ymm12, %ymm10
+	vperm2i128	$49, %ymm7, %ymm12, %ymm11
+	vperm2i128	$32, %ymm8, %ymm9, %ymm1
+	vperm2i128	$49, %ymm8, %ymm9, %ymm12
+	vperm2i128	$32, %ymm5, %ymm6, %ymm8
+	vperm2i128	$49, %ymm5, %ymm6, %ymm5
+	vperm2i128	$32, %ymm13, %ymm2, %ymm6
+	vperm2i128	$49, %ymm13, %ymm2, %ymm13
+	vpmullw	%ymm8, %ymm3, %ymm7
+	vpmulhw	%ymm8, %ymm4, %ymm14
+	vpmullw	%ymm5, %ymm3, %ymm9
+	vpmulhw	%ymm5, %ymm4, %ymm8
+	vpmullw	%ymm6, %ymm3, %ymm5
+	vpmulhw	%ymm6, %ymm4, %ymm2
+	vpmullw	%ymm13, %ymm3, %ymm6
+	vpmulhw	%ymm13, %ymm4, %ymm13
+	vpmulhw	%ymm0, %ymm7, %ymm3
+	vpmulhw	%ymm0, %ymm9, %ymm4
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm8, %ymm11, %ymm7
+	vpaddw	%ymm11, %ymm8, %ymm8
+	vpsubw	%ymm14, %ymm10, %ymm9
+	vpaddw	%ymm10, %ymm14, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm2, %ymm1, %ymm13
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vpaddw	%ymm9, %ymm3, %ymm2
+	vpsubw	%ymm3, %ymm10, %ymm9
+	vpaddw	%ymm7, %ymm4, %ymm3
+	vpsubw	%ymm4, %ymm8, %ymm4
+	vpaddw	%ymm13, %ymm5, %ymm7
+	vpsubw	%ymm5, %ymm1, %ymm13
+	vpaddw	%ymm11, %ymm6, %ymm11
+	vpsubw	%ymm6, %ymm12, %ymm14
+	vmovdqu	472(%rsi), %ymm1
+	vmovdqu	504(%rsi), %ymm10
+	vpunpcklqdq	%ymm2, %ymm9, %ymm5
+	vpunpckhqdq	%ymm2, %ymm9, %ymm12
+	vpunpcklqdq	%ymm3, %ymm4, %ymm8
+	vpunpckhqdq	%ymm3, %ymm4, %ymm6
+	vpunpcklqdq	%ymm7, %ymm13, %ymm2
+	vpunpckhqdq	%ymm7, %ymm13, %ymm4
+	vpunpcklqdq	%ymm11, %ymm14, %ymm3
+	vpunpckhqdq	%ymm11, %ymm14, %ymm7
+	vpmullw	%ymm2, %ymm1, %ymm11
+	vpmulhw	%ymm2, %ymm10, %ymm13
+	vpmullw	%ymm4, %ymm1, %ymm14
+	vpmulhw	%ymm4, %ymm10, %ymm4
+	vpmullw	%ymm3, %ymm1, %ymm2
+	vpmulhw	%ymm3, %ymm10, %ymm9
+	vpmullw	%ymm7, %ymm1, %ymm3
+	vpmulhw	%ymm7, %ymm10, %ymm7
+	vpmulhw	%ymm0, %ymm11, %ymm10
+	vpmulhw	%ymm0, %ymm14, %ymm1
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm4, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm4, %ymm4
+	vpsubw	%ymm13, %ymm5, %ymm12
+	vpaddw	%ymm5, %ymm13, %ymm13
+	vpsubw	%ymm7, %ymm6, %ymm5
+	vpaddw	%ymm6, %ymm7, %ymm6
+	vpsubw	%ymm9, %ymm8, %ymm7
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpaddw	%ymm12, %ymm10, %ymm9
+	vpsubw	%ymm10, %ymm13, %ymm12
+	vpaddw	%ymm11, %ymm1, %ymm10
+	vpsubw	%ymm1, %ymm4, %ymm4
+	vpaddw	%ymm7, %ymm2, %ymm7
+	vpsubw	%ymm2, %ymm8, %ymm2
+	vpaddw	%ymm5, %ymm3, %ymm13
+	vpsubw	%ymm3, %ymm6, %ymm6
+	vmovdqu	536(%rsi), %ymm3
+	vmovdqu	568(%rsi), %ymm5
+	vmovsldup	%ymm9, %ymm1
+	vpblendd	$-86, %ymm1, %ymm12, %ymm11
+	vpsrlq	$32, %ymm12, %ymm1
+	vpblendd	$-86, %ymm9, %ymm1, %ymm8
+	vmovsldup	%ymm10, %ymm1
+	vpblendd	$-86, %ymm1, %ymm4, %ymm1
+	vpsrlq	$32, %ymm4, %ymm4
+	vpblendd	$-86, %ymm10, %ymm4, %ymm12
+	vmovsldup	%ymm7, %ymm4
+	vpblendd	$-86, %ymm4, %ymm2, %ymm9
+	vpsrlq	$32, %ymm2, %ymm2
+	vpblendd	$-86, %ymm7, %ymm2, %ymm7
+	vmovsldup	%ymm13, %ymm2
+	vpblendd	$-86, %ymm2, %ymm6, %ymm2
+	vpsrlq	$32, %ymm6, %ymm4
+	vpblendd	$-86, %ymm13, %ymm4, %ymm13
+	vpmullw	%ymm9, %ymm3, %ymm4
+	vpmulhw	%ymm9, %ymm5, %ymm10
+	vpmullw	%ymm7, %ymm3, %ymm14
+	vpmulhw	%ymm7, %ymm5, %ymm9
+	vpmullw	%ymm2, %ymm3, %ymm6
+	vpmulhw	%ymm2, %ymm5, %ymm2
+	vpmullw	%ymm13, %ymm3, %ymm7
+	vpmulhw	%ymm13, %ymm5, %ymm13
+	vpmulhw	%ymm0, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm14, %ymm4
+	vpmulhw	%ymm0, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm7, %ymm6
+	vpsubw	%ymm9, %ymm8, %ymm7
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpsubw	%ymm10, %ymm11, %ymm9
+	vpaddw	%ymm11, %ymm10, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm2, %ymm1, %ymm13
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vpaddw	%ymm9, %ymm3, %ymm2
+	vpsubw	%ymm3, %ymm10, %ymm9
+	vpaddw	%ymm7, %ymm4, %ymm3
+	vpsubw	%ymm4, %ymm8, %ymm4
+	vpaddw	%ymm13, %ymm5, %ymm7
+	vpsubw	%ymm5, %ymm1, %ymm13
+	vpaddw	%ymm11, %ymm6, %ymm11
+	vpsubw	%ymm6, %ymm12, %ymm14
+	vmovdqu	600(%rsi), %ymm5
+	vmovdqu	632(%rsi), %ymm6
+	vpslld	$16, %ymm2, %ymm1
+	vpblendw	$-86, %ymm1, %ymm9, %ymm10
+	vpsrld	$16, %ymm9, %ymm1
+	vpblendw	$-86, %ymm2, %ymm1, %ymm8
+	vpslld	$16, %ymm3, %ymm1
+	vpblendw	$-86, %ymm1, %ymm4, %ymm1
+	vpsrld	$16, %ymm4, %ymm2
+	vpblendw	$-86, %ymm3, %ymm2, %ymm12
+	vpslld	$16, %ymm7, %ymm2
+	vpblendw	$-86, %ymm2, %ymm13, %ymm4
+	vpsrld	$16, %ymm13, %ymm2
+	vpblendw	$-86, %ymm7, %ymm2, %ymm7
+	vpslld	$16, %ymm11, %ymm2
+	vpblendw	$-86, %ymm2, %ymm14, %ymm2
+	vpsrld	$16, %ymm14, %ymm3
+	vpblendw	$-86, %ymm11, %ymm3, %ymm13
+	vpmullw	%ymm4, %ymm5, %ymm3
+	vpmulhw	%ymm4, %ymm6, %ymm11
+	vpmullw	%ymm7, %ymm5, %ymm4
+	vpmulhw	%ymm7, %ymm6, %ymm9
+	vpmullw	%ymm2, %ymm5, %ymm7
+	vpmulhw	%ymm2, %ymm6, %ymm2
+	vpmullw	%ymm13, %ymm5, %ymm14
+	vpmulhw	%ymm13, %ymm6, %ymm13
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm4, %ymm4
+	vpmulhw	%ymm0, %ymm7, %ymm5
+	vpmulhw	%ymm0, %ymm14, %ymm6
+	vpsubw	%ymm9, %ymm8, %ymm7
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpsubw	%ymm11, %ymm10, %ymm9
+	vpaddw	%ymm10, %ymm11, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm2, %ymm1, %ymm13
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vpaddw	%ymm9, %ymm3, %ymm2
+	vpsubw	%ymm3, %ymm10, %ymm3
+	vpaddw	%ymm7, %ymm4, %ymm7
+	vpsubw	%ymm4, %ymm8, %ymm4
+	vpaddw	%ymm13, %ymm5, %ymm8
+	vpsubw	%ymm5, %ymm1, %ymm1
+	vpaddw	%ymm11, %ymm6, %ymm5
+	vpsubw	%ymm6, %ymm12, %ymm10
+	vmovdqu	664(%rsi), %ymm9
+	vmovdqu	696(%rsi), %ymm13
+	vmovdqu	728(%rsi), %ymm11
+	vmovdqu	760(%rsi), %ymm6
+	vpmullw	%ymm1, %ymm9, %ymm14
+	vpmulhw	%ymm1, %ymm13, %ymm12
+	vpmullw	%ymm10, %ymm9, %ymm9
+	vpmulhw	%ymm10, %ymm13, %ymm13
+	vpmullw	%ymm8, %ymm11, %ymm10
+	vpmulhw	%ymm8, %ymm6, %ymm1
+	vpmullw	%ymm5, %ymm11, %ymm11
+	vpmulhw	%ymm5, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm14, %ymm6
+	vpmulhw	%ymm0, %ymm9, %ymm8
+	vpmulhw	%ymm0, %ymm10, %ymm9
+	vpmulhw	%ymm0, %ymm11, %ymm10
+	vpsubw	%ymm13, %ymm4, %ymm11
+	vpaddw	%ymm4, %ymm13, %ymm4
+	vpsubw	%ymm12, %ymm3, %ymm13
+	vpaddw	%ymm3, %ymm12, %ymm3
+	vpsubw	%ymm5, %ymm7, %ymm12
+	vpaddw	%ymm7, %ymm5, %ymm5
+	vpsubw	%ymm1, %ymm2, %ymm7
+	vpaddw	%ymm2, %ymm1, %ymm1
+	vpaddw	%ymm13, %ymm6, %ymm2
+	vpsubw	%ymm6, %ymm3, %ymm3
+	vpaddw	%ymm11, %ymm8, %ymm6
+	vpsubw	%ymm8, %ymm4, %ymm4
+	vpaddw	%ymm7, %ymm9, %ymm7
+	vpsubw	%ymm9, %ymm1, %ymm8
+	vpaddw	%ymm12, %ymm10, %ymm1
+	vpsubw	%ymm10, %ymm5, %ymm5
+	vmovdqu	glob_data + 416(%rip), %ymm9
+	vpmulhw	%ymm9, %ymm3, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm3, %ymm3
+	vpmulhw	%ymm9, %ymm4, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm4, %ymm4
+	vpmulhw	%ymm9, %ymm8, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm8, %ymm8
+	vpmulhw	%ymm9, %ymm5, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm5, %ymm5
+	vpmulhw	%ymm9, %ymm2, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm2, %ymm2
+	vpmulhw	%ymm9, %ymm6, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm6, %ymm6
+	vpmulhw	%ymm9, %ymm7, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm7, %ymm7
+	vpmulhw	%ymm9, %ymm1, %ymm9
+	vpsraw	$10, %ymm9, %ymm9
+	vpmullw	%ymm0, %ymm9, %ymm0
+	vpsubw	%ymm0, %ymm1, %ymm0
+	vmovdqu	%ymm3, 256(%rcx)
+	vmovdqu	%ymm4, 288(%rcx)
+	vmovdqu	%ymm2, 320(%rcx)
+	vmovdqu	%ymm6, 352(%rcx)
+	vmovdqu	%ymm8, 384(%rcx)
+	vmovdqu	%ymm5, 416(%rcx)
+	vmovdqu	%ymm7, 448(%rcx)
+	vmovdqu	%ymm0, 480(%rcx)
+	ret
+L_poly_invntt$1:
+	leaq	glob_data + 512(%rip), %rsi
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vmovdqu	(%rsi), %ymm12
+	vmovdqu	64(%rsi), %ymm1
+	vmovdqu	32(%rsi), %ymm2
+	vmovdqu	96(%rsi), %ymm5
+	vmovdqu	(%rcx), %ymm3
+	vmovdqu	32(%rcx), %ymm4
+	vmovdqu	64(%rcx), %ymm15
+	vmovdqu	96(%rcx), %ymm11
+	vmovdqu	128(%rcx), %ymm7
+	vmovdqu	160(%rcx), %ymm8
+	vmovdqu	192(%rcx), %ymm13
+	vmovdqu	224(%rcx), %ymm14
+	vpsubw	%ymm15, %ymm3, %ymm6
+	vpsubw	%ymm11, %ymm4, %ymm9
+	vpsubw	%ymm13, %ymm7, %ymm10
+	vpaddw	%ymm3, %ymm15, %ymm3
+	vpaddw	%ymm4, %ymm11, %ymm4
+	vpmullw	%ymm6, %ymm12, %ymm11
+	vpaddw	%ymm7, %ymm13, %ymm7
+	vpmullw	%ymm9, %ymm12, %ymm12
+	vpsubw	%ymm14, %ymm8, %ymm13
+	vpaddw	%ymm8, %ymm14, %ymm8
+	vpmullw	%ymm10, %ymm1, %ymm14
+	vpmullw	%ymm13, %ymm1, %ymm1
+	vpmulhw	%ymm6, %ymm2, %ymm6
+	vpmulhw	%ymm9, %ymm2, %ymm2
+	vpmulhw	%ymm10, %ymm5, %ymm9
+	vpmulhw	%ymm13, %ymm5, %ymm5
+	vpmulhw	%ymm11, %ymm0, %ymm10
+	vpmulhw	%ymm12, %ymm0, %ymm11
+	vpmulhw	%ymm14, %ymm0, %ymm12
+	vpmulhw	%ymm1, %ymm0, %ymm1
+	vpsubw	%ymm10, %ymm6, %ymm6
+	vpsubw	%ymm11, %ymm2, %ymm11
+	vpsubw	%ymm12, %ymm9, %ymm9
+	vpsubw	%ymm1, %ymm5, %ymm13
+	vmovdqu	glob_data + 416(%rip), %ymm1
+	vmovdqu	128(%rsi), %ymm2
+	vmovdqu	160(%rsi), %ymm5
+	vpmulhw	%ymm1, %ymm3, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm3, %ymm10
+	vpmulhw	%ymm1, %ymm4, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm12
+	vpmulhw	%ymm1, %ymm7, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm7, %ymm7
+	vpmulhw	%ymm1, %ymm8, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm8, %ymm8
+	vpsubw	%ymm7, %ymm10, %ymm15
+	vpsubw	%ymm8, %ymm12, %ymm3
+	vpsubw	%ymm9, %ymm6, %ymm4
+	vpaddw	%ymm10, %ymm7, %ymm7
+	vpaddw	%ymm12, %ymm8, %ymm8
+	vpmullw	%ymm15, %ymm2, %ymm10
+	vpaddw	%ymm6, %ymm9, %ymm9
+	vpmullw	%ymm3, %ymm2, %ymm6
+	vpsubw	%ymm13, %ymm11, %ymm12
+	vpaddw	%ymm11, %ymm13, %ymm11
+	vpmullw	%ymm4, %ymm2, %ymm13
+	vpmullw	%ymm12, %ymm2, %ymm14
+	vpmulhw	%ymm15, %ymm5, %ymm2
+	vpmulhw	%ymm3, %ymm5, %ymm3
+	vpmulhw	%ymm4, %ymm5, %ymm4
+	vpmulhw	%ymm12, %ymm5, %ymm5
+	vpmulhw	%ymm10, %ymm0, %ymm10
+	vpmulhw	%ymm6, %ymm0, %ymm12
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm14, %ymm0, %ymm6
+	vpsubw	%ymm10, %ymm2, %ymm2
+	vpsubw	%ymm12, %ymm3, %ymm3
+	vpsubw	%ymm13, %ymm4, %ymm4
+	vpsubw	%ymm6, %ymm5, %ymm5
+	vpslld	$16, %ymm8, %ymm6
+	vpblendw	$-86, %ymm6, %ymm7, %ymm6
+	vpsrld	$16, %ymm7, %ymm7
+	vpblendw	$-86, %ymm8, %ymm7, %ymm7
+	vpslld	$16, %ymm11, %ymm8
+	vpblendw	$-86, %ymm8, %ymm9, %ymm10
+	vpsrld	$16, %ymm9, %ymm8
+	vpblendw	$-86, %ymm11, %ymm8, %ymm11
+	vpslld	$16, %ymm3, %ymm8
+	vpblendw	$-86, %ymm8, %ymm2, %ymm8
+	vpsrld	$16, %ymm2, %ymm2
+	vpblendw	$-86, %ymm3, %ymm2, %ymm9
+	vpslld	$16, %ymm5, %ymm2
+	vpblendw	$-86, %ymm2, %ymm4, %ymm12
+	vpsrld	$16, %ymm4, %ymm2
+	vpblendw	$-86, %ymm5, %ymm2, %ymm13
+	vmovdqu	192(%rsi), %ymm2
+	vmovdqu	224(%rsi), %ymm5
+	vpsubw	%ymm7, %ymm6, %ymm15
+	vpsubw	%ymm11, %ymm10, %ymm3
+	vpsubw	%ymm9, %ymm8, %ymm4
+	vpaddw	%ymm6, %ymm7, %ymm6
+	vpaddw	%ymm10, %ymm11, %ymm7
+	vpmullw	%ymm15, %ymm2, %ymm10
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpmullw	%ymm3, %ymm2, %ymm9
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpmullw	%ymm4, %ymm2, %ymm13
+	vpmullw	%ymm11, %ymm2, %ymm14
+	vpmulhw	%ymm15, %ymm5, %ymm2
+	vpmulhw	%ymm3, %ymm5, %ymm3
+	vpmulhw	%ymm4, %ymm5, %ymm4
+	vpmulhw	%ymm11, %ymm5, %ymm5
+	vpmulhw	%ymm10, %ymm0, %ymm10
+	vpmulhw	%ymm9, %ymm0, %ymm11
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm14, %ymm0, %ymm9
+	vpsubw	%ymm10, %ymm2, %ymm2
+	vpsubw	%ymm11, %ymm3, %ymm3
+	vpsubw	%ymm13, %ymm4, %ymm4
+	vpsubw	%ymm9, %ymm5, %ymm5
+	vpmulhw	%ymm1, %ymm6, %ymm9
+	vpsraw	$10, %ymm9, %ymm9
+	vpmullw	%ymm0, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm6, %ymm6
+	vmovsldup	%ymm7, %ymm9
+	vpblendd	$-86, %ymm9, %ymm6, %ymm9
+	vpsrlq	$32, %ymm6, %ymm6
+	vpblendd	$-86, %ymm7, %ymm6, %ymm10
+	vmovsldup	%ymm12, %ymm6
+	vpblendd	$-86, %ymm6, %ymm8, %ymm11
+	vpsrlq	$32, %ymm8, %ymm6
+	vpblendd	$-86, %ymm12, %ymm6, %ymm14
+	vmovsldup	%ymm3, %ymm6
+	vpblendd	$-86, %ymm6, %ymm2, %ymm12
+	vpsrlq	$32, %ymm2, %ymm2
+	vpblendd	$-86, %ymm3, %ymm2, %ymm13
+	vmovsldup	%ymm5, %ymm2
+	vpblendd	$-86, %ymm2, %ymm4, %ymm2
+	vpsrlq	$32, %ymm4, %ymm3
+	vpblendd	$-86, %ymm5, %ymm3, %ymm3
+	vmovdqu	256(%rsi), %ymm4
+	vmovdqu	288(%rsi), %ymm5
+	vpsubw	%ymm10, %ymm9, %ymm6
+	vpsubw	%ymm14, %ymm11, %ymm7
+	vpsubw	%ymm13, %ymm12, %ymm8
+	vpaddw	%ymm9, %ymm10, %ymm9
+	vpaddw	%ymm11, %ymm14, %ymm10
+	vpmullw	%ymm6, %ymm4, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpmullw	%ymm7, %ymm4, %ymm13
+	vpsubw	%ymm3, %ymm2, %ymm14
+	vpaddw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm8, %ymm4, %ymm3
+	vpmullw	%ymm14, %ymm4, %ymm4
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpmulhw	%ymm7, %ymm5, %ymm7
+	vpmulhw	%ymm8, %ymm5, %ymm8
+	vpmulhw	%ymm14, %ymm5, %ymm5
+	vpmulhw	%ymm11, %ymm0, %ymm11
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm3, %ymm0, %ymm3
+	vpmulhw	%ymm4, %ymm0, %ymm4
+	vpsubw	%ymm11, %ymm6, %ymm6
+	vpsubw	%ymm13, %ymm7, %ymm7
+	vpsubw	%ymm3, %ymm8, %ymm3
+	vpsubw	%ymm4, %ymm5, %ymm4
+	vpmulhw	%ymm1, %ymm9, %ymm5
+	vpsraw	$10, %ymm5, %ymm5
+	vpmullw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm9, %ymm8
+	vpunpcklqdq	%ymm10, %ymm8, %ymm5
+	vpunpckhqdq	%ymm10, %ymm8, %ymm8
+	vpunpcklqdq	%ymm2, %ymm12, %ymm9
+	vpunpckhqdq	%ymm2, %ymm12, %ymm2
+	vpunpcklqdq	%ymm7, %ymm6, %ymm10
+	vpunpckhqdq	%ymm7, %ymm6, %ymm6
+	vpunpcklqdq	%ymm4, %ymm3, %ymm7
+	vpunpckhqdq	%ymm4, %ymm3, %ymm3
+	vmovdqu	320(%rsi), %ymm4
+	vmovdqu	352(%rsi), %ymm11
+	vpsubw	%ymm8, %ymm5, %ymm12
+	vpsubw	%ymm2, %ymm9, %ymm13
+	vpsubw	%ymm6, %ymm10, %ymm14
+	vpaddw	%ymm5, %ymm8, %ymm5
+	vpaddw	%ymm9, %ymm2, %ymm2
+	vpmullw	%ymm12, %ymm4, %ymm8
+	vpaddw	%ymm10, %ymm6, %ymm6
+	vpmullw	%ymm13, %ymm4, %ymm9
+	vpsubw	%ymm3, %ymm7, %ymm10
+	vpaddw	%ymm7, %ymm3, %ymm3
+	vpmullw	%ymm14, %ymm4, %ymm7
+	vpmullw	%ymm10, %ymm4, %ymm4
+	vpmulhw	%ymm12, %ymm11, %ymm12
+	vpmulhw	%ymm13, %ymm11, %ymm13
+	vpmulhw	%ymm14, %ymm11, %ymm14
+	vpmulhw	%ymm10, %ymm11, %ymm10
+	vpmulhw	%ymm8, %ymm0, %ymm8
+	vpmulhw	%ymm9, %ymm0, %ymm9
+	vpmulhw	%ymm7, %ymm0, %ymm7
+	vpmulhw	%ymm4, %ymm0, %ymm4
+	vpsubw	%ymm8, %ymm12, %ymm8
+	vpsubw	%ymm9, %ymm13, %ymm9
+	vpsubw	%ymm7, %ymm14, %ymm7
+	vpsubw	%ymm4, %ymm10, %ymm4
+	vpmulhw	%ymm1, %ymm5, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm5, %ymm10
+	vperm2i128	$32, %ymm2, %ymm10, %ymm5
+	vperm2i128	$49, %ymm2, %ymm10, %ymm2
+	vperm2i128	$32, %ymm3, %ymm6, %ymm10
+	vperm2i128	$49, %ymm3, %ymm6, %ymm3
+	vperm2i128	$32, %ymm9, %ymm8, %ymm6
+	vperm2i128	$49, %ymm9, %ymm8, %ymm8
+	vperm2i128	$32, %ymm4, %ymm7, %ymm9
+	vperm2i128	$49, %ymm4, %ymm7, %ymm4
+	vpbroadcastd	384(%rsi), %ymm7
+	vpbroadcastd	388(%rsi), %ymm11
+	vpsubw	%ymm2, %ymm5, %ymm12
+	vpsubw	%ymm3, %ymm10, %ymm13
+	vpsubw	%ymm8, %ymm6, %ymm14
+	vpaddw	%ymm5, %ymm2, %ymm2
+	vpaddw	%ymm10, %ymm3, %ymm3
+	vpmullw	%ymm12, %ymm7, %ymm5
+	vpaddw	%ymm6, %ymm8, %ymm6
+	vpmullw	%ymm13, %ymm7, %ymm8
+	vpsubw	%ymm4, %ymm9, %ymm10
+	vpaddw	%ymm9, %ymm4, %ymm4
+	vpmullw	%ymm14, %ymm7, %ymm9
+	vpmullw	%ymm10, %ymm7, %ymm7
+	vpmulhw	%ymm12, %ymm11, %ymm12
+	vpmulhw	%ymm13, %ymm11, %ymm13
+	vpmulhw	%ymm14, %ymm11, %ymm14
+	vpmulhw	%ymm10, %ymm11, %ymm10
+	vpmulhw	%ymm5, %ymm0, %ymm5
+	vpmulhw	%ymm8, %ymm0, %ymm8
+	vpmulhw	%ymm9, %ymm0, %ymm9
+	vpmulhw	%ymm7, %ymm0, %ymm7
+	vpsubw	%ymm5, %ymm12, %ymm5
+	vpsubw	%ymm8, %ymm13, %ymm8
+	vpsubw	%ymm9, %ymm14, %ymm9
+	vpsubw	%ymm7, %ymm10, %ymm7
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm1
+	vpsubw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, (%rcx)
+	vmovdqu	%ymm3, 32(%rcx)
+	vmovdqu	%ymm6, 64(%rcx)
+	vmovdqu	%ymm4, 96(%rcx)
+	vmovdqu	%ymm5, 128(%rcx)
+	vmovdqu	%ymm8, 160(%rcx)
+	vmovdqu	%ymm9, 192(%rcx)
+	vmovdqu	%ymm7, 224(%rcx)
+	vmovdqu	392(%rsi), %ymm12
+	vmovdqu	456(%rsi), %ymm1
+	vmovdqu	424(%rsi), %ymm2
+	vmovdqu	488(%rsi), %ymm5
+	vmovdqu	256(%rcx), %ymm3
+	vmovdqu	288(%rcx), %ymm4
+	vmovdqu	320(%rcx), %ymm15
+	vmovdqu	352(%rcx), %ymm11
+	vmovdqu	384(%rcx), %ymm7
+	vmovdqu	416(%rcx), %ymm8
+	vmovdqu	448(%rcx), %ymm13
+	vmovdqu	480(%rcx), %ymm14
+	vpsubw	%ymm15, %ymm3, %ymm6
+	vpsubw	%ymm11, %ymm4, %ymm9
+	vpsubw	%ymm13, %ymm7, %ymm10
+	vpaddw	%ymm3, %ymm15, %ymm3
+	vpaddw	%ymm4, %ymm11, %ymm4
+	vpmullw	%ymm6, %ymm12, %ymm11
+	vpaddw	%ymm7, %ymm13, %ymm7
+	vpmullw	%ymm9, %ymm12, %ymm12
+	vpsubw	%ymm14, %ymm8, %ymm13
+	vpaddw	%ymm8, %ymm14, %ymm8
+	vpmullw	%ymm10, %ymm1, %ymm14
+	vpmullw	%ymm13, %ymm1, %ymm1
+	vpmulhw	%ymm6, %ymm2, %ymm6
+	vpmulhw	%ymm9, %ymm2, %ymm2
+	vpmulhw	%ymm10, %ymm5, %ymm9
+	vpmulhw	%ymm13, %ymm5, %ymm5
+	vpmulhw	%ymm11, %ymm0, %ymm10
+	vpmulhw	%ymm12, %ymm0, %ymm11
+	vpmulhw	%ymm14, %ymm0, %ymm12
+	vpmulhw	%ymm1, %ymm0, %ymm1
+	vpsubw	%ymm10, %ymm6, %ymm6
+	vpsubw	%ymm11, %ymm2, %ymm11
+	vpsubw	%ymm12, %ymm9, %ymm9
+	vpsubw	%ymm1, %ymm5, %ymm13
+	vmovdqu	glob_data + 416(%rip), %ymm1
+	vmovdqu	520(%rsi), %ymm2
+	vmovdqu	552(%rsi), %ymm5
+	vpmulhw	%ymm1, %ymm3, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm3, %ymm10
+	vpmulhw	%ymm1, %ymm4, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm12
+	vpmulhw	%ymm1, %ymm7, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm7, %ymm7
+	vpmulhw	%ymm1, %ymm8, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm8, %ymm8
+	vpsubw	%ymm7, %ymm10, %ymm15
+	vpsubw	%ymm8, %ymm12, %ymm3
+	vpsubw	%ymm9, %ymm6, %ymm4
+	vpaddw	%ymm10, %ymm7, %ymm7
+	vpaddw	%ymm12, %ymm8, %ymm8
+	vpmullw	%ymm15, %ymm2, %ymm10
+	vpaddw	%ymm6, %ymm9, %ymm9
+	vpmullw	%ymm3, %ymm2, %ymm6
+	vpsubw	%ymm13, %ymm11, %ymm12
+	vpaddw	%ymm11, %ymm13, %ymm11
+	vpmullw	%ymm4, %ymm2, %ymm13
+	vpmullw	%ymm12, %ymm2, %ymm14
+	vpmulhw	%ymm15, %ymm5, %ymm2
+	vpmulhw	%ymm3, %ymm5, %ymm3
+	vpmulhw	%ymm4, %ymm5, %ymm4
+	vpmulhw	%ymm12, %ymm5, %ymm5
+	vpmulhw	%ymm10, %ymm0, %ymm10
+	vpmulhw	%ymm6, %ymm0, %ymm12
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm14, %ymm0, %ymm6
+	vpsubw	%ymm10, %ymm2, %ymm2
+	vpsubw	%ymm12, %ymm3, %ymm3
+	vpsubw	%ymm13, %ymm4, %ymm4
+	vpsubw	%ymm6, %ymm5, %ymm5
+	vpslld	$16, %ymm8, %ymm6
+	vpblendw	$-86, %ymm6, %ymm7, %ymm6
+	vpsrld	$16, %ymm7, %ymm7
+	vpblendw	$-86, %ymm8, %ymm7, %ymm7
+	vpslld	$16, %ymm11, %ymm8
+	vpblendw	$-86, %ymm8, %ymm9, %ymm10
+	vpsrld	$16, %ymm9, %ymm8
+	vpblendw	$-86, %ymm11, %ymm8, %ymm11
+	vpslld	$16, %ymm3, %ymm8
+	vpblendw	$-86, %ymm8, %ymm2, %ymm8
+	vpsrld	$16, %ymm2, %ymm2
+	vpblendw	$-86, %ymm3, %ymm2, %ymm9
+	vpslld	$16, %ymm5, %ymm2
+	vpblendw	$-86, %ymm2, %ymm4, %ymm12
+	vpsrld	$16, %ymm4, %ymm2
+	vpblendw	$-86, %ymm5, %ymm2, %ymm13
+	vmovdqu	584(%rsi), %ymm2
+	vmovdqu	616(%rsi), %ymm5
+	vpsubw	%ymm7, %ymm6, %ymm15
+	vpsubw	%ymm11, %ymm10, %ymm3
+	vpsubw	%ymm9, %ymm8, %ymm4
+	vpaddw	%ymm6, %ymm7, %ymm6
+	vpaddw	%ymm10, %ymm11, %ymm7
+	vpmullw	%ymm15, %ymm2, %ymm10
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpmullw	%ymm3, %ymm2, %ymm9
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpmullw	%ymm4, %ymm2, %ymm13
+	vpmullw	%ymm11, %ymm2, %ymm14
+	vpmulhw	%ymm15, %ymm5, %ymm2
+	vpmulhw	%ymm3, %ymm5, %ymm3
+	vpmulhw	%ymm4, %ymm5, %ymm4
+	vpmulhw	%ymm11, %ymm5, %ymm5
+	vpmulhw	%ymm10, %ymm0, %ymm10
+	vpmulhw	%ymm9, %ymm0, %ymm11
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm14, %ymm0, %ymm9
+	vpsubw	%ymm10, %ymm2, %ymm2
+	vpsubw	%ymm11, %ymm3, %ymm3
+	vpsubw	%ymm13, %ymm4, %ymm4
+	vpsubw	%ymm9, %ymm5, %ymm5
+	vpmulhw	%ymm1, %ymm6, %ymm9
+	vpsraw	$10, %ymm9, %ymm9
+	vpmullw	%ymm0, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm6, %ymm6
+	vmovsldup	%ymm7, %ymm9
+	vpblendd	$-86, %ymm9, %ymm6, %ymm9
+	vpsrlq	$32, %ymm6, %ymm6
+	vpblendd	$-86, %ymm7, %ymm6, %ymm10
+	vmovsldup	%ymm12, %ymm6
+	vpblendd	$-86, %ymm6, %ymm8, %ymm11
+	vpsrlq	$32, %ymm8, %ymm6
+	vpblendd	$-86, %ymm12, %ymm6, %ymm14
+	vmovsldup	%ymm3, %ymm6
+	vpblendd	$-86, %ymm6, %ymm2, %ymm12
+	vpsrlq	$32, %ymm2, %ymm2
+	vpblendd	$-86, %ymm3, %ymm2, %ymm13
+	vmovsldup	%ymm5, %ymm2
+	vpblendd	$-86, %ymm2, %ymm4, %ymm2
+	vpsrlq	$32, %ymm4, %ymm3
+	vpblendd	$-86, %ymm5, %ymm3, %ymm3
+	vmovdqu	648(%rsi), %ymm4
+	vmovdqu	680(%rsi), %ymm5
+	vpsubw	%ymm10, %ymm9, %ymm6
+	vpsubw	%ymm14, %ymm11, %ymm7
+	vpsubw	%ymm13, %ymm12, %ymm8
+	vpaddw	%ymm9, %ymm10, %ymm9
+	vpaddw	%ymm11, %ymm14, %ymm10
+	vpmullw	%ymm6, %ymm4, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpmullw	%ymm7, %ymm4, %ymm13
+	vpsubw	%ymm3, %ymm2, %ymm14
+	vpaddw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm8, %ymm4, %ymm3
+	vpmullw	%ymm14, %ymm4, %ymm4
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpmulhw	%ymm7, %ymm5, %ymm7
+	vpmulhw	%ymm8, %ymm5, %ymm8
+	vpmulhw	%ymm14, %ymm5, %ymm5
+	vpmulhw	%ymm11, %ymm0, %ymm11
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm3, %ymm0, %ymm3
+	vpmulhw	%ymm4, %ymm0, %ymm4
+	vpsubw	%ymm11, %ymm6, %ymm6
+	vpsubw	%ymm13, %ymm7, %ymm7
+	vpsubw	%ymm3, %ymm8, %ymm3
+	vpsubw	%ymm4, %ymm5, %ymm4
+	vpmulhw	%ymm1, %ymm9, %ymm5
+	vpsraw	$10, %ymm5, %ymm5
+	vpmullw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm9, %ymm8
+	vpunpcklqdq	%ymm10, %ymm8, %ymm5
+	vpunpckhqdq	%ymm10, %ymm8, %ymm8
+	vpunpcklqdq	%ymm2, %ymm12, %ymm9
+	vpunpckhqdq	%ymm2, %ymm12, %ymm2
+	vpunpcklqdq	%ymm7, %ymm6, %ymm10
+	vpunpckhqdq	%ymm7, %ymm6, %ymm6
+	vpunpcklqdq	%ymm4, %ymm3, %ymm7
+	vpunpckhqdq	%ymm4, %ymm3, %ymm3
+	vmovdqu	712(%rsi), %ymm4
+	vmovdqu	744(%rsi), %ymm11
+	vpsubw	%ymm8, %ymm5, %ymm12
+	vpsubw	%ymm2, %ymm9, %ymm13
+	vpsubw	%ymm6, %ymm10, %ymm14
+	vpaddw	%ymm5, %ymm8, %ymm5
+	vpaddw	%ymm9, %ymm2, %ymm2
+	vpmullw	%ymm12, %ymm4, %ymm8
+	vpaddw	%ymm10, %ymm6, %ymm6
+	vpmullw	%ymm13, %ymm4, %ymm9
+	vpsubw	%ymm3, %ymm7, %ymm10
+	vpaddw	%ymm7, %ymm3, %ymm3
+	vpmullw	%ymm14, %ymm4, %ymm7
+	vpmullw	%ymm10, %ymm4, %ymm4
+	vpmulhw	%ymm12, %ymm11, %ymm12
+	vpmulhw	%ymm13, %ymm11, %ymm13
+	vpmulhw	%ymm14, %ymm11, %ymm14
+	vpmulhw	%ymm10, %ymm11, %ymm10
+	vpmulhw	%ymm8, %ymm0, %ymm8
+	vpmulhw	%ymm9, %ymm0, %ymm9
+	vpmulhw	%ymm7, %ymm0, %ymm7
+	vpmulhw	%ymm4, %ymm0, %ymm4
+	vpsubw	%ymm8, %ymm12, %ymm8
+	vpsubw	%ymm9, %ymm13, %ymm9
+	vpsubw	%ymm7, %ymm14, %ymm7
+	vpsubw	%ymm4, %ymm10, %ymm4
+	vpmulhw	%ymm1, %ymm5, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm5, %ymm10
+	vperm2i128	$32, %ymm2, %ymm10, %ymm5
+	vperm2i128	$49, %ymm2, %ymm10, %ymm2
+	vperm2i128	$32, %ymm3, %ymm6, %ymm10
+	vperm2i128	$49, %ymm3, %ymm6, %ymm3
+	vperm2i128	$32, %ymm9, %ymm8, %ymm6
+	vperm2i128	$49, %ymm9, %ymm8, %ymm8
+	vperm2i128	$32, %ymm4, %ymm7, %ymm9
+	vperm2i128	$49, %ymm4, %ymm7, %ymm4
+	vpbroadcastd	776(%rsi), %ymm7
+	vpbroadcastd	780(%rsi), %ymm11
+	vpsubw	%ymm2, %ymm5, %ymm12
+	vpsubw	%ymm3, %ymm10, %ymm13
+	vpsubw	%ymm8, %ymm6, %ymm14
+	vpaddw	%ymm5, %ymm2, %ymm2
+	vpaddw	%ymm10, %ymm3, %ymm3
+	vpmullw	%ymm12, %ymm7, %ymm5
+	vpaddw	%ymm6, %ymm8, %ymm6
+	vpmullw	%ymm13, %ymm7, %ymm8
+	vpsubw	%ymm4, %ymm9, %ymm10
+	vpaddw	%ymm9, %ymm4, %ymm4
+	vpmullw	%ymm14, %ymm7, %ymm9
+	vpmullw	%ymm10, %ymm7, %ymm7
+	vpmulhw	%ymm12, %ymm11, %ymm12
+	vpmulhw	%ymm13, %ymm11, %ymm13
+	vpmulhw	%ymm14, %ymm11, %ymm14
+	vpmulhw	%ymm10, %ymm11, %ymm10
+	vpmulhw	%ymm5, %ymm0, %ymm5
+	vpmulhw	%ymm8, %ymm0, %ymm8
+	vpmulhw	%ymm9, %ymm0, %ymm9
+	vpmulhw	%ymm7, %ymm0, %ymm7
+	vpsubw	%ymm5, %ymm12, %ymm5
+	vpsubw	%ymm8, %ymm13, %ymm8
+	vpsubw	%ymm9, %ymm14, %ymm9
+	vpsubw	%ymm7, %ymm10, %ymm7
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm1
+	vpsubw	%ymm1, %ymm2, %ymm10
+	vmovdqu	%ymm5, 384(%rcx)
+	vmovdqu	%ymm8, 416(%rcx)
+	vmovdqu	%ymm9, 448(%rcx)
+	vmovdqu	%ymm7, 480(%rcx)
+	vpbroadcastd	784(%rsi), %ymm1
+	vpbroadcastd	788(%rsi), %ymm2
+	vmovdqu	%ymm4, %ymm7
+	vmovdqu	%ymm3, %ymm4
+	vmovdqu	%ymm10, %ymm3
+	vmovdqu	(%rcx), %ymm9
+	vmovdqu	32(%rcx), %ymm13
+	vmovdqu	64(%rcx), %ymm5
+	vmovdqu	96(%rcx), %ymm8
+	vpsubw	%ymm3, %ymm9, %ymm10
+	vpsubw	%ymm4, %ymm13, %ymm11
+	vpsubw	%ymm6, %ymm5, %ymm12
+	vpaddw	%ymm9, %ymm3, %ymm3
+	vpaddw	%ymm13, %ymm4, %ymm4
+	vpmullw	%ymm10, %ymm1, %ymm13
+	vpaddw	%ymm5, %ymm6, %ymm5
+	vpmullw	%ymm11, %ymm1, %ymm6
+	vpsubw	%ymm7, %ymm8, %ymm14
+	vpaddw	%ymm8, %ymm7, %ymm7
+	vpmullw	%ymm12, %ymm1, %ymm8
+	vpmullw	%ymm14, %ymm1, %ymm9
+	vpmulhw	%ymm10, %ymm2, %ymm10
+	vpmulhw	%ymm11, %ymm2, %ymm11
+	vpmulhw	%ymm12, %ymm2, %ymm12
+	vpmulhw	%ymm14, %ymm2, %ymm14
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm6, %ymm0, %ymm6
+	vpmulhw	%ymm8, %ymm0, %ymm8
+	vpmulhw	%ymm9, %ymm0, %ymm9
+	vpsubw	%ymm13, %ymm10, %ymm10
+	vpsubw	%ymm6, %ymm11, %ymm6
+	vpsubw	%ymm8, %ymm12, %ymm11
+	vpsubw	%ymm9, %ymm14, %ymm12
+	vmovdqu	glob_data + 352(%rip), %ymm8
+	vmovdqu	glob_data + 384(%rip), %ymm9
+	vmovdqu	%ymm10, 256(%rcx)
+	vmovdqu	%ymm6, 288(%rcx)
+	vmovdqu	%ymm11, 320(%rcx)
+	vmovdqu	%ymm12, 352(%rcx)
+	vpmullw	%ymm3, %ymm8, %ymm6
+	vpmulhw	%ymm3, %ymm9, %ymm3
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm3, %ymm3
+	vpmullw	%ymm4, %ymm8, %ymm6
+	vpmulhw	%ymm4, %ymm9, %ymm4
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm4, %ymm4
+	vpmullw	%ymm5, %ymm8, %ymm6
+	vpmulhw	%ymm5, %ymm9, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm5, %ymm5
+	vpmullw	%ymm7, %ymm8, %ymm6
+	vpmulhw	%ymm7, %ymm9, %ymm7
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm7, %ymm6
+	vmovdqu	%ymm3, (%rcx)
+	vmovdqu	%ymm4, 32(%rcx)
+	vmovdqu	%ymm5, 64(%rcx)
+	vmovdqu	%ymm6, 96(%rcx)
+	vmovdqu	384(%rcx), %ymm4
+	vmovdqu	416(%rcx), %ymm5
+	vmovdqu	448(%rcx), %ymm7
+	vmovdqu	480(%rcx), %ymm10
+	vmovdqu	128(%rcx), %ymm6
+	vmovdqu	160(%rcx), %ymm9
+	vmovdqu	192(%rcx), %ymm8
+	vmovdqu	224(%rcx), %ymm11
+	vpsubw	%ymm4, %ymm6, %ymm12
+	vpsubw	%ymm5, %ymm9, %ymm13
+	vpsubw	%ymm7, %ymm8, %ymm3
+	vpaddw	%ymm6, %ymm4, %ymm4
+	vpaddw	%ymm9, %ymm5, %ymm5
+	vpmullw	%ymm12, %ymm1, %ymm6
+	vpaddw	%ymm8, %ymm7, %ymm7
+	vpmullw	%ymm13, %ymm1, %ymm8
+	vpsubw	%ymm10, %ymm11, %ymm9
+	vpaddw	%ymm11, %ymm10, %ymm10
+	vpmullw	%ymm3, %ymm1, %ymm11
+	vpmullw	%ymm9, %ymm1, %ymm1
+	vpmulhw	%ymm12, %ymm2, %ymm12
+	vpmulhw	%ymm13, %ymm2, %ymm13
+	vpmulhw	%ymm3, %ymm2, %ymm3
+	vpmulhw	%ymm9, %ymm2, %ymm2
+	vpmulhw	%ymm6, %ymm0, %ymm6
+	vpmulhw	%ymm8, %ymm0, %ymm8
+	vpmulhw	%ymm11, %ymm0, %ymm9
+	vpmulhw	%ymm1, %ymm0, %ymm11
+	vpsubw	%ymm6, %ymm12, %ymm1
+	vpsubw	%ymm8, %ymm13, %ymm6
+	vpsubw	%ymm9, %ymm3, %ymm8
+	vpsubw	%ymm11, %ymm2, %ymm9
+	vmovdqu	glob_data + 352(%rip), %ymm2
+	vmovdqu	glob_data + 384(%rip), %ymm3
+	vmovdqu	%ymm1, 384(%rcx)
+	vmovdqu	%ymm6, 416(%rcx)
+	vmovdqu	%ymm8, 448(%rcx)
+	vmovdqu	%ymm9, 480(%rcx)
+	vpmullw	%ymm4, %ymm2, %ymm1
+	vpmulhw	%ymm4, %ymm3, %ymm4
+	vpmulhw	%ymm0, %ymm1, %ymm1
+	vpsubw	%ymm1, %ymm4, %ymm1
+	vpmullw	%ymm5, %ymm2, %ymm4
+	vpmulhw	%ymm5, %ymm3, %ymm5
+	vpmulhw	%ymm0, %ymm4, %ymm4
+	vpsubw	%ymm4, %ymm5, %ymm4
+	vpmullw	%ymm7, %ymm2, %ymm5
+	vpmulhw	%ymm7, %ymm3, %ymm6
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm6, %ymm5
+	vpmullw	%ymm10, %ymm2, %ymm2
+	vpmulhw	%ymm10, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm2, %ymm0
+	vpsubw	%ymm0, %ymm3, %ymm0
+	vmovdqu	%ymm1, 128(%rcx)
+	vmovdqu	%ymm4, 160(%rcx)
+	vmovdqu	%ymm5, 192(%rcx)
+	vmovdqu	%ymm0, 224(%rcx)
+	ret
+L_poly_getnoise_eta1122_4x$1:
+	movq	%rdx, 1984(%rsp)
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%ymm0, 32(%rsp)
+	vmovdqu	%ymm0, 320(%rsp)
+	vmovdqu	%ymm0, 608(%rsp)
+	vmovdqu	%ymm0, 896(%rsp)
+	movb	%sil, 64(%rsp)
+	incb	%sil
+	movb	%sil, 352(%rsp)
+	incb	%sil
+	movb	%sil, 640(%rsp)
+	incb	%sil
+	movb	%sil, 928(%rsp)
+	leaq	1184(%rsp), %rax
+	leaq	32(%rsp), %rdx
+	leaq	320(%rsp), %rsi
+	leaq	608(%rsp), %rdi
+	leaq	896(%rsp), %r10
+	call	L_shake256_absorb4x_33$1
+L_poly_getnoise_eta1122_4x$4:
+	leaq	1184(%rsp), %rax
+	leaq	32(%rsp), %rbp
+	leaq	320(%rsp), %r10
+	leaq	608(%rsp), %r11
+	leaq	896(%rsp), %rbx
+	movq	%rbp, %r12
+	movq	%r10, %r13
+	movq	%r11, %r14
+	movq	%rbx, %r15
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L_poly_getnoise_eta1122_4x$3:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r12)
+	vmovhpd	%xmm1, (%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r14)
+	vmovhpd	%xmm0, (%r15)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r12)
+	vmovhpd	%xmm1, 8(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r14)
+	vmovhpd	%xmm0, 8(%r15)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r12)
+	vmovhpd	%xmm1, 16(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r14)
+	vmovhpd	%xmm0, 16(%r15)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r12)
+	vmovhpd	%xmm1, 24(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r14)
+	vmovhpd	%xmm0, 24(%r15)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r12)
+	vmovhpd	%xmm1, 32(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r14)
+	vmovhpd	%xmm0, 32(%r15)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r12)
+	vmovhpd	%xmm1, 40(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r14)
+	vmovhpd	%xmm0, 40(%r15)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r12)
+	vmovhpd	%xmm1, 48(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r14)
+	vmovhpd	%xmm0, 48(%r15)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r12)
+	vmovhpd	%xmm1, 56(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r14)
+	vmovhpd	%xmm0, 56(%r15)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r12)
+	vmovhpd	%xmm1, 64(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r14)
+	vmovhpd	%xmm0, 64(%r15)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r12)
+	vmovhpd	%xmm1, 72(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r14)
+	vmovhpd	%xmm0, 72(%r15)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r12)
+	vmovhpd	%xmm1, 80(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r14)
+	vmovhpd	%xmm0, 80(%r15)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r12)
+	vmovhpd	%xmm1, 88(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r14)
+	vmovhpd	%xmm0, 88(%r15)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r12)
+	vmovhpd	%xmm1, 96(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r14)
+	vmovhpd	%xmm0, 96(%r15)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r12)
+	vmovhpd	%xmm1, 104(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r14)
+	vmovhpd	%xmm0, 104(%r15)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r12)
+	vmovhpd	%xmm1, 112(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r14)
+	vmovhpd	%xmm0, 112(%r15)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r12)
+	vmovhpd	%xmm1, 120(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r14)
+	vmovhpd	%xmm0, 120(%r15)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r12)
+	vmovhpd	%xmm1, 128(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r14)
+	vmovhpd	%xmm0, 128(%r15)
+	leaq	136(%rbp), %rbp
+	leaq	136(%r10), %r10
+	leaq	136(%r11), %r11
+	leaq	136(%rbx), %rbx
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L_poly_getnoise_eta1122_4x$2:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%rbp)
+	vmovhpd	%xmm1, (%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r11)
+	vmovhpd	%xmm0, (%rbx)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%rbp)
+	vmovhpd	%xmm1, 8(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r11)
+	vmovhpd	%xmm0, 8(%rbx)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%rbp)
+	vmovhpd	%xmm1, 16(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r11)
+	vmovhpd	%xmm0, 16(%rbx)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%rbp)
+	vmovhpd	%xmm1, 24(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r11)
+	vmovhpd	%xmm0, 24(%rbx)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%rbp)
+	vmovhpd	%xmm1, 32(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r11)
+	vmovhpd	%xmm0, 32(%rbx)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%rbp)
+	vmovhpd	%xmm1, 40(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r11)
+	vmovhpd	%xmm0, 40(%rbx)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%rbp)
+	vmovhpd	%xmm1, 48(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r11)
+	vmovhpd	%xmm0, 48(%rbx)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%rbp)
+	vmovhpd	%xmm1, 56(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r11)
+	vmovhpd	%xmm0, 56(%rbx)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%rbp)
+	vmovhpd	%xmm1, 64(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r11)
+	vmovhpd	%xmm0, 64(%rbx)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%rbp)
+	vmovhpd	%xmm1, 72(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r11)
+	vmovhpd	%xmm0, 72(%rbx)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%rbp)
+	vmovhpd	%xmm1, 80(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r11)
+	vmovhpd	%xmm0, 80(%rbx)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%rbp)
+	vmovhpd	%xmm1, 88(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r11)
+	vmovhpd	%xmm0, 88(%rbx)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%rbp)
+	vmovhpd	%xmm1, 96(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r11)
+	vmovhpd	%xmm0, 96(%rbx)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%rbp)
+	vmovhpd	%xmm1, 104(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r11)
+	vmovhpd	%xmm0, 104(%rbx)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%rbp)
+	vmovhpd	%xmm1, 112(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r11)
+	vmovhpd	%xmm0, 112(%rbx)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%rbp)
+	vmovhpd	%xmm1, 120(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r11)
+	vmovhpd	%xmm0, 120(%rbx)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%rbp)
+	vmovhpd	%xmm1, 128(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r11)
+	vmovhpd	%xmm0, 128(%rbx)
+	movq	1984(%rsp), %rax
+	leaq	32(%rsp), %rdx
+	movl	$2396745, 1992(%rsp)
+	movl	$7190235, 1996(%rsp)
+	movl	$7, 2000(%rsp)
+	movl	$458752, 2004(%rsp)
+	movw	$3, 2008(%rsp)
+	vpbroadcastd	1992(%rsp), %ymm0
+	vpbroadcastd	1996(%rsp), %ymm1
+	vpbroadcastd	2000(%rsp), %ymm2
+	vpbroadcastd	2004(%rsp), %ymm3
+	vpbroadcastw	2008(%rsp), %ymm4
+	vmovdqu	glob_data + 96(%rip), %ymm5
+	vmovdqu	(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, (%rax)
+	vmovdqu	%ymm6, 32(%rax)
+	vmovdqu	24(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 64(%rax)
+	vmovdqu	%ymm6, 96(%rax)
+	vmovdqu	48(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 128(%rax)
+	vmovdqu	%ymm6, 160(%rax)
+	vmovdqu	72(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 192(%rax)
+	vmovdqu	%ymm6, 224(%rax)
+	vmovdqu	96(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 256(%rax)
+	vmovdqu	%ymm6, 288(%rax)
+	vmovdqu	120(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 320(%rax)
+	vmovdqu	%ymm6, 352(%rax)
+	vmovdqu	144(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 384(%rax)
+	vmovdqu	%ymm6, 416(%rax)
+	vmovdqu	168(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm5
+	vpsrld	$1, %ymm5, %ymm6
+	vpsrld	$2, %ymm5, %ymm7
+	vpand	%ymm5, %ymm0, %ymm5
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm0
+	vpaddd	%ymm6, %ymm5, %ymm5
+	vpaddd	%ymm0, %ymm5, %ymm0
+	vpsrld	$3, %ymm0, %ymm5
+	vpaddd	%ymm1, %ymm0, %ymm0
+	vpsubd	%ymm5, %ymm0, %ymm0
+	vpslld	$10, %ymm0, %ymm1
+	vpsrld	$12, %ymm0, %ymm5
+	vpsrld	$2, %ymm0, %ymm6
+	vpand	%ymm2, %ymm0, %ymm0
+	vpand	%ymm3, %ymm1, %ymm1
+	vpand	%ymm2, %ymm5, %ymm2
+	vpand	%ymm3, %ymm6, %ymm3
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vpaddw	%ymm3, %ymm2, %ymm1
+	vpsubw	%ymm4, %ymm0, %ymm0
+	vpsubw	%ymm4, %ymm1, %ymm1
+	vpunpckldq	%ymm1, %ymm0, %ymm2
+	vpunpckhdq	%ymm1, %ymm0, %ymm0
+	vperm2i128	$32, %ymm0, %ymm2, %ymm1
+	vperm2i128	$49, %ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm1, 448(%rax)
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	320(%rsp), %rax
+	movl	$2396745, 2004(%rsp)
+	movl	$7190235, 2000(%rsp)
+	movl	$7, 1996(%rsp)
+	movl	$458752, 1992(%rsp)
+	movw	$3, 2008(%rsp)
+	vpbroadcastd	2004(%rsp), %ymm0
+	vpbroadcastd	2000(%rsp), %ymm1
+	vpbroadcastd	1996(%rsp), %ymm2
+	vpbroadcastd	1992(%rsp), %ymm3
+	vpbroadcastw	2008(%rsp), %ymm4
+	vmovdqu	glob_data + 96(%rip), %ymm5
+	vmovdqu	(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, (%rcx)
+	vmovdqu	%ymm6, 32(%rcx)
+	vmovdqu	24(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 64(%rcx)
+	vmovdqu	%ymm6, 96(%rcx)
+	vmovdqu	48(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 128(%rcx)
+	vmovdqu	%ymm6, 160(%rcx)
+	vmovdqu	72(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 192(%rcx)
+	vmovdqu	%ymm6, 224(%rcx)
+	vmovdqu	96(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 256(%rcx)
+	vmovdqu	%ymm6, 288(%rcx)
+	vmovdqu	120(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 320(%rcx)
+	vmovdqu	%ymm6, 352(%rcx)
+	vmovdqu	144(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 384(%rcx)
+	vmovdqu	%ymm6, 416(%rcx)
+	vmovdqu	168(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm5
+	vpsrld	$1, %ymm5, %ymm6
+	vpsrld	$2, %ymm5, %ymm7
+	vpand	%ymm5, %ymm0, %ymm5
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm0
+	vpaddd	%ymm6, %ymm5, %ymm5
+	vpaddd	%ymm0, %ymm5, %ymm0
+	vpsrld	$3, %ymm0, %ymm5
+	vpaddd	%ymm1, %ymm0, %ymm0
+	vpsubd	%ymm5, %ymm0, %ymm0
+	vpslld	$10, %ymm0, %ymm1
+	vpsrld	$12, %ymm0, %ymm5
+	vpsrld	$2, %ymm0, %ymm6
+	vpand	%ymm2, %ymm0, %ymm0
+	vpand	%ymm3, %ymm1, %ymm1
+	vpand	%ymm2, %ymm5, %ymm2
+	vpand	%ymm3, %ymm6, %ymm3
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vpaddw	%ymm3, %ymm2, %ymm1
+	vpsubw	%ymm4, %ymm0, %ymm0
+	vpsubw	%ymm4, %ymm1, %ymm1
+	vpunpckldq	%ymm1, %ymm0, %ymm2
+	vpunpckhdq	%ymm1, %ymm0, %ymm0
+	vperm2i128	$32, %ymm0, %ymm2, %ymm1
+	vperm2i128	$49, %ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm1, 448(%rcx)
+	vmovdqu	%ymm0, 480(%rcx)
+	leaq	608(%rsp), %rax
+	movl	$1431655765, 1992(%rsp)
+	movl	$858993459, 1996(%rsp)
+	movl	$50529027, 2000(%rsp)
+	movl	$252645135, 2004(%rsp)
+	vpbroadcastd	1992(%rsp), %ymm0
+	vpbroadcastd	1996(%rsp), %ymm1
+	vpbroadcastd	2000(%rsp), %ymm2
+	vpbroadcastd	2004(%rsp), %ymm3
+	vmovdqu	(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, (%r8)
+	vmovdqu	%ymm7, 32(%r8)
+	vmovdqu	%ymm6, 64(%r8)
+	vmovdqu	%ymm4, 96(%r8)
+	vmovdqu	32(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 128(%r8)
+	vmovdqu	%ymm7, 160(%r8)
+	vmovdqu	%ymm6, 192(%r8)
+	vmovdqu	%ymm4, 224(%r8)
+	vmovdqu	64(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 256(%r8)
+	vmovdqu	%ymm7, 288(%r8)
+	vmovdqu	%ymm6, 320(%r8)
+	vmovdqu	%ymm4, 352(%r8)
+	vmovdqu	96(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm0
+	vpaddb	%ymm0, %ymm4, %ymm0
+	vpsrlw	$2, %ymm0, %ymm4
+	vpand	%ymm0, %ymm1, %ymm0
+	vpand	%ymm4, %ymm1, %ymm4
+	vpaddb	%ymm1, %ymm0, %ymm0
+	vpsubb	%ymm4, %ymm0, %ymm0
+	vpsrlw	$4, %ymm0, %ymm1
+	vpand	%ymm0, %ymm3, %ymm0
+	vpand	%ymm1, %ymm3, %ymm1
+	vpsubb	%ymm2, %ymm0, %ymm0
+	vpsubb	%ymm2, %ymm1, %ymm1
+	vpunpcklbw	%ymm1, %ymm0, %ymm2
+	vpunpckhbw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%xmm2, %xmm1
+	vpmovsxbw	%xmm1, %ymm1
+	vextracti128	$1, %ymm2, %xmm2
+	vpmovsxbw	%xmm2, %ymm2
+	vmovdqu	%xmm0, %xmm3
+	vpmovsxbw	%xmm3, %ymm3
+	vextracti128	$1, %ymm0, %xmm0
+	vpmovsxbw	%xmm0, %ymm0
+	vmovdqu	%ymm1, 384(%r8)
+	vmovdqu	%ymm3, 416(%r8)
+	vmovdqu	%ymm2, 448(%r8)
+	vmovdqu	%ymm0, 480(%r8)
+	leaq	896(%rsp), %rax
+	movl	$1431655765, 2004(%rsp)
+	movl	$858993459, 2000(%rsp)
+	movl	$50529027, 1996(%rsp)
+	movl	$252645135, 1992(%rsp)
+	vpbroadcastd	2004(%rsp), %ymm0
+	vpbroadcastd	2000(%rsp), %ymm1
+	vpbroadcastd	1996(%rsp), %ymm2
+	vpbroadcastd	1992(%rsp), %ymm3
+	vmovdqu	(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, (%r9)
+	vmovdqu	%ymm7, 32(%r9)
+	vmovdqu	%ymm6, 64(%r9)
+	vmovdqu	%ymm4, 96(%r9)
+	vmovdqu	32(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 128(%r9)
+	vmovdqu	%ymm7, 160(%r9)
+	vmovdqu	%ymm6, 192(%r9)
+	vmovdqu	%ymm4, 224(%r9)
+	vmovdqu	64(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 256(%r9)
+	vmovdqu	%ymm7, 288(%r9)
+	vmovdqu	%ymm6, 320(%r9)
+	vmovdqu	%ymm4, 352(%r9)
+	vmovdqu	96(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm0
+	vpaddb	%ymm0, %ymm4, %ymm0
+	vpsrlw	$2, %ymm0, %ymm4
+	vpand	%ymm0, %ymm1, %ymm0
+	vpand	%ymm4, %ymm1, %ymm4
+	vpaddb	%ymm1, %ymm0, %ymm0
+	vpsubb	%ymm4, %ymm0, %ymm0
+	vpsrlw	$4, %ymm0, %ymm1
+	vpand	%ymm0, %ymm3, %ymm0
+	vpand	%ymm1, %ymm3, %ymm1
+	vpsubb	%ymm2, %ymm0, %ymm0
+	vpsubb	%ymm2, %ymm1, %ymm1
+	vpunpcklbw	%ymm1, %ymm0, %ymm2
+	vpunpckhbw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%xmm2, %xmm1
+	vpmovsxbw	%xmm1, %ymm1
+	vextracti128	$1, %ymm2, %xmm2
+	vpmovsxbw	%xmm2, %ymm2
+	vmovdqu	%xmm0, %xmm3
+	vpmovsxbw	%xmm3, %ymm3
+	vextracti128	$1, %ymm0, %xmm0
+	vpmovsxbw	%xmm0, %ymm0
+	vmovdqu	%ymm1, 384(%r9)
+	vmovdqu	%ymm3, 416(%r9)
+	vmovdqu	%ymm2, 448(%r9)
+	vmovdqu	%ymm0, 480(%r9)
+	ret
+L_poly_getnoise_eta1_4x$1:
+	movq	%rax, 1984(%rsp)
+	vmovdqu	(%rdx), %ymm0
+	vmovdqu	%ymm0, 32(%rsp)
+	vmovdqu	%ymm0, 320(%rsp)
+	vmovdqu	%ymm0, 608(%rsp)
+	vmovdqu	%ymm0, 896(%rsp)
+	movb	%sil, 64(%rsp)
+	incb	%sil
+	movb	%sil, 352(%rsp)
+	incb	%sil
+	movb	%sil, 640(%rsp)
+	incb	%sil
+	movb	%sil, 928(%rsp)
+	leaq	1184(%rsp), %rax
+	leaq	32(%rsp), %rdx
+	leaq	320(%rsp), %rsi
+	leaq	608(%rsp), %rdi
+	leaq	896(%rsp), %r10
+	call	L_shake256_absorb4x_33$1
+L_poly_getnoise_eta1_4x$4:
+	leaq	1184(%rsp), %rax
+	leaq	32(%rsp), %rbp
+	leaq	320(%rsp), %r10
+	leaq	608(%rsp), %r11
+	leaq	896(%rsp), %rbx
+	movq	%rbp, %r12
+	movq	%r10, %r13
+	movq	%r11, %r14
+	movq	%rbx, %r15
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L_poly_getnoise_eta1_4x$3:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r12)
+	vmovhpd	%xmm1, (%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r14)
+	vmovhpd	%xmm0, (%r15)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r12)
+	vmovhpd	%xmm1, 8(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r14)
+	vmovhpd	%xmm0, 8(%r15)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r12)
+	vmovhpd	%xmm1, 16(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r14)
+	vmovhpd	%xmm0, 16(%r15)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r12)
+	vmovhpd	%xmm1, 24(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r14)
+	vmovhpd	%xmm0, 24(%r15)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r12)
+	vmovhpd	%xmm1, 32(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r14)
+	vmovhpd	%xmm0, 32(%r15)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r12)
+	vmovhpd	%xmm1, 40(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r14)
+	vmovhpd	%xmm0, 40(%r15)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r12)
+	vmovhpd	%xmm1, 48(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r14)
+	vmovhpd	%xmm0, 48(%r15)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r12)
+	vmovhpd	%xmm1, 56(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r14)
+	vmovhpd	%xmm0, 56(%r15)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r12)
+	vmovhpd	%xmm1, 64(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r14)
+	vmovhpd	%xmm0, 64(%r15)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r12)
+	vmovhpd	%xmm1, 72(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r14)
+	vmovhpd	%xmm0, 72(%r15)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r12)
+	vmovhpd	%xmm1, 80(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r14)
+	vmovhpd	%xmm0, 80(%r15)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r12)
+	vmovhpd	%xmm1, 88(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r14)
+	vmovhpd	%xmm0, 88(%r15)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r12)
+	vmovhpd	%xmm1, 96(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r14)
+	vmovhpd	%xmm0, 96(%r15)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r12)
+	vmovhpd	%xmm1, 104(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r14)
+	vmovhpd	%xmm0, 104(%r15)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r12)
+	vmovhpd	%xmm1, 112(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r14)
+	vmovhpd	%xmm0, 112(%r15)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r12)
+	vmovhpd	%xmm1, 120(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r14)
+	vmovhpd	%xmm0, 120(%r15)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r12)
+	vmovhpd	%xmm1, 128(%r13)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r14)
+	vmovhpd	%xmm0, 128(%r15)
+	leaq	136(%rbp), %rbp
+	leaq	136(%r10), %r10
+	leaq	136(%r11), %r11
+	leaq	136(%rbx), %rbx
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L_poly_getnoise_eta1_4x$2:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%rbp)
+	vmovhpd	%xmm1, (%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r11)
+	vmovhpd	%xmm0, (%rbx)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%rbp)
+	vmovhpd	%xmm1, 8(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r11)
+	vmovhpd	%xmm0, 8(%rbx)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%rbp)
+	vmovhpd	%xmm1, 16(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r11)
+	vmovhpd	%xmm0, 16(%rbx)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%rbp)
+	vmovhpd	%xmm1, 24(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r11)
+	vmovhpd	%xmm0, 24(%rbx)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%rbp)
+	vmovhpd	%xmm1, 32(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r11)
+	vmovhpd	%xmm0, 32(%rbx)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%rbp)
+	vmovhpd	%xmm1, 40(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r11)
+	vmovhpd	%xmm0, 40(%rbx)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%rbp)
+	vmovhpd	%xmm1, 48(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r11)
+	vmovhpd	%xmm0, 48(%rbx)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%rbp)
+	vmovhpd	%xmm1, 56(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r11)
+	vmovhpd	%xmm0, 56(%rbx)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%rbp)
+	vmovhpd	%xmm1, 64(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r11)
+	vmovhpd	%xmm0, 64(%rbx)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%rbp)
+	vmovhpd	%xmm1, 72(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r11)
+	vmovhpd	%xmm0, 72(%rbx)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%rbp)
+	vmovhpd	%xmm1, 80(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r11)
+	vmovhpd	%xmm0, 80(%rbx)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%rbp)
+	vmovhpd	%xmm1, 88(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r11)
+	vmovhpd	%xmm0, 88(%rbx)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%rbp)
+	vmovhpd	%xmm1, 96(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r11)
+	vmovhpd	%xmm0, 96(%rbx)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%rbp)
+	vmovhpd	%xmm1, 104(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r11)
+	vmovhpd	%xmm0, 104(%rbx)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%rbp)
+	vmovhpd	%xmm1, 112(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r11)
+	vmovhpd	%xmm0, 112(%rbx)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%rbp)
+	vmovhpd	%xmm1, 120(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r11)
+	vmovhpd	%xmm0, 120(%rbx)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%rbp)
+	vmovhpd	%xmm1, 128(%r10)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r11)
+	vmovhpd	%xmm0, 128(%rbx)
+	movq	1984(%rsp), %rax
+	leaq	32(%rsp), %rdx
+	movl	$2396745, 1992(%rsp)
+	movl	$7190235, 1996(%rsp)
+	movl	$7, 2000(%rsp)
+	movl	$458752, 2004(%rsp)
+	movw	$3, 2008(%rsp)
+	vpbroadcastd	1992(%rsp), %ymm0
+	vpbroadcastd	1996(%rsp), %ymm1
+	vpbroadcastd	2000(%rsp), %ymm2
+	vpbroadcastd	2004(%rsp), %ymm3
+	vpbroadcastw	2008(%rsp), %ymm4
+	vmovdqu	glob_data + 96(%rip), %ymm5
+	vmovdqu	(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, (%rax)
+	vmovdqu	%ymm6, 32(%rax)
+	vmovdqu	24(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 64(%rax)
+	vmovdqu	%ymm6, 96(%rax)
+	vmovdqu	48(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 128(%rax)
+	vmovdqu	%ymm6, 160(%rax)
+	vmovdqu	72(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 192(%rax)
+	vmovdqu	%ymm6, 224(%rax)
+	vmovdqu	96(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 256(%rax)
+	vmovdqu	%ymm6, 288(%rax)
+	vmovdqu	120(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 320(%rax)
+	vmovdqu	%ymm6, 352(%rax)
+	vmovdqu	144(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 384(%rax)
+	vmovdqu	%ymm6, 416(%rax)
+	vmovdqu	168(%rdx), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm5
+	vpsrld	$1, %ymm5, %ymm6
+	vpsrld	$2, %ymm5, %ymm7
+	vpand	%ymm5, %ymm0, %ymm5
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm0
+	vpaddd	%ymm6, %ymm5, %ymm5
+	vpaddd	%ymm0, %ymm5, %ymm0
+	vpsrld	$3, %ymm0, %ymm5
+	vpaddd	%ymm1, %ymm0, %ymm0
+	vpsubd	%ymm5, %ymm0, %ymm0
+	vpslld	$10, %ymm0, %ymm1
+	vpsrld	$12, %ymm0, %ymm5
+	vpsrld	$2, %ymm0, %ymm6
+	vpand	%ymm2, %ymm0, %ymm0
+	vpand	%ymm3, %ymm1, %ymm1
+	vpand	%ymm2, %ymm5, %ymm2
+	vpand	%ymm3, %ymm6, %ymm3
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vpaddw	%ymm3, %ymm2, %ymm1
+	vpsubw	%ymm4, %ymm0, %ymm0
+	vpsubw	%ymm4, %ymm1, %ymm1
+	vpunpckldq	%ymm1, %ymm0, %ymm2
+	vpunpckhdq	%ymm1, %ymm0, %ymm0
+	vperm2i128	$32, %ymm0, %ymm2, %ymm1
+	vperm2i128	$49, %ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm1, 448(%rax)
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	320(%rsp), %rax
+	movl	$2396745, 2004(%rsp)
+	movl	$7190235, 2000(%rsp)
+	movl	$7, 1996(%rsp)
+	movl	$458752, 1992(%rsp)
+	movw	$3, 2008(%rsp)
+	vpbroadcastd	2004(%rsp), %ymm0
+	vpbroadcastd	2000(%rsp), %ymm1
+	vpbroadcastd	1996(%rsp), %ymm2
+	vpbroadcastd	1992(%rsp), %ymm3
+	vpbroadcastw	2008(%rsp), %ymm4
+	vmovdqu	glob_data + 96(%rip), %ymm5
+	vmovdqu	(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, (%rcx)
+	vmovdqu	%ymm6, 32(%rcx)
+	vmovdqu	24(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 64(%rcx)
+	vmovdqu	%ymm6, 96(%rcx)
+	vmovdqu	48(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 128(%rcx)
+	vmovdqu	%ymm6, 160(%rcx)
+	vmovdqu	72(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 192(%rcx)
+	vmovdqu	%ymm6, 224(%rcx)
+	vmovdqu	96(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 256(%rcx)
+	vmovdqu	%ymm6, 288(%rcx)
+	vmovdqu	120(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 320(%rcx)
+	vmovdqu	%ymm6, 352(%rcx)
+	vmovdqu	144(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 384(%rcx)
+	vmovdqu	%ymm6, 416(%rcx)
+	vmovdqu	168(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm5
+	vpsrld	$1, %ymm5, %ymm6
+	vpsrld	$2, %ymm5, %ymm7
+	vpand	%ymm5, %ymm0, %ymm5
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm0
+	vpaddd	%ymm6, %ymm5, %ymm5
+	vpaddd	%ymm0, %ymm5, %ymm0
+	vpsrld	$3, %ymm0, %ymm5
+	vpaddd	%ymm1, %ymm0, %ymm0
+	vpsubd	%ymm5, %ymm0, %ymm0
+	vpslld	$10, %ymm0, %ymm1
+	vpsrld	$12, %ymm0, %ymm5
+	vpsrld	$2, %ymm0, %ymm6
+	vpand	%ymm2, %ymm0, %ymm0
+	vpand	%ymm3, %ymm1, %ymm1
+	vpand	%ymm2, %ymm5, %ymm2
+	vpand	%ymm3, %ymm6, %ymm3
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vpaddw	%ymm3, %ymm2, %ymm1
+	vpsubw	%ymm4, %ymm0, %ymm0
+	vpsubw	%ymm4, %ymm1, %ymm1
+	vpunpckldq	%ymm1, %ymm0, %ymm2
+	vpunpckhdq	%ymm1, %ymm0, %ymm0
+	vperm2i128	$32, %ymm0, %ymm2, %ymm1
+	vperm2i128	$49, %ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm1, 448(%rcx)
+	vmovdqu	%ymm0, 480(%rcx)
+	leaq	608(%rsp), %rax
+	movl	$2396745, 1992(%rsp)
+	movl	$7190235, 1996(%rsp)
+	movl	$7, 2000(%rsp)
+	movl	$458752, 2004(%rsp)
+	movw	$3, 2008(%rsp)
+	vpbroadcastd	1992(%rsp), %ymm0
+	vpbroadcastd	1996(%rsp), %ymm1
+	vpbroadcastd	2000(%rsp), %ymm2
+	vpbroadcastd	2004(%rsp), %ymm3
+	vpbroadcastw	2008(%rsp), %ymm4
+	vmovdqu	glob_data + 96(%rip), %ymm5
+	vmovdqu	(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, (%r8)
+	vmovdqu	%ymm6, 32(%r8)
+	vmovdqu	24(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 64(%r8)
+	vmovdqu	%ymm6, 96(%r8)
+	vmovdqu	48(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 128(%r8)
+	vmovdqu	%ymm6, 160(%r8)
+	vmovdqu	72(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 192(%r8)
+	vmovdqu	%ymm6, 224(%r8)
+	vmovdqu	96(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 256(%r8)
+	vmovdqu	%ymm6, 288(%r8)
+	vmovdqu	120(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 320(%r8)
+	vmovdqu	%ymm6, 352(%r8)
+	vmovdqu	144(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 384(%r8)
+	vmovdqu	%ymm6, 416(%r8)
+	vmovdqu	168(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm5
+	vpsrld	$1, %ymm5, %ymm6
+	vpsrld	$2, %ymm5, %ymm7
+	vpand	%ymm5, %ymm0, %ymm5
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm0
+	vpaddd	%ymm6, %ymm5, %ymm5
+	vpaddd	%ymm0, %ymm5, %ymm0
+	vpsrld	$3, %ymm0, %ymm5
+	vpaddd	%ymm1, %ymm0, %ymm0
+	vpsubd	%ymm5, %ymm0, %ymm0
+	vpslld	$10, %ymm0, %ymm1
+	vpsrld	$12, %ymm0, %ymm5
+	vpsrld	$2, %ymm0, %ymm6
+	vpand	%ymm2, %ymm0, %ymm0
+	vpand	%ymm3, %ymm1, %ymm1
+	vpand	%ymm2, %ymm5, %ymm2
+	vpand	%ymm3, %ymm6, %ymm3
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vpaddw	%ymm3, %ymm2, %ymm1
+	vpsubw	%ymm4, %ymm0, %ymm0
+	vpsubw	%ymm4, %ymm1, %ymm1
+	vpunpckldq	%ymm1, %ymm0, %ymm2
+	vpunpckhdq	%ymm1, %ymm0, %ymm0
+	vperm2i128	$32, %ymm0, %ymm2, %ymm1
+	vperm2i128	$49, %ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm1, 448(%r8)
+	vmovdqu	%ymm0, 480(%r8)
+	leaq	896(%rsp), %rax
+	movl	$2396745, 2004(%rsp)
+	movl	$7190235, 2000(%rsp)
+	movl	$7, 1996(%rsp)
+	movl	$458752, 1992(%rsp)
+	movw	$3, 2008(%rsp)
+	vpbroadcastd	2004(%rsp), %ymm0
+	vpbroadcastd	2000(%rsp), %ymm1
+	vpbroadcastd	1996(%rsp), %ymm2
+	vpbroadcastd	1992(%rsp), %ymm3
+	vpbroadcastw	2008(%rsp), %ymm4
+	vmovdqu	glob_data + 96(%rip), %ymm5
+	vmovdqu	(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, (%r9)
+	vmovdqu	%ymm6, 32(%r9)
+	vmovdqu	24(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 64(%r9)
+	vmovdqu	%ymm6, 96(%r9)
+	vmovdqu	48(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 128(%r9)
+	vmovdqu	%ymm6, 160(%r9)
+	vmovdqu	72(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 192(%r9)
+	vmovdqu	%ymm6, 224(%r9)
+	vmovdqu	96(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 256(%r9)
+	vmovdqu	%ymm6, 288(%r9)
+	vmovdqu	120(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 320(%r9)
+	vmovdqu	%ymm6, 352(%r9)
+	vmovdqu	144(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm6
+	vpsrld	$1, %ymm6, %ymm7
+	vpsrld	$2, %ymm6, %ymm8
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm7
+	vpand	%ymm8, %ymm0, %ymm8
+	vpaddd	%ymm7, %ymm6, %ymm6
+	vpaddd	%ymm8, %ymm6, %ymm6
+	vpsrld	$3, %ymm6, %ymm7
+	vpaddd	%ymm1, %ymm6, %ymm6
+	vpsubd	%ymm7, %ymm6, %ymm6
+	vpslld	$10, %ymm6, %ymm7
+	vpsrld	$12, %ymm6, %ymm8
+	vpsrld	$2, %ymm6, %ymm9
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm3, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpand	%ymm3, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm6, %ymm6
+	vpaddw	%ymm9, %ymm8, %ymm7
+	vpsubw	%ymm4, %ymm6, %ymm6
+	vpsubw	%ymm4, %ymm7, %ymm7
+	vpunpckldq	%ymm7, %ymm6, %ymm8
+	vpunpckhdq	%ymm7, %ymm6, %ymm6
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vmovdqu	%ymm7, 384(%r9)
+	vmovdqu	%ymm6, 416(%r9)
+	vmovdqu	168(%rax), %ymm6
+	vpermq	$-108, %ymm6, %ymm6
+	vpshufb	%ymm5, %ymm6, %ymm5
+	vpsrld	$1, %ymm5, %ymm6
+	vpsrld	$2, %ymm5, %ymm7
+	vpand	%ymm5, %ymm0, %ymm5
+	vpand	%ymm6, %ymm0, %ymm6
+	vpand	%ymm7, %ymm0, %ymm0
+	vpaddd	%ymm6, %ymm5, %ymm5
+	vpaddd	%ymm0, %ymm5, %ymm0
+	vpsrld	$3, %ymm0, %ymm5
+	vpaddd	%ymm1, %ymm0, %ymm0
+	vpsubd	%ymm5, %ymm0, %ymm0
+	vpslld	$10, %ymm0, %ymm1
+	vpsrld	$12, %ymm0, %ymm5
+	vpsrld	$2, %ymm0, %ymm6
+	vpand	%ymm2, %ymm0, %ymm0
+	vpand	%ymm3, %ymm1, %ymm1
+	vpand	%ymm2, %ymm5, %ymm2
+	vpand	%ymm3, %ymm6, %ymm3
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vpaddw	%ymm3, %ymm2, %ymm1
+	vpsubw	%ymm4, %ymm0, %ymm0
+	vpsubw	%ymm4, %ymm1, %ymm1
+	vpunpckldq	%ymm1, %ymm0, %ymm2
+	vpunpckhdq	%ymm1, %ymm0, %ymm0
+	vperm2i128	$32, %ymm0, %ymm2, %ymm1
+	vperm2i128	$49, %ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm1, 448(%r9)
+	vmovdqu	%ymm0, 480(%r9)
+	ret
+L_poly_getnoise$1:
+	movl	$1431655765, 204(%rsp)
+	movl	$858993459, 208(%rsp)
+	movl	$50529027, 212(%rsp)
+	movl	$252645135, 216(%rsp)
+	movq	%rdx, 160(%rsp)
+	movq	(%rcx), %rdx
+	movq	%rdx, 168(%rsp)
+	movq	8(%rcx), %rdx
+	movq	%rdx, 176(%rsp)
+	movq	16(%rcx), %rdx
+	movq	%rdx, 184(%rsp)
+	movq	24(%rcx), %rcx
+	movq	%rcx, 192(%rsp)
+	movb	%al, 200(%rsp)
+	leaq	32(%rsp), %rax
+	leaq	168(%rsp), %rcx
+	leaq	-248(%rsp), %rsp
+	call	L_shake256_128_33$1
+L_poly_getnoise$2:
+	leaq	248(%rsp), %rsp
+	vpbroadcastd	204(%rsp), %ymm0
+	vpbroadcastd	208(%rsp), %ymm1
+	vpbroadcastd	212(%rsp), %ymm2
+	vpbroadcastd	216(%rsp), %ymm3
+	movq	160(%rsp), %rax
+	vmovdqu	32(%rsp), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, (%rax)
+	vmovdqu	%ymm7, 32(%rax)
+	vmovdqu	%ymm6, 64(%rax)
+	vmovdqu	%ymm4, 96(%rax)
+	vmovdqu	64(%rsp), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 128(%rax)
+	vmovdqu	%ymm7, 160(%rax)
+	vmovdqu	%ymm6, 192(%rax)
+	vmovdqu	%ymm4, 224(%rax)
+	vmovdqu	96(%rsp), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 256(%rax)
+	vmovdqu	%ymm7, 288(%rax)
+	vmovdqu	%ymm6, 320(%rax)
+	vmovdqu	%ymm4, 352(%rax)
+	vmovdqu	128(%rsp), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm0
+	vpaddb	%ymm0, %ymm4, %ymm0
+	vpsrlw	$2, %ymm0, %ymm4
+	vpand	%ymm0, %ymm1, %ymm0
+	vpand	%ymm4, %ymm1, %ymm4
+	vpaddb	%ymm1, %ymm0, %ymm0
+	vpsubb	%ymm4, %ymm0, %ymm0
+	vpsrlw	$4, %ymm0, %ymm1
+	vpand	%ymm0, %ymm3, %ymm0
+	vpand	%ymm1, %ymm3, %ymm1
+	vpsubb	%ymm2, %ymm0, %ymm0
+	vpsubb	%ymm2, %ymm1, %ymm1
+	vpunpcklbw	%ymm1, %ymm0, %ymm2
+	vpunpckhbw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%xmm2, %xmm1
+	vpmovsxbw	%xmm1, %ymm1
+	vextracti128	$1, %ymm2, %xmm2
+	vpmovsxbw	%xmm2, %ymm2
+	vmovdqu	%xmm0, %xmm3
+	vpmovsxbw	%xmm3, %ymm3
+	vextracti128	$1, %ymm0, %xmm0
+	vpmovsxbw	%xmm0, %ymm0
+	vmovdqu	%ymm1, 384(%rax)
+	vmovdqu	%ymm3, 416(%rax)
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	%ymm0, 480(%rax)
+	ret
+L_poly_frommsg_1$1:
+	leaq	glob_data + 288(%rip), %rsi
+	vmovdqu	(%rsi), %ymm0
+	vbroadcasti128	glob_data + 4144(%rip), %ymm1
+	vbroadcasti128	glob_data + 4128(%rip), %ymm2
+	vmovdqu	(%rdi), %ymm3
+	vpshufd	$0, %ymm3, %ymm4
+	vpsllvd	%ymm1, %ymm4, %ymm4
+	vpshufb	%ymm2, %ymm4, %ymm4
+	vpsllw	$12, %ymm4, %ymm5
+	vpsllw	$8, %ymm4, %ymm6
+	vpsllw	$4, %ymm4, %ymm7
+	vpsraw	$15, %ymm5, %ymm5
+	vpsraw	$15, %ymm6, %ymm6
+	vpsraw	$15, %ymm7, %ymm7
+	vpsraw	$15, %ymm4, %ymm4
+	vpand	%ymm0, %ymm5, %ymm5
+	vpand	%ymm0, %ymm6, %ymm6
+	vpand	%ymm0, %ymm7, %ymm7
+	vpand	%ymm0, %ymm4, %ymm4
+	vpunpcklqdq	%ymm6, %ymm5, %ymm8
+	vpunpckhqdq	%ymm6, %ymm5, %ymm5
+	vpunpcklqdq	%ymm4, %ymm7, %ymm6
+	vpunpckhqdq	%ymm4, %ymm7, %ymm4
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vperm2i128	$32, %ymm4, %ymm5, %ymm8
+	vperm2i128	$49, %ymm4, %ymm5, %ymm4
+	vmovdqu	%ymm7, (%rax)
+	vmovdqu	%ymm8, 32(%rax)
+	vmovdqu	%ymm6, 256(%rax)
+	vmovdqu	%ymm4, 288(%rax)
+	vpshufd	$85, %ymm3, %ymm4
+	vpsllvd	%ymm1, %ymm4, %ymm4
+	vpshufb	%ymm2, %ymm4, %ymm4
+	vpsllw	$12, %ymm4, %ymm5
+	vpsllw	$8, %ymm4, %ymm6
+	vpsllw	$4, %ymm4, %ymm7
+	vpsraw	$15, %ymm5, %ymm5
+	vpsraw	$15, %ymm6, %ymm6
+	vpsraw	$15, %ymm7, %ymm7
+	vpsraw	$15, %ymm4, %ymm4
+	vpand	%ymm0, %ymm5, %ymm5
+	vpand	%ymm0, %ymm6, %ymm6
+	vpand	%ymm0, %ymm7, %ymm7
+	vpand	%ymm0, %ymm4, %ymm4
+	vpunpcklqdq	%ymm6, %ymm5, %ymm8
+	vpunpckhqdq	%ymm6, %ymm5, %ymm5
+	vpunpcklqdq	%ymm4, %ymm7, %ymm6
+	vpunpckhqdq	%ymm4, %ymm7, %ymm4
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vperm2i128	$32, %ymm4, %ymm5, %ymm8
+	vperm2i128	$49, %ymm4, %ymm5, %ymm4
+	vmovdqu	%ymm7, 64(%rax)
+	vmovdqu	%ymm8, 96(%rax)
+	vmovdqu	%ymm6, 320(%rax)
+	vmovdqu	%ymm4, 352(%rax)
+	vpshufd	$-86, %ymm3, %ymm4
+	vpsllvd	%ymm1, %ymm4, %ymm4
+	vpshufb	%ymm2, %ymm4, %ymm4
+	vpsllw	$12, %ymm4, %ymm5
+	vpsllw	$8, %ymm4, %ymm6
+	vpsllw	$4, %ymm4, %ymm7
+	vpsraw	$15, %ymm5, %ymm5
+	vpsraw	$15, %ymm6, %ymm6
+	vpsraw	$15, %ymm7, %ymm7
+	vpsraw	$15, %ymm4, %ymm4
+	vpand	%ymm0, %ymm5, %ymm5
+	vpand	%ymm0, %ymm6, %ymm6
+	vpand	%ymm0, %ymm7, %ymm7
+	vpand	%ymm0, %ymm4, %ymm4
+	vpunpcklqdq	%ymm6, %ymm5, %ymm8
+	vpunpckhqdq	%ymm6, %ymm5, %ymm5
+	vpunpcklqdq	%ymm4, %ymm7, %ymm6
+	vpunpckhqdq	%ymm4, %ymm7, %ymm4
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vperm2i128	$32, %ymm4, %ymm5, %ymm8
+	vperm2i128	$49, %ymm4, %ymm5, %ymm4
+	vmovdqu	%ymm7, 128(%rax)
+	vmovdqu	%ymm8, 160(%rax)
+	vmovdqu	%ymm6, 384(%rax)
+	vmovdqu	%ymm4, 416(%rax)
+	vpshufd	$-1, %ymm3, %ymm3
+	vpsllvd	%ymm1, %ymm3, %ymm1
+	vpshufb	%ymm2, %ymm1, %ymm1
+	vpsllw	$12, %ymm1, %ymm2
+	vpsllw	$8, %ymm1, %ymm3
+	vpsllw	$4, %ymm1, %ymm4
+	vpsraw	$15, %ymm2, %ymm2
+	vpsraw	$15, %ymm3, %ymm3
+	vpsraw	$15, %ymm4, %ymm4
+	vpsraw	$15, %ymm1, %ymm1
+	vpand	%ymm0, %ymm2, %ymm2
+	vpand	%ymm0, %ymm3, %ymm3
+	vpand	%ymm0, %ymm4, %ymm4
+	vpand	%ymm0, %ymm1, %ymm0
+	vpunpcklqdq	%ymm3, %ymm2, %ymm1
+	vpunpckhqdq	%ymm3, %ymm2, %ymm2
+	vpunpcklqdq	%ymm0, %ymm4, %ymm3
+	vpunpckhqdq	%ymm0, %ymm4, %ymm0
+	vperm2i128	$32, %ymm3, %ymm1, %ymm4
+	vperm2i128	$49, %ymm3, %ymm1, %ymm1
+	vperm2i128	$32, %ymm0, %ymm2, %ymm3
+	vperm2i128	$49, %ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm4, 192(%rax)
+	vmovdqu	%ymm3, 224(%rax)
+	vmovdqu	%ymm1, 448(%rax)
+	vmovdqu	%ymm0, 480(%rax)
+	ret
+L_poly_frommont$1:
+	leaq	glob_data + 480(%rip), %rcx
+	vmovdqu	(%rcx), %ymm0
+	leaq	glob_data + 448(%rip), %rcx
+	vmovdqu	(%rcx), %ymm1
+	leaq	glob_data + 192(%rip), %rcx
+	vmovdqu	(%rcx), %ymm2
+	vmovdqu	(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, (%rax)
+	vmovdqu	32(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 32(%rax)
+	vmovdqu	64(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 64(%rax)
+	vmovdqu	96(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 96(%rax)
+	vmovdqu	128(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 128(%rax)
+	vmovdqu	160(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 160(%rax)
+	vmovdqu	192(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 192(%rax)
+	vmovdqu	224(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 224(%rax)
+	vmovdqu	256(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 256(%rax)
+	vmovdqu	288(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 288(%rax)
+	vmovdqu	320(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 320(%rax)
+	vmovdqu	352(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 352(%rax)
+	vmovdqu	384(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 384(%rax)
+	vmovdqu	416(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 416(%rax)
+	vmovdqu	448(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 448(%rax)
+	vmovdqu	480(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm1, %ymm2, %ymm1
+	vpmulhw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm4, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	ret
+L_poly_frombytes$1:
+	leaq	glob_data + 320(%rip), %r9
+	vmovdqu	(%r9), %ymm0
+	vmovdqu	(%rsi), %ymm1
+	vmovdqu	32(%rsi), %ymm2
+	vmovdqu	64(%rsi), %ymm3
+	vmovdqu	96(%rsi), %ymm4
+	vmovdqu	128(%rsi), %ymm5
+	vmovdqu	160(%rsi), %ymm6
+	vperm2i128	$32, %ymm4, %ymm1, %ymm7
+	vperm2i128	$49, %ymm4, %ymm1, %ymm4
+	vperm2i128	$32, %ymm5, %ymm2, %ymm8
+	vperm2i128	$49, %ymm5, %ymm2, %ymm1
+	vperm2i128	$32, %ymm6, %ymm3, %ymm5
+	vperm2i128	$49, %ymm6, %ymm3, %ymm3
+	vpunpcklqdq	%ymm1, %ymm7, %ymm6
+	vpunpckhqdq	%ymm1, %ymm7, %ymm1
+	vpunpcklqdq	%ymm5, %ymm4, %ymm2
+	vpunpckhqdq	%ymm5, %ymm4, %ymm5
+	vpunpcklqdq	%ymm3, %ymm8, %ymm7
+	vpunpckhqdq	%ymm3, %ymm8, %ymm3
+	vmovsldup	%ymm5, %ymm4
+	vpblendd	$-86, %ymm4, %ymm6, %ymm4
+	vpsrlq	$32, %ymm6, %ymm6
+	vpblendd	$-86, %ymm5, %ymm6, %ymm5
+	vmovsldup	%ymm7, %ymm6
+	vpblendd	$-86, %ymm6, %ymm1, %ymm6
+	vpsrlq	$32, %ymm1, %ymm1
+	vpblendd	$-86, %ymm7, %ymm1, %ymm7
+	vmovsldup	%ymm3, %ymm1
+	vpblendd	$-86, %ymm1, %ymm2, %ymm1
+	vpsrlq	$32, %ymm2, %ymm2
+	vpblendd	$-86, %ymm3, %ymm2, %ymm2
+	vpslld	$16, %ymm7, %ymm3
+	vpblendw	$-86, %ymm3, %ymm4, %ymm3
+	vpsrld	$16, %ymm4, %ymm4
+	vpblendw	$-86, %ymm7, %ymm4, %ymm4
+	vpslld	$16, %ymm1, %ymm7
+	vpblendw	$-86, %ymm7, %ymm5, %ymm7
+	vpsrld	$16, %ymm5, %ymm5
+	vpblendw	$-86, %ymm1, %ymm5, %ymm1
+	vpslld	$16, %ymm2, %ymm5
+	vpblendw	$-86, %ymm5, %ymm6, %ymm5
+	vpsrld	$16, %ymm6, %ymm6
+	vpblendw	$-86, %ymm2, %ymm6, %ymm2
+	vpsrlw	$12, %ymm3, %ymm6
+	vpsllw	$4, %ymm4, %ymm8
+	vpor	%ymm8, %ymm6, %ymm6
+	vpand	%ymm3, %ymm0, %ymm3
+	vpand	%ymm6, %ymm0, %ymm6
+	vpsrlw	$8, %ymm4, %ymm4
+	vpsllw	$8, %ymm7, %ymm8
+	vpor	%ymm8, %ymm4, %ymm4
+	vpand	%ymm4, %ymm0, %ymm4
+	vpsrlw	$4, %ymm7, %ymm7
+	vpand	%ymm7, %ymm0, %ymm7
+	vpsrlw	$12, %ymm1, %ymm8
+	vpsllw	$4, %ymm5, %ymm9
+	vpor	%ymm9, %ymm8, %ymm8
+	vpand	%ymm1, %ymm0, %ymm1
+	vpand	%ymm8, %ymm0, %ymm8
+	vpsrlw	$8, %ymm5, %ymm5
+	vpsllw	$8, %ymm2, %ymm9
+	vpor	%ymm9, %ymm5, %ymm5
+	vpand	%ymm5, %ymm0, %ymm5
+	vpsrlw	$4, %ymm2, %ymm2
+	vpand	%ymm2, %ymm0, %ymm2
+	vmovdqu	%ymm3, (%r8)
+	vmovdqu	%ymm6, 32(%r8)
+	vmovdqu	%ymm4, 64(%r8)
+	vmovdqu	%ymm7, 96(%r8)
+	vmovdqu	%ymm1, 128(%r8)
+	vmovdqu	%ymm8, 160(%r8)
+	vmovdqu	%ymm5, 192(%r8)
+	vmovdqu	%ymm2, 224(%r8)
+	vmovdqu	192(%rsi), %ymm1
+	vmovdqu	224(%rsi), %ymm2
+	vmovdqu	256(%rsi), %ymm3
+	vmovdqu	288(%rsi), %ymm4
+	vmovdqu	320(%rsi), %ymm5
+	vmovdqu	352(%rsi), %ymm6
+	vperm2i128	$32, %ymm4, %ymm1, %ymm7
+	vperm2i128	$49, %ymm4, %ymm1, %ymm4
+	vperm2i128	$32, %ymm5, %ymm2, %ymm8
+	vperm2i128	$49, %ymm5, %ymm2, %ymm1
+	vperm2i128	$32, %ymm6, %ymm3, %ymm5
+	vperm2i128	$49, %ymm6, %ymm3, %ymm3
+	vpunpcklqdq	%ymm1, %ymm7, %ymm6
+	vpunpckhqdq	%ymm1, %ymm7, %ymm1
+	vpunpcklqdq	%ymm5, %ymm4, %ymm2
+	vpunpckhqdq	%ymm5, %ymm4, %ymm5
+	vpunpcklqdq	%ymm3, %ymm8, %ymm7
+	vpunpckhqdq	%ymm3, %ymm8, %ymm3
+	vmovsldup	%ymm5, %ymm4
+	vpblendd	$-86, %ymm4, %ymm6, %ymm4
+	vpsrlq	$32, %ymm6, %ymm6
+	vpblendd	$-86, %ymm5, %ymm6, %ymm5
+	vmovsldup	%ymm7, %ymm6
+	vpblendd	$-86, %ymm6, %ymm1, %ymm6
+	vpsrlq	$32, %ymm1, %ymm1
+	vpblendd	$-86, %ymm7, %ymm1, %ymm7
+	vmovsldup	%ymm3, %ymm1
+	vpblendd	$-86, %ymm1, %ymm2, %ymm1
+	vpsrlq	$32, %ymm2, %ymm2
+	vpblendd	$-86, %ymm3, %ymm2, %ymm2
+	vpslld	$16, %ymm7, %ymm3
+	vpblendw	$-86, %ymm3, %ymm4, %ymm3
+	vpsrld	$16, %ymm4, %ymm4
+	vpblendw	$-86, %ymm7, %ymm4, %ymm4
+	vpslld	$16, %ymm1, %ymm7
+	vpblendw	$-86, %ymm7, %ymm5, %ymm7
+	vpsrld	$16, %ymm5, %ymm5
+	vpblendw	$-86, %ymm1, %ymm5, %ymm1
+	vpslld	$16, %ymm2, %ymm5
+	vpblendw	$-86, %ymm5, %ymm6, %ymm5
+	vpsrld	$16, %ymm6, %ymm6
+	vpblendw	$-86, %ymm2, %ymm6, %ymm2
+	vpsrlw	$12, %ymm3, %ymm6
+	vpsllw	$4, %ymm4, %ymm8
+	vpor	%ymm8, %ymm6, %ymm6
+	vpand	%ymm3, %ymm0, %ymm3
+	vpand	%ymm6, %ymm0, %ymm6
+	vpsrlw	$8, %ymm4, %ymm4
+	vpsllw	$8, %ymm7, %ymm8
+	vpor	%ymm8, %ymm4, %ymm4
+	vpand	%ymm4, %ymm0, %ymm4
+	vpsrlw	$4, %ymm7, %ymm7
+	vpand	%ymm7, %ymm0, %ymm7
+	vpsrlw	$12, %ymm1, %ymm8
+	vpsllw	$4, %ymm5, %ymm9
+	vpor	%ymm9, %ymm8, %ymm8
+	vpand	%ymm1, %ymm0, %ymm1
+	vpand	%ymm8, %ymm0, %ymm8
+	vpsrlw	$8, %ymm5, %ymm5
+	vpsllw	$8, %ymm2, %ymm9
+	vpor	%ymm9, %ymm5, %ymm5
+	vpand	%ymm5, %ymm0, %ymm5
+	vpsrlw	$4, %ymm2, %ymm2
+	vpand	%ymm2, %ymm0, %ymm0
+	vmovdqu	%ymm3, 256(%r8)
+	vmovdqu	%ymm6, 288(%r8)
+	vmovdqu	%ymm4, 320(%r8)
+	vmovdqu	%ymm7, 352(%r8)
+	vmovdqu	%ymm1, 384(%r8)
+	vmovdqu	%ymm8, 416(%r8)
+	vmovdqu	%ymm5, 448(%r8)
+	vmovdqu	%ymm0, 480(%r8)
+	ret
+L_poly_decompress$1:
+	leaq	glob_data + 480(%rip), %rdi
+	vmovdqu	(%rdi), %ymm0
+	leaq	glob_data + 128(%rip), %rdi
+	vmovdqu	(%rdi), %ymm1
+	vpbroadcastd	glob_data + 6444(%rip), %ymm2
+	vpbroadcastd	glob_data + 6440(%rip), %ymm3
+	vpxor	%ymm4, %ymm4, %ymm4
+	movq	(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, (%rcx)
+	movq	8(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 32(%rcx)
+	movq	16(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 64(%rcx)
+	movq	24(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 96(%rcx)
+	movq	32(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 128(%rcx)
+	movq	40(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 160(%rcx)
+	movq	48(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 192(%rcx)
+	movq	56(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 224(%rcx)
+	movq	64(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 256(%rcx)
+	movq	72(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 288(%rcx)
+	movq	80(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 320(%rcx)
+	movq	88(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 352(%rcx)
+	movq	96(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 384(%rcx)
+	movq	104(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 416(%rcx)
+	movq	112(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 448(%rcx)
+	movq	120(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm1
+	vpand	%ymm2, %ymm1, %ymm1
+	vpmullw	%ymm3, %ymm1, %ymm1
+	vpmulhrsw	%ymm0, %ymm1, %ymm0
+	vmovdqu	%ymm0, 480(%rcx)
+	ret
+L_poly_compress_1$1:
+	call	L_poly_csubq$1
+L_poly_compress_1$2:
+	leaq	glob_data + 416(%rip), %rdx
+	vmovdqu	(%rdx), %ymm0
+	vpbroadcastw	glob_data + 6460(%rip), %ymm1
+	vpbroadcastw	glob_data + 6458(%rip), %ymm2
+	vpbroadcastw	glob_data + 6456(%rip), %ymm3
+	vmovdqu	glob_data + 160(%rip), %ymm4
+	vmovdqu	(%rcx), %ymm5
+	vmovdqu	32(%rcx), %ymm6
+	vmovdqu	64(%rcx), %ymm7
+	vmovdqu	96(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm8, %ymm8
+	vpand	%ymm2, %ymm5, %ymm5
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm2, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpackuswb	%ymm8, %ymm7, %ymm6
+	vpmaddubsw	%ymm3, %ymm5, %ymm5
+	vpmaddubsw	%ymm3, %ymm6, %ymm6
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpermd	%ymm5, %ymm4, %ymm5
+	vmovdqu	%ymm5, (%rax)
+	vmovdqu	128(%rcx), %ymm5
+	vmovdqu	160(%rcx), %ymm6
+	vmovdqu	192(%rcx), %ymm7
+	vmovdqu	224(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm8, %ymm8
+	vpand	%ymm2, %ymm5, %ymm5
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm2, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpackuswb	%ymm8, %ymm7, %ymm6
+	vpmaddubsw	%ymm3, %ymm5, %ymm5
+	vpmaddubsw	%ymm3, %ymm6, %ymm6
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpermd	%ymm5, %ymm4, %ymm5
+	vmovdqu	%ymm5, 32(%rax)
+	vmovdqu	256(%rcx), %ymm5
+	vmovdqu	288(%rcx), %ymm6
+	vmovdqu	320(%rcx), %ymm7
+	vmovdqu	352(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm8, %ymm8
+	vpand	%ymm2, %ymm5, %ymm5
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm2, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpackuswb	%ymm8, %ymm7, %ymm6
+	vpmaddubsw	%ymm3, %ymm5, %ymm5
+	vpmaddubsw	%ymm3, %ymm6, %ymm6
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpermd	%ymm5, %ymm4, %ymm5
+	vmovdqu	%ymm5, 64(%rax)
+	vmovdqu	384(%rcx), %ymm5
+	vmovdqu	416(%rcx), %ymm6
+	vmovdqu	448(%rcx), %ymm7
+	vmovdqu	480(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm0
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm0, %ymm0
+	vpand	%ymm2, %ymm5, %ymm1
+	vpand	%ymm2, %ymm6, %ymm5
+	vpand	%ymm2, %ymm7, %ymm6
+	vpand	%ymm2, %ymm0, %ymm0
+	vpackuswb	%ymm5, %ymm1, %ymm1
+	vpackuswb	%ymm0, %ymm6, %ymm0
+	vpmaddubsw	%ymm3, %ymm1, %ymm1
+	vpmaddubsw	%ymm3, %ymm0, %ymm0
+	vpackuswb	%ymm0, %ymm1, %ymm0
+	vpermd	%ymm0, %ymm4, %ymm0
+	vmovdqu	%ymm0, 96(%rax)
+	ret
+L_poly_compress$1:
+	call	L_poly_csubq$1
+L_poly_compress$2:
+	leaq	glob_data + 416(%rip), %rdx
+	vmovdqu	(%rdx), %ymm0
+	vpbroadcastw	glob_data + 6460(%rip), %ymm1
+	vpbroadcastw	glob_data + 6458(%rip), %ymm2
+	vpbroadcastw	glob_data + 6456(%rip), %ymm3
+	vmovdqu	glob_data + 160(%rip), %ymm4
+	vmovdqu	(%rcx), %ymm5
+	vmovdqu	32(%rcx), %ymm6
+	vmovdqu	64(%rcx), %ymm7
+	vmovdqu	96(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm8, %ymm8
+	vpand	%ymm2, %ymm5, %ymm5
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm2, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpackuswb	%ymm8, %ymm7, %ymm6
+	vpmaddubsw	%ymm3, %ymm5, %ymm5
+	vpmaddubsw	%ymm3, %ymm6, %ymm6
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpermd	%ymm5, %ymm4, %ymm5
+	vmovdqu	%ymm5, (%rax)
+	vmovdqu	128(%rcx), %ymm5
+	vmovdqu	160(%rcx), %ymm6
+	vmovdqu	192(%rcx), %ymm7
+	vmovdqu	224(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm8, %ymm8
+	vpand	%ymm2, %ymm5, %ymm5
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm2, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpackuswb	%ymm8, %ymm7, %ymm6
+	vpmaddubsw	%ymm3, %ymm5, %ymm5
+	vpmaddubsw	%ymm3, %ymm6, %ymm6
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpermd	%ymm5, %ymm4, %ymm5
+	vmovdqu	%ymm5, 32(%rax)
+	vmovdqu	256(%rcx), %ymm5
+	vmovdqu	288(%rcx), %ymm6
+	vmovdqu	320(%rcx), %ymm7
+	vmovdqu	352(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm8, %ymm8
+	vpand	%ymm2, %ymm5, %ymm5
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm2, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpackuswb	%ymm8, %ymm7, %ymm6
+	vpmaddubsw	%ymm3, %ymm5, %ymm5
+	vpmaddubsw	%ymm3, %ymm6, %ymm6
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpermd	%ymm5, %ymm4, %ymm5
+	vmovdqu	%ymm5, 64(%rax)
+	vmovdqu	384(%rcx), %ymm5
+	vmovdqu	416(%rcx), %ymm6
+	vmovdqu	448(%rcx), %ymm7
+	vmovdqu	480(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm0
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm0, %ymm0
+	vpand	%ymm2, %ymm5, %ymm1
+	vpand	%ymm2, %ymm6, %ymm5
+	vpand	%ymm2, %ymm7, %ymm6
+	vpand	%ymm2, %ymm0, %ymm0
+	vpackuswb	%ymm5, %ymm1, %ymm1
+	vpackuswb	%ymm0, %ymm6, %ymm0
+	vpmaddubsw	%ymm3, %ymm1, %ymm1
+	vpmaddubsw	%ymm3, %ymm0, %ymm0
+	vpackuswb	%ymm0, %ymm1, %ymm0
+	vpermd	%ymm0, %ymm4, %ymm0
+	vmovdqu	%ymm0, 96(%rax)
+	ret
+L_poly_basemul$1:
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vmovdqu	glob_data + 448(%rip), %ymm1
+	vmovdqu	glob_data + 1584(%rip), %ymm2
+	vmovdqu	glob_data + 1616(%rip), %ymm3
+	vmovdqu	(%rsi), %ymm4
+	vmovdqu	32(%rsi), %ymm5
+	vmovdqu	(%rdi), %ymm6
+	vmovdqu	32(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm8
+	vpmulhw	%ymm5, %ymm3, %ymm9
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm8, %ymm9, %ymm8
+	vpmullw	%ymm6, %ymm4, %ymm10
+	vpmulhw	%ymm6, %ymm4, %ymm11
+	vpunpcklwd	%ymm11, %ymm10, %ymm9
+	vpunpckhwd	%ymm11, %ymm10, %ymm10
+	vpmullw	%ymm7, %ymm4, %ymm12
+	vpmulhw	%ymm7, %ymm4, %ymm4
+	vpunpcklwd	%ymm4, %ymm12, %ymm11
+	vpunpckhwd	%ymm4, %ymm12, %ymm4
+	vpmullw	%ymm6, %ymm5, %ymm12
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm12, %ymm5
+	vpunpckhwd	%ymm6, %ymm12, %ymm6
+	vpmullw	%ymm7, %ymm8, %ymm12
+	vpmulhw	%ymm7, %ymm8, %ymm7
+	vpunpcklwd	%ymm7, %ymm12, %ymm8
+	vpunpckhwd	%ymm7, %ymm12, %ymm12
+	vpaddd	%ymm8, %ymm9, %ymm7
+	vpaddd	%ymm12, %ymm10, %ymm8
+	vpaddd	%ymm11, %ymm5, %ymm5
+	vpaddd	%ymm4, %ymm6, %ymm4
+	vpxor	%ymm9, %ymm9, %ymm9
+	vpblendw	$-86, %ymm9, %ymm7, %ymm6
+	vpblendw	$-86, %ymm9, %ymm8, %ymm10
+	vpackusdw	%ymm10, %ymm6, %ymm6
+	vpsrld	$16, %ymm7, %ymm7
+	vpsrld	$16, %ymm8, %ymm8
+	vpackusdw	%ymm8, %ymm7, %ymm7
+	vpblendw	$-86, %ymm9, %ymm5, %ymm8
+	vpblendw	$-86, %ymm9, %ymm4, %ymm9
+	vpackusdw	%ymm9, %ymm8, %ymm8
+	vpsrld	$16, %ymm5, %ymm5
+	vpsrld	$16, %ymm4, %ymm4
+	vpackusdw	%ymm4, %ymm5, %ymm4
+	vpmullw	%ymm1, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm7, %ymm5
+	vpmullw	%ymm1, %ymm8, %ymm6
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm4, %ymm4
+	vmovdqu	%ymm5, (%rcx)
+	vmovdqu	%ymm4, 32(%rcx)
+	vmovdqu	64(%rsi), %ymm4
+	vmovdqu	96(%rsi), %ymm5
+	vmovdqu	64(%rdi), %ymm6
+	vmovdqu	96(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm2
+	vpmulhw	%ymm5, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpsubw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm6, %ymm4, %ymm8
+	vpmulhw	%ymm6, %ymm4, %ymm9
+	vpunpcklwd	%ymm9, %ymm8, %ymm3
+	vpunpckhwd	%ymm9, %ymm8, %ymm8
+	vpmullw	%ymm7, %ymm4, %ymm9
+	vpmulhw	%ymm7, %ymm4, %ymm10
+	vpunpcklwd	%ymm10, %ymm9, %ymm4
+	vpunpckhwd	%ymm10, %ymm9, %ymm9
+	vpmullw	%ymm6, %ymm5, %ymm10
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm10, %ymm5
+	vpunpckhwd	%ymm6, %ymm10, %ymm6
+	vpmullw	%ymm7, %ymm2, %ymm10
+	vpmulhw	%ymm7, %ymm2, %ymm2
+	vpunpcklwd	%ymm2, %ymm10, %ymm7
+	vpunpckhwd	%ymm2, %ymm10, %ymm2
+	vpsubd	%ymm7, %ymm3, %ymm7
+	vpsubd	%ymm2, %ymm8, %ymm8
+	vpaddd	%ymm4, %ymm5, %ymm2
+	vpaddd	%ymm9, %ymm6, %ymm3
+	vpxor	%ymm5, %ymm5, %ymm5
+	vpblendw	$-86, %ymm5, %ymm7, %ymm4
+	vpblendw	$-86, %ymm5, %ymm8, %ymm6
+	vpackusdw	%ymm6, %ymm4, %ymm4
+	vpsrld	$16, %ymm7, %ymm6
+	vpsrld	$16, %ymm8, %ymm7
+	vpackusdw	%ymm7, %ymm6, %ymm6
+	vpblendw	$-86, %ymm5, %ymm2, %ymm7
+	vpblendw	$-86, %ymm5, %ymm3, %ymm5
+	vpackusdw	%ymm5, %ymm7, %ymm5
+	vpsrld	$16, %ymm2, %ymm2
+	vpsrld	$16, %ymm3, %ymm3
+	vpackusdw	%ymm3, %ymm2, %ymm2
+	vpmullw	%ymm1, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm6, %ymm3
+	vpmullw	%ymm1, %ymm5, %ymm4
+	vpmulhw	%ymm0, %ymm4, %ymm4
+	vpsubw	%ymm4, %ymm2, %ymm2
+	vmovdqu	%ymm3, 64(%rcx)
+	vmovdqu	%ymm2, 96(%rcx)
+	vmovdqu	glob_data + 1648(%rip), %ymm2
+	vmovdqu	glob_data + 1680(%rip), %ymm3
+	vmovdqu	128(%rsi), %ymm4
+	vmovdqu	160(%rsi), %ymm5
+	vmovdqu	128(%rdi), %ymm6
+	vmovdqu	160(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm8
+	vpmulhw	%ymm5, %ymm3, %ymm9
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm8, %ymm9, %ymm8
+	vpmullw	%ymm6, %ymm4, %ymm10
+	vpmulhw	%ymm6, %ymm4, %ymm11
+	vpunpcklwd	%ymm11, %ymm10, %ymm9
+	vpunpckhwd	%ymm11, %ymm10, %ymm10
+	vpmullw	%ymm7, %ymm4, %ymm12
+	vpmulhw	%ymm7, %ymm4, %ymm4
+	vpunpcklwd	%ymm4, %ymm12, %ymm11
+	vpunpckhwd	%ymm4, %ymm12, %ymm4
+	vpmullw	%ymm6, %ymm5, %ymm12
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm12, %ymm5
+	vpunpckhwd	%ymm6, %ymm12, %ymm6
+	vpmullw	%ymm7, %ymm8, %ymm12
+	vpmulhw	%ymm7, %ymm8, %ymm7
+	vpunpcklwd	%ymm7, %ymm12, %ymm8
+	vpunpckhwd	%ymm7, %ymm12, %ymm12
+	vpaddd	%ymm8, %ymm9, %ymm7
+	vpaddd	%ymm12, %ymm10, %ymm8
+	vpaddd	%ymm11, %ymm5, %ymm5
+	vpaddd	%ymm4, %ymm6, %ymm4
+	vpxor	%ymm9, %ymm9, %ymm9
+	vpblendw	$-86, %ymm9, %ymm7, %ymm6
+	vpblendw	$-86, %ymm9, %ymm8, %ymm10
+	vpackusdw	%ymm10, %ymm6, %ymm6
+	vpsrld	$16, %ymm7, %ymm7
+	vpsrld	$16, %ymm8, %ymm8
+	vpackusdw	%ymm8, %ymm7, %ymm7
+	vpblendw	$-86, %ymm9, %ymm5, %ymm8
+	vpblendw	$-86, %ymm9, %ymm4, %ymm9
+	vpackusdw	%ymm9, %ymm8, %ymm8
+	vpsrld	$16, %ymm5, %ymm5
+	vpsrld	$16, %ymm4, %ymm4
+	vpackusdw	%ymm4, %ymm5, %ymm4
+	vpmullw	%ymm1, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm7, %ymm5
+	vpmullw	%ymm1, %ymm8, %ymm6
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm4, %ymm4
+	vmovdqu	%ymm5, 128(%rcx)
+	vmovdqu	%ymm4, 160(%rcx)
+	vmovdqu	192(%rsi), %ymm4
+	vmovdqu	224(%rsi), %ymm5
+	vmovdqu	192(%rdi), %ymm6
+	vmovdqu	224(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm2
+	vpmulhw	%ymm5, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpsubw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm6, %ymm4, %ymm8
+	vpmulhw	%ymm6, %ymm4, %ymm9
+	vpunpcklwd	%ymm9, %ymm8, %ymm3
+	vpunpckhwd	%ymm9, %ymm8, %ymm8
+	vpmullw	%ymm7, %ymm4, %ymm9
+	vpmulhw	%ymm7, %ymm4, %ymm10
+	vpunpcklwd	%ymm10, %ymm9, %ymm4
+	vpunpckhwd	%ymm10, %ymm9, %ymm9
+	vpmullw	%ymm6, %ymm5, %ymm10
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm10, %ymm5
+	vpunpckhwd	%ymm6, %ymm10, %ymm6
+	vpmullw	%ymm7, %ymm2, %ymm10
+	vpmulhw	%ymm7, %ymm2, %ymm2
+	vpunpcklwd	%ymm2, %ymm10, %ymm7
+	vpunpckhwd	%ymm2, %ymm10, %ymm2
+	vpsubd	%ymm7, %ymm3, %ymm7
+	vpsubd	%ymm2, %ymm8, %ymm8
+	vpaddd	%ymm4, %ymm5, %ymm2
+	vpaddd	%ymm9, %ymm6, %ymm3
+	vpxor	%ymm5, %ymm5, %ymm5
+	vpblendw	$-86, %ymm5, %ymm7, %ymm4
+	vpblendw	$-86, %ymm5, %ymm8, %ymm6
+	vpackusdw	%ymm6, %ymm4, %ymm4
+	vpsrld	$16, %ymm7, %ymm6
+	vpsrld	$16, %ymm8, %ymm7
+	vpackusdw	%ymm7, %ymm6, %ymm6
+	vpblendw	$-86, %ymm5, %ymm2, %ymm7
+	vpblendw	$-86, %ymm5, %ymm3, %ymm5
+	vpackusdw	%ymm5, %ymm7, %ymm5
+	vpsrld	$16, %ymm2, %ymm2
+	vpsrld	$16, %ymm3, %ymm3
+	vpackusdw	%ymm3, %ymm2, %ymm2
+	vpmullw	%ymm1, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm6, %ymm3
+	vpmullw	%ymm1, %ymm5, %ymm4
+	vpmulhw	%ymm0, %ymm4, %ymm4
+	vpsubw	%ymm4, %ymm2, %ymm2
+	vmovdqu	%ymm3, 192(%rcx)
+	vmovdqu	%ymm2, 224(%rcx)
+	vmovdqu	glob_data + 1976(%rip), %ymm2
+	vmovdqu	glob_data + 2008(%rip), %ymm3
+	vmovdqu	256(%rsi), %ymm4
+	vmovdqu	288(%rsi), %ymm5
+	vmovdqu	256(%rdi), %ymm6
+	vmovdqu	288(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm8
+	vpmulhw	%ymm5, %ymm3, %ymm9
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm8, %ymm9, %ymm8
+	vpmullw	%ymm6, %ymm4, %ymm10
+	vpmulhw	%ymm6, %ymm4, %ymm11
+	vpunpcklwd	%ymm11, %ymm10, %ymm9
+	vpunpckhwd	%ymm11, %ymm10, %ymm10
+	vpmullw	%ymm7, %ymm4, %ymm12
+	vpmulhw	%ymm7, %ymm4, %ymm4
+	vpunpcklwd	%ymm4, %ymm12, %ymm11
+	vpunpckhwd	%ymm4, %ymm12, %ymm4
+	vpmullw	%ymm6, %ymm5, %ymm12
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm12, %ymm5
+	vpunpckhwd	%ymm6, %ymm12, %ymm6
+	vpmullw	%ymm7, %ymm8, %ymm12
+	vpmulhw	%ymm7, %ymm8, %ymm7
+	vpunpcklwd	%ymm7, %ymm12, %ymm8
+	vpunpckhwd	%ymm7, %ymm12, %ymm12
+	vpaddd	%ymm8, %ymm9, %ymm7
+	vpaddd	%ymm12, %ymm10, %ymm8
+	vpaddd	%ymm11, %ymm5, %ymm5
+	vpaddd	%ymm4, %ymm6, %ymm4
+	vpxor	%ymm9, %ymm9, %ymm9
+	vpblendw	$-86, %ymm9, %ymm7, %ymm6
+	vpblendw	$-86, %ymm9, %ymm8, %ymm10
+	vpackusdw	%ymm10, %ymm6, %ymm6
+	vpsrld	$16, %ymm7, %ymm7
+	vpsrld	$16, %ymm8, %ymm8
+	vpackusdw	%ymm8, %ymm7, %ymm7
+	vpblendw	$-86, %ymm9, %ymm5, %ymm8
+	vpblendw	$-86, %ymm9, %ymm4, %ymm9
+	vpackusdw	%ymm9, %ymm8, %ymm8
+	vpsrld	$16, %ymm5, %ymm5
+	vpsrld	$16, %ymm4, %ymm4
+	vpackusdw	%ymm4, %ymm5, %ymm4
+	vpmullw	%ymm1, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm7, %ymm5
+	vpmullw	%ymm1, %ymm8, %ymm6
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm4, %ymm4
+	vmovdqu	%ymm5, 256(%rcx)
+	vmovdqu	%ymm4, 288(%rcx)
+	vmovdqu	320(%rsi), %ymm4
+	vmovdqu	352(%rsi), %ymm5
+	vmovdqu	320(%rdi), %ymm6
+	vmovdqu	352(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm2
+	vpmulhw	%ymm5, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpsubw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm6, %ymm4, %ymm8
+	vpmulhw	%ymm6, %ymm4, %ymm9
+	vpunpcklwd	%ymm9, %ymm8, %ymm3
+	vpunpckhwd	%ymm9, %ymm8, %ymm8
+	vpmullw	%ymm7, %ymm4, %ymm9
+	vpmulhw	%ymm7, %ymm4, %ymm10
+	vpunpcklwd	%ymm10, %ymm9, %ymm4
+	vpunpckhwd	%ymm10, %ymm9, %ymm9
+	vpmullw	%ymm6, %ymm5, %ymm10
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm10, %ymm5
+	vpunpckhwd	%ymm6, %ymm10, %ymm6
+	vpmullw	%ymm7, %ymm2, %ymm10
+	vpmulhw	%ymm7, %ymm2, %ymm2
+	vpunpcklwd	%ymm2, %ymm10, %ymm7
+	vpunpckhwd	%ymm2, %ymm10, %ymm2
+	vpsubd	%ymm7, %ymm3, %ymm7
+	vpsubd	%ymm2, %ymm8, %ymm8
+	vpaddd	%ymm4, %ymm5, %ymm2
+	vpaddd	%ymm9, %ymm6, %ymm3
+	vpxor	%ymm5, %ymm5, %ymm5
+	vpblendw	$-86, %ymm5, %ymm7, %ymm4
+	vpblendw	$-86, %ymm5, %ymm8, %ymm6
+	vpackusdw	%ymm6, %ymm4, %ymm4
+	vpsrld	$16, %ymm7, %ymm6
+	vpsrld	$16, %ymm8, %ymm7
+	vpackusdw	%ymm7, %ymm6, %ymm6
+	vpblendw	$-86, %ymm5, %ymm2, %ymm7
+	vpblendw	$-86, %ymm5, %ymm3, %ymm5
+	vpackusdw	%ymm5, %ymm7, %ymm5
+	vpsrld	$16, %ymm2, %ymm2
+	vpsrld	$16, %ymm3, %ymm3
+	vpackusdw	%ymm3, %ymm2, %ymm2
+	vpmullw	%ymm1, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm6, %ymm3
+	vpmullw	%ymm1, %ymm5, %ymm4
+	vpmulhw	%ymm0, %ymm4, %ymm4
+	vpsubw	%ymm4, %ymm2, %ymm2
+	vmovdqu	%ymm3, 320(%rcx)
+	vmovdqu	%ymm2, 352(%rcx)
+	vmovdqu	glob_data + 2040(%rip), %ymm2
+	vmovdqu	glob_data + 2072(%rip), %ymm3
+	vmovdqu	384(%rsi), %ymm4
+	vmovdqu	416(%rsi), %ymm5
+	vmovdqu	384(%rdi), %ymm6
+	vmovdqu	416(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm8
+	vpmulhw	%ymm5, %ymm3, %ymm9
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm8, %ymm9, %ymm8
+	vpmullw	%ymm6, %ymm4, %ymm10
+	vpmulhw	%ymm6, %ymm4, %ymm11
+	vpunpcklwd	%ymm11, %ymm10, %ymm9
+	vpunpckhwd	%ymm11, %ymm10, %ymm10
+	vpmullw	%ymm7, %ymm4, %ymm12
+	vpmulhw	%ymm7, %ymm4, %ymm4
+	vpunpcklwd	%ymm4, %ymm12, %ymm11
+	vpunpckhwd	%ymm4, %ymm12, %ymm4
+	vpmullw	%ymm6, %ymm5, %ymm12
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm12, %ymm5
+	vpunpckhwd	%ymm6, %ymm12, %ymm6
+	vpmullw	%ymm7, %ymm8, %ymm12
+	vpmulhw	%ymm7, %ymm8, %ymm7
+	vpunpcklwd	%ymm7, %ymm12, %ymm8
+	vpunpckhwd	%ymm7, %ymm12, %ymm12
+	vpaddd	%ymm8, %ymm9, %ymm7
+	vpaddd	%ymm12, %ymm10, %ymm8
+	vpaddd	%ymm11, %ymm5, %ymm5
+	vpaddd	%ymm4, %ymm6, %ymm4
+	vpxor	%ymm9, %ymm9, %ymm9
+	vpblendw	$-86, %ymm9, %ymm7, %ymm6
+	vpblendw	$-86, %ymm9, %ymm8, %ymm10
+	vpackusdw	%ymm10, %ymm6, %ymm6
+	vpsrld	$16, %ymm7, %ymm7
+	vpsrld	$16, %ymm8, %ymm8
+	vpackusdw	%ymm8, %ymm7, %ymm7
+	vpblendw	$-86, %ymm9, %ymm5, %ymm8
+	vpblendw	$-86, %ymm9, %ymm4, %ymm9
+	vpackusdw	%ymm9, %ymm8, %ymm8
+	vpsrld	$16, %ymm5, %ymm5
+	vpsrld	$16, %ymm4, %ymm4
+	vpackusdw	%ymm4, %ymm5, %ymm4
+	vpmullw	%ymm1, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm7, %ymm5
+	vpmullw	%ymm1, %ymm8, %ymm6
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm4, %ymm4
+	vmovdqu	%ymm5, 384(%rcx)
+	vmovdqu	%ymm4, 416(%rcx)
+	vmovdqu	448(%rsi), %ymm4
+	vmovdqu	480(%rsi), %ymm5
+	vmovdqu	448(%rdi), %ymm6
+	vmovdqu	480(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm2
+	vpmulhw	%ymm5, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpsubw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm6, %ymm4, %ymm8
+	vpmulhw	%ymm6, %ymm4, %ymm9
+	vpunpcklwd	%ymm9, %ymm8, %ymm3
+	vpunpckhwd	%ymm9, %ymm8, %ymm8
+	vpmullw	%ymm7, %ymm4, %ymm9
+	vpmulhw	%ymm7, %ymm4, %ymm10
+	vpunpcklwd	%ymm10, %ymm9, %ymm4
+	vpunpckhwd	%ymm10, %ymm9, %ymm9
+	vpmullw	%ymm6, %ymm5, %ymm10
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm10, %ymm5
+	vpunpckhwd	%ymm6, %ymm10, %ymm6
+	vpmullw	%ymm7, %ymm2, %ymm10
+	vpmulhw	%ymm7, %ymm2, %ymm2
+	vpunpcklwd	%ymm2, %ymm10, %ymm7
+	vpunpckhwd	%ymm2, %ymm10, %ymm2
+	vpsubd	%ymm7, %ymm3, %ymm7
+	vpsubd	%ymm2, %ymm8, %ymm8
+	vpaddd	%ymm4, %ymm5, %ymm2
+	vpaddd	%ymm9, %ymm6, %ymm3
+	vpxor	%ymm5, %ymm5, %ymm5
+	vpblendw	$-86, %ymm5, %ymm7, %ymm4
+	vpblendw	$-86, %ymm5, %ymm8, %ymm6
+	vpackusdw	%ymm6, %ymm4, %ymm4
+	vpsrld	$16, %ymm7, %ymm6
+	vpsrld	$16, %ymm8, %ymm7
+	vpackusdw	%ymm7, %ymm6, %ymm6
+	vpblendw	$-86, %ymm5, %ymm2, %ymm7
+	vpblendw	$-86, %ymm5, %ymm3, %ymm5
+	vpackusdw	%ymm5, %ymm7, %ymm5
+	vpsrld	$16, %ymm2, %ymm2
+	vpsrld	$16, %ymm3, %ymm3
+	vpackusdw	%ymm3, %ymm2, %ymm2
+	vpmullw	%ymm1, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm6, %ymm3
+	vpmullw	%ymm1, %ymm5, %ymm1
+	vpmulhw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm3, 448(%rcx)
+	vmovdqu	%ymm0, 480(%rcx)
+	ret
+L_poly_csubq$1:
+	vmovdqu	glob_data + 480(%rip), %ymm0
+	vmovdqu	(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, (%rcx)
+	vmovdqu	32(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 32(%rcx)
+	vmovdqu	64(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 64(%rcx)
+	vmovdqu	96(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 96(%rcx)
+	vmovdqu	128(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 128(%rcx)
+	vmovdqu	160(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 160(%rcx)
+	vmovdqu	192(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 192(%rcx)
+	vmovdqu	224(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 224(%rcx)
+	vmovdqu	256(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 256(%rcx)
+	vmovdqu	288(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 288(%rcx)
+	vmovdqu	320(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 320(%rcx)
+	vmovdqu	352(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 352(%rcx)
+	vmovdqu	384(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 384(%rcx)
+	vmovdqu	416(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 416(%rcx)
+	vmovdqu	448(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 448(%rcx)
+	vmovdqu	480(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm0
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 480(%rcx)
+	ret
+L_poly_add2$1:
+	vmovdqu	(%rcx), %ymm0
+	vmovdqu	(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, (%rcx)
+	vmovdqu	32(%rcx), %ymm0
+	vmovdqu	32(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rcx)
+	vmovdqu	64(%rcx), %ymm0
+	vmovdqu	64(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 64(%rcx)
+	vmovdqu	96(%rcx), %ymm0
+	vmovdqu	96(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 96(%rcx)
+	vmovdqu	128(%rcx), %ymm0
+	vmovdqu	128(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 128(%rcx)
+	vmovdqu	160(%rcx), %ymm0
+	vmovdqu	160(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 160(%rcx)
+	vmovdqu	192(%rcx), %ymm0
+	vmovdqu	192(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 192(%rcx)
+	vmovdqu	224(%rcx), %ymm0
+	vmovdqu	224(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 224(%rcx)
+	vmovdqu	256(%rcx), %ymm0
+	vmovdqu	256(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 256(%rcx)
+	vmovdqu	288(%rcx), %ymm0
+	vmovdqu	288(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 288(%rcx)
+	vmovdqu	320(%rcx), %ymm0
+	vmovdqu	320(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 320(%rcx)
+	vmovdqu	352(%rcx), %ymm0
+	vmovdqu	352(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 352(%rcx)
+	vmovdqu	384(%rcx), %ymm0
+	vmovdqu	384(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 384(%rcx)
+	vmovdqu	416(%rcx), %ymm0
+	vmovdqu	416(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 416(%rcx)
+	vmovdqu	448(%rcx), %ymm0
+	vmovdqu	448(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 448(%rcx)
+	vmovdqu	480(%rcx), %ymm0
+	vmovdqu	480(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 480(%rcx)
+	ret
+L_nttunpack$1:
+	vmovdqu	(%rax), %ymm1
+	vmovdqu	32(%rax), %ymm3
+	vmovdqu	64(%rax), %ymm4
+	vmovdqu	96(%rax), %ymm5
+	vmovdqu	128(%rax), %ymm2
+	vmovdqu	160(%rax), %ymm6
+	vmovdqu	192(%rax), %ymm7
+	vmovdqu	224(%rax), %ymm8
+	vperm2i128	$32, %ymm2, %ymm1, %ymm0
+	vperm2i128	$49, %ymm2, %ymm1, %ymm1
+	vperm2i128	$32, %ymm6, %ymm3, %ymm2
+	vperm2i128	$49, %ymm6, %ymm3, %ymm3
+	vperm2i128	$32, %ymm7, %ymm4, %ymm6
+	vperm2i128	$49, %ymm7, %ymm4, %ymm7
+	vperm2i128	$32, %ymm8, %ymm5, %ymm9
+	vperm2i128	$49, %ymm8, %ymm5, %ymm10
+	vpunpcklqdq	%ymm6, %ymm0, %ymm4
+	vpunpckhqdq	%ymm6, %ymm0, %ymm5
+	vpunpcklqdq	%ymm7, %ymm1, %ymm6
+	vpunpckhqdq	%ymm7, %ymm1, %ymm7
+	vpunpcklqdq	%ymm9, %ymm2, %ymm0
+	vpunpckhqdq	%ymm9, %ymm2, %ymm2
+	vpunpcklqdq	%ymm10, %ymm3, %ymm8
+	vpunpckhqdq	%ymm10, %ymm3, %ymm3
+	vmovsldup	%ymm0, %ymm1
+	vpblendd	$-86, %ymm1, %ymm4, %ymm9
+	vpsrlq	$32, %ymm4, %ymm1
+	vpblendd	$-86, %ymm0, %ymm1, %ymm0
+	vmovsldup	%ymm2, %ymm1
+	vpblendd	$-86, %ymm1, %ymm5, %ymm1
+	vpsrlq	$32, %ymm5, %ymm4
+	vpblendd	$-86, %ymm2, %ymm4, %ymm2
+	vmovsldup	%ymm8, %ymm4
+	vpblendd	$-86, %ymm4, %ymm6, %ymm4
+	vpsrlq	$32, %ymm6, %ymm5
+	vpblendd	$-86, %ymm8, %ymm5, %ymm5
+	vmovsldup	%ymm3, %ymm6
+	vpblendd	$-86, %ymm6, %ymm7, %ymm6
+	vpsrlq	$32, %ymm7, %ymm7
+	vpblendd	$-86, %ymm3, %ymm7, %ymm3
+	vpslld	$16, %ymm4, %ymm7
+	vpblendw	$-86, %ymm7, %ymm9, %ymm7
+	vpsrld	$16, %ymm9, %ymm8
+	vpblendw	$-86, %ymm4, %ymm8, %ymm4
+	vpslld	$16, %ymm5, %ymm8
+	vpblendw	$-86, %ymm8, %ymm0, %ymm8
+	vpsrld	$16, %ymm0, %ymm0
+	vpblendw	$-86, %ymm5, %ymm0, %ymm0
+	vpslld	$16, %ymm6, %ymm5
+	vpblendw	$-86, %ymm5, %ymm1, %ymm5
+	vpsrld	$16, %ymm1, %ymm1
+	vpblendw	$-86, %ymm6, %ymm1, %ymm1
+	vpslld	$16, %ymm3, %ymm6
+	vpblendw	$-86, %ymm6, %ymm2, %ymm6
+	vpsrld	$16, %ymm2, %ymm2
+	vpblendw	$-86, %ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm7, (%rax)
+	vmovdqu	%ymm4, 32(%rax)
+	vmovdqu	%ymm8, 64(%rax)
+	vmovdqu	%ymm0, 96(%rax)
+	vmovdqu	%ymm5, 128(%rax)
+	vmovdqu	%ymm1, 160(%rax)
+	vmovdqu	%ymm6, 192(%rax)
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm1
+	vmovdqu	288(%rax), %ymm3
+	vmovdqu	320(%rax), %ymm4
+	vmovdqu	352(%rax), %ymm5
+	vmovdqu	384(%rax), %ymm2
+	vmovdqu	416(%rax), %ymm6
+	vmovdqu	448(%rax), %ymm7
+	vmovdqu	480(%rax), %ymm8
+	vperm2i128	$32, %ymm2, %ymm1, %ymm0
+	vperm2i128	$49, %ymm2, %ymm1, %ymm1
+	vperm2i128	$32, %ymm6, %ymm3, %ymm2
+	vperm2i128	$49, %ymm6, %ymm3, %ymm3
+	vperm2i128	$32, %ymm7, %ymm4, %ymm6
+	vperm2i128	$49, %ymm7, %ymm4, %ymm7
+	vperm2i128	$32, %ymm8, %ymm5, %ymm9
+	vperm2i128	$49, %ymm8, %ymm5, %ymm10
+	vpunpcklqdq	%ymm6, %ymm0, %ymm4
+	vpunpckhqdq	%ymm6, %ymm0, %ymm5
+	vpunpcklqdq	%ymm7, %ymm1, %ymm6
+	vpunpckhqdq	%ymm7, %ymm1, %ymm7
+	vpunpcklqdq	%ymm9, %ymm2, %ymm0
+	vpunpckhqdq	%ymm9, %ymm2, %ymm2
+	vpunpcklqdq	%ymm10, %ymm3, %ymm8
+	vpunpckhqdq	%ymm10, %ymm3, %ymm3
+	vmovsldup	%ymm0, %ymm1
+	vpblendd	$-86, %ymm1, %ymm4, %ymm9
+	vpsrlq	$32, %ymm4, %ymm1
+	vpblendd	$-86, %ymm0, %ymm1, %ymm0
+	vmovsldup	%ymm2, %ymm1
+	vpblendd	$-86, %ymm1, %ymm5, %ymm1
+	vpsrlq	$32, %ymm5, %ymm4
+	vpblendd	$-86, %ymm2, %ymm4, %ymm2
+	vmovsldup	%ymm8, %ymm4
+	vpblendd	$-86, %ymm4, %ymm6, %ymm4
+	vpsrlq	$32, %ymm6, %ymm5
+	vpblendd	$-86, %ymm8, %ymm5, %ymm5
+	vmovsldup	%ymm3, %ymm6
+	vpblendd	$-86, %ymm6, %ymm7, %ymm6
+	vpsrlq	$32, %ymm7, %ymm7
+	vpblendd	$-86, %ymm3, %ymm7, %ymm3
+	vpslld	$16, %ymm4, %ymm7
+	vpblendw	$-86, %ymm7, %ymm9, %ymm7
+	vpsrld	$16, %ymm9, %ymm8
+	vpblendw	$-86, %ymm4, %ymm8, %ymm4
+	vpslld	$16, %ymm5, %ymm8
+	vpblendw	$-86, %ymm8, %ymm0, %ymm8
+	vpsrld	$16, %ymm0, %ymm0
+	vpblendw	$-86, %ymm5, %ymm0, %ymm0
+	vpslld	$16, %ymm6, %ymm5
+	vpblendw	$-86, %ymm5, %ymm1, %ymm5
+	vpsrld	$16, %ymm1, %ymm1
+	vpblendw	$-86, %ymm6, %ymm1, %ymm1
+	vpslld	$16, %ymm3, %ymm6
+	vpblendw	$-86, %ymm6, %ymm2, %ymm6
+	vpsrld	$16, %ymm2, %ymm2
+	vpblendw	$-86, %ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm7, 256(%rax)
+	vmovdqu	%ymm4, 288(%rax)
+	vmovdqu	%ymm8, 320(%rax)
+	vmovdqu	%ymm0, 352(%rax)
+	vmovdqu	%ymm5, 384(%rax)
+	vmovdqu	%ymm1, 416(%rax)
+	vmovdqu	%ymm6, 448(%rax)
+	vmovdqu	%ymm2, 480(%rax)
+	ret
+L_shake256_absorb4x_33$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, (%rax)
+	vmovdqu	%ymm0, 32(%rax)
+	vmovdqu	%ymm0, 64(%rax)
+	vmovdqu	%ymm0, 96(%rax)
+	vmovdqu	%ymm0, 128(%rax)
+	vmovdqu	%ymm0, 160(%rax)
+	vmovdqu	%ymm0, 192(%rax)
+	vmovdqu	%ymm0, 224(%rax)
+	vmovdqu	%ymm0, 256(%rax)
+	vmovdqu	%ymm0, 288(%rax)
+	vmovdqu	%ymm0, 320(%rax)
+	vmovdqu	%ymm0, 352(%rax)
+	vmovdqu	%ymm0, 384(%rax)
+	vmovdqu	%ymm0, 416(%rax)
+	vmovdqu	%ymm0, 448(%rax)
+	vmovdqu	%ymm0, 480(%rax)
+	vmovdqu	%ymm0, 512(%rax)
+	vmovdqu	%ymm0, 544(%rax)
+	vmovdqu	%ymm0, 576(%rax)
+	vmovdqu	%ymm0, 608(%rax)
+	vmovdqu	%ymm0, 640(%rax)
+	vmovdqu	%ymm0, 672(%rax)
+	vmovdqu	%ymm0, 704(%rax)
+	vmovdqu	%ymm0, 736(%rax)
+	vmovdqu	%ymm0, 768(%rax)
+	movq	(%rdx), %r11
+	xorq	%r11, (%rax)
+	movq	(%rsi), %r11
+	xorq	%r11, 8(%rax)
+	movq	(%rdi), %r11
+	xorq	%r11, 16(%rax)
+	movq	(%r10), %r11
+	xorq	%r11, 24(%rax)
+	movq	8(%rdx), %r11
+	xorq	%r11, 32(%rax)
+	movq	8(%rsi), %r11
+	xorq	%r11, 40(%rax)
+	movq	8(%rdi), %r11
+	xorq	%r11, 48(%rax)
+	movq	8(%r10), %r11
+	xorq	%r11, 56(%rax)
+	movq	16(%rdx), %r11
+	xorq	%r11, 64(%rax)
+	movq	16(%rsi), %r11
+	xorq	%r11, 72(%rax)
+	movq	16(%rdi), %r11
+	xorq	%r11, 80(%rax)
+	movq	16(%r10), %r11
+	xorq	%r11, 88(%rax)
+	movq	24(%rdx), %r11
+	xorq	%r11, 96(%rax)
+	movq	24(%rsi), %r11
+	xorq	%r11, 104(%rax)
+	movq	24(%rdi), %r11
+	xorq	%r11, 112(%rax)
+	movq	24(%r10), %r11
+	xorq	%r11, 120(%rax)
+	movb	32(%rdx), %dl
+	xorb	%dl, 128(%rax)
+	xorb	$31, 129(%rax)
+	movb	32(%rsi), %dl
+	xorb	%dl, 136(%rax)
+	xorb	$31, 137(%rax)
+	movb	32(%rdi), %dl
+	xorb	%dl, 144(%rax)
+	xorb	$31, 145(%rax)
+	movb	32(%r10), %dl
+	xorb	%dl, 152(%rax)
+	xorb	$31, 153(%rax)
+	vmovdqu	glob_data + 2112(%rip), %ymm0
+	vmovdqu	512(%rax), %ymm1
+	vpxor	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 512(%rax)
+	ret
+L_shake128_absorb4x_34$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, (%rax)
+	vmovdqu	%ymm0, 32(%rax)
+	vmovdqu	%ymm0, 64(%rax)
+	vmovdqu	%ymm0, 96(%rax)
+	vmovdqu	%ymm0, 128(%rax)
+	vmovdqu	%ymm0, 160(%rax)
+	vmovdqu	%ymm0, 192(%rax)
+	vmovdqu	%ymm0, 224(%rax)
+	vmovdqu	%ymm0, 256(%rax)
+	vmovdqu	%ymm0, 288(%rax)
+	vmovdqu	%ymm0, 320(%rax)
+	vmovdqu	%ymm0, 352(%rax)
+	vmovdqu	%ymm0, 384(%rax)
+	vmovdqu	%ymm0, 416(%rax)
+	vmovdqu	%ymm0, 448(%rax)
+	vmovdqu	%ymm0, 480(%rax)
+	vmovdqu	%ymm0, 512(%rax)
+	vmovdqu	%ymm0, 544(%rax)
+	vmovdqu	%ymm0, 576(%rax)
+	vmovdqu	%ymm0, 608(%rax)
+	vmovdqu	%ymm0, 640(%rax)
+	vmovdqu	%ymm0, 672(%rax)
+	vmovdqu	%ymm0, 704(%rax)
+	vmovdqu	%ymm0, 736(%rax)
+	vmovdqu	%ymm0, 768(%rax)
+	movq	(%rcx), %r8
+	xorq	%r8, (%rax)
+	movq	(%rdx), %r8
+	xorq	%r8, 8(%rax)
+	movq	(%rsi), %r8
+	xorq	%r8, 16(%rax)
+	movq	(%rdi), %r8
+	xorq	%r8, 24(%rax)
+	movq	8(%rcx), %r8
+	xorq	%r8, 32(%rax)
+	movq	8(%rdx), %r8
+	xorq	%r8, 40(%rax)
+	movq	8(%rsi), %r8
+	xorq	%r8, 48(%rax)
+	movq	8(%rdi), %r8
+	xorq	%r8, 56(%rax)
+	movq	16(%rcx), %r8
+	xorq	%r8, 64(%rax)
+	movq	16(%rdx), %r8
+	xorq	%r8, 72(%rax)
+	movq	16(%rsi), %r8
+	xorq	%r8, 80(%rax)
+	movq	16(%rdi), %r8
+	xorq	%r8, 88(%rax)
+	movq	24(%rcx), %r8
+	xorq	%r8, 96(%rax)
+	movq	24(%rdx), %r8
+	xorq	%r8, 104(%rax)
+	movq	24(%rsi), %r8
+	xorq	%r8, 112(%rax)
+	movq	24(%rdi), %r8
+	xorq	%r8, 120(%rax)
+	movw	32(%rcx), %cx
+	xorw	%cx, 128(%rax)
+	xorb	$31, 130(%rax)
+	movw	32(%rdx), %cx
+	xorw	%cx, 136(%rax)
+	xorb	$31, 138(%rax)
+	movw	32(%rsi), %cx
+	xorw	%cx, 144(%rax)
+	xorb	$31, 146(%rax)
+	movw	32(%rdi), %cx
+	xorw	%cx, 152(%rax)
+	xorb	$31, 154(%rax)
+	vmovdqu	glob_data + 2112(%rip), %ymm0
+	vmovdqu	640(%rax), %ymm1
+	vpxor	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 640(%rax)
+	ret
+L_keccakf1600_4x_avx2$1:
+	leaq	32(%rsp), %rdx
+	leaq	glob_data + 2208(%rip), %rsi
+	vmovdqu	glob_data + 2144(%rip), %ymm0
+	vmovdqu	glob_data + 2176(%rip), %ymm1
+	movq	$0, %rdi
+L_keccakf1600_4x_avx2$2:
+	vmovdqu	(%rsi,%rdi), %ymm2
+	vmovdqu	(%rax), %ymm3
+	vmovdqu	32(%rax), %ymm4
+	vmovdqu	64(%rax), %ymm5
+	vmovdqu	96(%rax), %ymm6
+	vmovdqu	128(%rax), %ymm7
+	vpxor	160(%rax), %ymm3, %ymm3
+	vpxor	192(%rax), %ymm4, %ymm4
+	vpxor	224(%rax), %ymm5, %ymm5
+	vpxor	256(%rax), %ymm6, %ymm6
+	vpxor	288(%rax), %ymm7, %ymm7
+	vpxor	320(%rax), %ymm3, %ymm3
+	vpxor	352(%rax), %ymm4, %ymm4
+	vpxor	384(%rax), %ymm5, %ymm5
+	vpxor	416(%rax), %ymm6, %ymm6
+	vpxor	448(%rax), %ymm7, %ymm7
+	vpxor	480(%rax), %ymm3, %ymm3
+	vpxor	512(%rax), %ymm4, %ymm4
+	vpxor	544(%rax), %ymm5, %ymm8
+	vpxor	576(%rax), %ymm6, %ymm9
+	vpxor	608(%rax), %ymm7, %ymm10
+	vpxor	640(%rax), %ymm3, %ymm7
+	vpxor	672(%rax), %ymm4, %ymm5
+	vpxor	704(%rax), %ymm8, %ymm6
+	vpxor	736(%rax), %ymm9, %ymm8
+	vpxor	768(%rax), %ymm10, %ymm9
+	vmovdqu	%ymm5, %ymm3
+	vpsllq	$1, %ymm3, %ymm4
+	vpsrlq	$63, %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm3, %ymm3
+	vmovdqu	%ymm6, %ymm4
+	vpsllq	$1, %ymm4, %ymm10
+	vpsrlq	$63, %ymm4, %ymm4
+	vpor	%ymm10, %ymm4, %ymm4
+	vpxor	%ymm7, %ymm4, %ymm4
+	vmovdqu	%ymm8, %ymm10
+	vpsllq	$1, %ymm10, %ymm11
+	vpsrlq	$63, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vpxor	%ymm5, %ymm10, %ymm5
+	vpsllq	$1, %ymm9, %ymm10
+	vpsrlq	$63, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vpxor	%ymm6, %ymm9, %ymm6
+	vpsllq	$1, %ymm7, %ymm9
+	vpsrlq	$63, %ymm7, %ymm7
+	vpor	%ymm9, %ymm7, %ymm7
+	vpxor	%ymm8, %ymm7, %ymm7
+	vmovdqu	(%rax), %ymm8
+	vpxor	%ymm3, %ymm8, %ymm8
+	vmovdqu	192(%rax), %ymm9
+	vpxor	%ymm4, %ymm9, %ymm9
+	vpsllq	$44, %ymm9, %ymm10
+	vpsrlq	$20, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	384(%rax), %ymm10
+	vpxor	%ymm5, %ymm10, %ymm10
+	vpsllq	$43, %ymm10, %ymm11
+	vpsrlq	$21, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vmovdqu	576(%rax), %ymm11
+	vpxor	%ymm6, %ymm11, %ymm11
+	vpsllq	$21, %ymm11, %ymm12
+	vpsrlq	$43, %ymm11, %ymm11
+	vpor	%ymm12, %ymm11, %ymm11
+	vmovdqu	768(%rax), %ymm12
+	vpxor	%ymm7, %ymm12, %ymm12
+	vpsllq	$14, %ymm12, %ymm13
+	vpsrlq	$50, %ymm12, %ymm12
+	vpor	%ymm13, %ymm12, %ymm12
+	vpandn	%ymm10, %ymm9, %ymm13
+	vpxor	%ymm8, %ymm13, %ymm13
+	vpxor	%ymm2, %ymm13, %ymm2
+	vmovdqu	%ymm2, (%rdx)
+	vpandn	%ymm11, %ymm10, %ymm2
+	vpxor	%ymm9, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rdx)
+	vpandn	%ymm12, %ymm11, %ymm2
+	vpxor	%ymm10, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rdx)
+	vpandn	%ymm8, %ymm12, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rdx)
+	vpandn	%ymm9, %ymm8, %ymm2
+	vpxor	%ymm12, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rdx)
+	vmovdqu	96(%rax), %ymm2
+	vpxor	%ymm6, %ymm2, %ymm2
+	vpsllq	$28, %ymm2, %ymm8
+	vpsrlq	$36, %ymm2, %ymm2
+	vpor	%ymm8, %ymm2, %ymm2
+	vmovdqu	288(%rax), %ymm8
+	vpxor	%ymm7, %ymm8, %ymm8
+	vpsllq	$20, %ymm8, %ymm9
+	vpsrlq	$44, %ymm8, %ymm8
+	vpor	%ymm9, %ymm8, %ymm8
+	vmovdqu	320(%rax), %ymm9
+	vpxor	%ymm3, %ymm9, %ymm9
+	vpsllq	$3, %ymm9, %ymm10
+	vpsrlq	$61, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	512(%rax), %ymm10
+	vpxor	%ymm4, %ymm10, %ymm10
+	vpsllq	$45, %ymm10, %ymm11
+	vpsrlq	$19, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vmovdqu	704(%rax), %ymm11
+	vpxor	%ymm5, %ymm11, %ymm11
+	vpsllq	$61, %ymm11, %ymm12
+	vpsrlq	$3, %ymm11, %ymm11
+	vpor	%ymm12, %ymm11, %ymm11
+	vpandn	%ymm9, %ymm8, %ymm12
+	vpxor	%ymm2, %ymm12, %ymm12
+	vmovdqu	%ymm12, 160(%rdx)
+	vpandn	%ymm10, %ymm9, %ymm12
+	vpxor	%ymm8, %ymm12, %ymm12
+	vmovdqu	%ymm12, 192(%rdx)
+	vpandn	%ymm11, %ymm10, %ymm12
+	vpxor	%ymm9, %ymm12, %ymm9
+	vmovdqu	%ymm9, 224(%rdx)
+	vpandn	%ymm2, %ymm11, %ymm9
+	vpxor	%ymm10, %ymm9, %ymm9
+	vmovdqu	%ymm9, 256(%rdx)
+	vpandn	%ymm8, %ymm2, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rdx)
+	vmovdqu	32(%rax), %ymm2
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpsllq	$1, %ymm2, %ymm8
+	vpsrlq	$63, %ymm2, %ymm2
+	vpor	%ymm8, %ymm2, %ymm2
+	vmovdqu	224(%rax), %ymm8
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpsllq	$6, %ymm8, %ymm9
+	vpsrlq	$58, %ymm8, %ymm8
+	vpor	%ymm9, %ymm8, %ymm8
+	vmovdqu	416(%rax), %ymm9
+	vpxor	%ymm6, %ymm9, %ymm9
+	vpsllq	$25, %ymm9, %ymm10
+	vpsrlq	$39, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	608(%rax), %ymm10
+	vpxor	%ymm7, %ymm10, %ymm10
+	vpshufb	%ymm0, %ymm10, %ymm10
+	vmovdqu	640(%rax), %ymm11
+	vpxor	%ymm3, %ymm11, %ymm11
+	vpsllq	$18, %ymm11, %ymm12
+	vpsrlq	$46, %ymm11, %ymm11
+	vpor	%ymm12, %ymm11, %ymm11
+	vpandn	%ymm9, %ymm8, %ymm12
+	vpxor	%ymm2, %ymm12, %ymm12
+	vmovdqu	%ymm12, 320(%rdx)
+	vpandn	%ymm10, %ymm9, %ymm12
+	vpxor	%ymm8, %ymm12, %ymm12
+	vmovdqu	%ymm12, 352(%rdx)
+	vpandn	%ymm11, %ymm10, %ymm12
+	vpxor	%ymm9, %ymm12, %ymm9
+	vmovdqu	%ymm9, 384(%rdx)
+	vpandn	%ymm2, %ymm11, %ymm9
+	vpxor	%ymm10, %ymm9, %ymm9
+	vmovdqu	%ymm9, 416(%rdx)
+	vpandn	%ymm8, %ymm2, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rdx)
+	vmovdqu	128(%rax), %ymm2
+	vpxor	%ymm7, %ymm2, %ymm2
+	vpsllq	$27, %ymm2, %ymm8
+	vpsrlq	$37, %ymm2, %ymm2
+	vpor	%ymm8, %ymm2, %ymm2
+	vmovdqu	160(%rax), %ymm8
+	vpxor	%ymm3, %ymm8, %ymm8
+	vpsllq	$36, %ymm8, %ymm9
+	vpsrlq	$28, %ymm8, %ymm8
+	vpor	%ymm9, %ymm8, %ymm8
+	vmovdqu	352(%rax), %ymm9
+	vpxor	%ymm4, %ymm9, %ymm9
+	vpsllq	$10, %ymm9, %ymm10
+	vpsrlq	$54, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	544(%rax), %ymm10
+	vpxor	%ymm5, %ymm10, %ymm10
+	vpsllq	$15, %ymm10, %ymm11
+	vpsrlq	$49, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vmovdqu	736(%rax), %ymm11
+	vpxor	%ymm6, %ymm11, %ymm11
+	vpshufb	%ymm1, %ymm11, %ymm11
+	vpandn	%ymm9, %ymm8, %ymm12
+	vpxor	%ymm2, %ymm12, %ymm12
+	vmovdqu	%ymm12, 480(%rdx)
+	vpandn	%ymm10, %ymm9, %ymm12
+	vpxor	%ymm8, %ymm12, %ymm12
+	vmovdqu	%ymm12, 512(%rdx)
+	vpandn	%ymm11, %ymm10, %ymm12
+	vpxor	%ymm9, %ymm12, %ymm9
+	vmovdqu	%ymm9, 544(%rdx)
+	vpandn	%ymm2, %ymm11, %ymm9
+	vpxor	%ymm10, %ymm9, %ymm9
+	vmovdqu	%ymm9, 576(%rdx)
+	vpandn	%ymm8, %ymm2, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 608(%rdx)
+	vmovdqu	64(%rax), %ymm2
+	vpxor	%ymm5, %ymm2, %ymm2
+	vpsllq	$62, %ymm2, %ymm5
+	vpsrlq	$2, %ymm2, %ymm2
+	vpor	%ymm5, %ymm2, %ymm2
+	vmovdqu	256(%rax), %ymm5
+	vpxor	%ymm6, %ymm5, %ymm5
+	vpsllq	$55, %ymm5, %ymm6
+	vpsrlq	$9, %ymm5, %ymm5
+	vpor	%ymm6, %ymm5, %ymm5
+	vmovdqu	448(%rax), %ymm6
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpsllq	$39, %ymm6, %ymm7
+	vpsrlq	$25, %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm6
+	vmovdqu	480(%rax), %ymm7
+	vpxor	%ymm3, %ymm7, %ymm3
+	vpsllq	$41, %ymm3, %ymm7
+	vpsrlq	$23, %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm3
+	vmovdqu	672(%rax), %ymm7
+	vpxor	%ymm4, %ymm7, %ymm4
+	vpsllq	$2, %ymm4, %ymm7
+	vpsrlq	$62, %ymm4, %ymm4
+	vpor	%ymm7, %ymm4, %ymm4
+	vpandn	%ymm6, %ymm5, %ymm7
+	vpxor	%ymm2, %ymm7, %ymm7
+	vmovdqu	%ymm7, 640(%rdx)
+	vpandn	%ymm3, %ymm6, %ymm7
+	vpxor	%ymm5, %ymm7, %ymm7
+	vmovdqu	%ymm7, 672(%rdx)
+	vpandn	%ymm4, %ymm3, %ymm7
+	vpxor	%ymm6, %ymm7, %ymm6
+	vmovdqu	%ymm6, 704(%rdx)
+	vpandn	%ymm2, %ymm4, %ymm6
+	vpxor	%ymm3, %ymm6, %ymm3
+	vmovdqu	%ymm3, 736(%rdx)
+	vpandn	%ymm5, %ymm2, %ymm2
+	vpxor	%ymm4, %ymm2, %ymm2
+	vmovdqu	%ymm2, 768(%rdx)
+	vmovdqu	32(%rsi,%rdi), %ymm2
+	vmovdqu	(%rdx), %ymm3
+	vmovdqu	32(%rdx), %ymm4
+	vmovdqu	64(%rdx), %ymm5
+	vmovdqu	96(%rdx), %ymm6
+	vmovdqu	128(%rdx), %ymm7
+	vpxor	160(%rdx), %ymm3, %ymm3
+	vpxor	192(%rdx), %ymm4, %ymm4
+	vpxor	224(%rdx), %ymm5, %ymm5
+	vpxor	256(%rdx), %ymm6, %ymm6
+	vpxor	288(%rdx), %ymm7, %ymm7
+	vpxor	320(%rdx), %ymm3, %ymm3
+	vpxor	352(%rdx), %ymm4, %ymm4
+	vpxor	384(%rdx), %ymm5, %ymm5
+	vpxor	416(%rdx), %ymm6, %ymm6
+	vpxor	448(%rdx), %ymm7, %ymm7
+	vpxor	480(%rdx), %ymm3, %ymm3
+	vpxor	512(%rdx), %ymm4, %ymm4
+	vpxor	544(%rdx), %ymm5, %ymm8
+	vpxor	576(%rdx), %ymm6, %ymm9
+	vpxor	608(%rdx), %ymm7, %ymm10
+	vpxor	640(%rdx), %ymm3, %ymm7
+	vpxor	672(%rdx), %ymm4, %ymm5
+	vpxor	704(%rdx), %ymm8, %ymm6
+	vpxor	736(%rdx), %ymm9, %ymm8
+	vpxor	768(%rdx), %ymm10, %ymm9
+	vmovdqu	%ymm5, %ymm3
+	vpsllq	$1, %ymm3, %ymm4
+	vpsrlq	$63, %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm3, %ymm3
+	vmovdqu	%ymm6, %ymm4
+	vpsllq	$1, %ymm4, %ymm10
+	vpsrlq	$63, %ymm4, %ymm4
+	vpor	%ymm10, %ymm4, %ymm4
+	vpxor	%ymm7, %ymm4, %ymm4
+	vmovdqu	%ymm8, %ymm10
+	vpsllq	$1, %ymm10, %ymm11
+	vpsrlq	$63, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vpxor	%ymm5, %ymm10, %ymm5
+	vpsllq	$1, %ymm9, %ymm10
+	vpsrlq	$63, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vpxor	%ymm6, %ymm9, %ymm6
+	vpsllq	$1, %ymm7, %ymm9
+	vpsrlq	$63, %ymm7, %ymm7
+	vpor	%ymm9, %ymm7, %ymm7
+	vpxor	%ymm8, %ymm7, %ymm7
+	vmovdqu	(%rdx), %ymm8
+	vpxor	%ymm3, %ymm8, %ymm8
+	vmovdqu	192(%rdx), %ymm9
+	vpxor	%ymm4, %ymm9, %ymm9
+	vpsllq	$44, %ymm9, %ymm10
+	vpsrlq	$20, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	384(%rdx), %ymm10
+	vpxor	%ymm5, %ymm10, %ymm10
+	vpsllq	$43, %ymm10, %ymm11
+	vpsrlq	$21, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vmovdqu	576(%rdx), %ymm11
+	vpxor	%ymm6, %ymm11, %ymm11
+	vpsllq	$21, %ymm11, %ymm12
+	vpsrlq	$43, %ymm11, %ymm11
+	vpor	%ymm12, %ymm11, %ymm11
+	vmovdqu	768(%rdx), %ymm12
+	vpxor	%ymm7, %ymm12, %ymm12
+	vpsllq	$14, %ymm12, %ymm13
+	vpsrlq	$50, %ymm12, %ymm12
+	vpor	%ymm13, %ymm12, %ymm12
+	vpandn	%ymm10, %ymm9, %ymm13
+	vpxor	%ymm8, %ymm13, %ymm13
+	vpxor	%ymm2, %ymm13, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vpandn	%ymm11, %ymm10, %ymm2
+	vpxor	%ymm9, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vpandn	%ymm12, %ymm11, %ymm2
+	vpxor	%ymm10, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vpandn	%ymm8, %ymm12, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vpandn	%ymm9, %ymm8, %ymm2
+	vpxor	%ymm12, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	96(%rdx), %ymm2
+	vpxor	%ymm6, %ymm2, %ymm2
+	vpsllq	$28, %ymm2, %ymm8
+	vpsrlq	$36, %ymm2, %ymm2
+	vpor	%ymm8, %ymm2, %ymm2
+	vmovdqu	288(%rdx), %ymm8
+	vpxor	%ymm7, %ymm8, %ymm8
+	vpsllq	$20, %ymm8, %ymm9
+	vpsrlq	$44, %ymm8, %ymm8
+	vpor	%ymm9, %ymm8, %ymm8
+	vmovdqu	320(%rdx), %ymm9
+	vpxor	%ymm3, %ymm9, %ymm9
+	vpsllq	$3, %ymm9, %ymm10
+	vpsrlq	$61, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	512(%rdx), %ymm10
+	vpxor	%ymm4, %ymm10, %ymm10
+	vpsllq	$45, %ymm10, %ymm11
+	vpsrlq	$19, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vmovdqu	704(%rdx), %ymm11
+	vpxor	%ymm5, %ymm11, %ymm11
+	vpsllq	$61, %ymm11, %ymm12
+	vpsrlq	$3, %ymm11, %ymm11
+	vpor	%ymm12, %ymm11, %ymm11
+	vpandn	%ymm9, %ymm8, %ymm12
+	vpxor	%ymm2, %ymm12, %ymm12
+	vmovdqu	%ymm12, 160(%rax)
+	vpandn	%ymm10, %ymm9, %ymm12
+	vpxor	%ymm8, %ymm12, %ymm12
+	vmovdqu	%ymm12, 192(%rax)
+	vpandn	%ymm11, %ymm10, %ymm12
+	vpxor	%ymm9, %ymm12, %ymm9
+	vmovdqu	%ymm9, 224(%rax)
+	vpandn	%ymm2, %ymm11, %ymm9
+	vpxor	%ymm10, %ymm9, %ymm9
+	vmovdqu	%ymm9, 256(%rax)
+	vpandn	%ymm8, %ymm2, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	32(%rdx), %ymm2
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpsllq	$1, %ymm2, %ymm8
+	vpsrlq	$63, %ymm2, %ymm2
+	vpor	%ymm8, %ymm2, %ymm2
+	vmovdqu	224(%rdx), %ymm8
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpsllq	$6, %ymm8, %ymm9
+	vpsrlq	$58, %ymm8, %ymm8
+	vpor	%ymm9, %ymm8, %ymm8
+	vmovdqu	416(%rdx), %ymm9
+	vpxor	%ymm6, %ymm9, %ymm9
+	vpsllq	$25, %ymm9, %ymm10
+	vpsrlq	$39, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	608(%rdx), %ymm10
+	vpxor	%ymm7, %ymm10, %ymm10
+	vpshufb	%ymm0, %ymm10, %ymm10
+	vmovdqu	640(%rdx), %ymm11
+	vpxor	%ymm3, %ymm11, %ymm11
+	vpsllq	$18, %ymm11, %ymm12
+	vpsrlq	$46, %ymm11, %ymm11
+	vpor	%ymm12, %ymm11, %ymm11
+	vpandn	%ymm9, %ymm8, %ymm12
+	vpxor	%ymm2, %ymm12, %ymm12
+	vmovdqu	%ymm12, 320(%rax)
+	vpandn	%ymm10, %ymm9, %ymm12
+	vpxor	%ymm8, %ymm12, %ymm12
+	vmovdqu	%ymm12, 352(%rax)
+	vpandn	%ymm11, %ymm10, %ymm12
+	vpxor	%ymm9, %ymm12, %ymm9
+	vmovdqu	%ymm9, 384(%rax)
+	vpandn	%ymm2, %ymm11, %ymm9
+	vpxor	%ymm10, %ymm9, %ymm9
+	vmovdqu	%ymm9, 416(%rax)
+	vpandn	%ymm8, %ymm2, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	128(%rdx), %ymm2
+	vpxor	%ymm7, %ymm2, %ymm2
+	vpsllq	$27, %ymm2, %ymm8
+	vpsrlq	$37, %ymm2, %ymm2
+	vpor	%ymm8, %ymm2, %ymm2
+	vmovdqu	160(%rdx), %ymm8
+	vpxor	%ymm3, %ymm8, %ymm8
+	vpsllq	$36, %ymm8, %ymm9
+	vpsrlq	$28, %ymm8, %ymm8
+	vpor	%ymm9, %ymm8, %ymm8
+	vmovdqu	352(%rdx), %ymm9
+	vpxor	%ymm4, %ymm9, %ymm9
+	vpsllq	$10, %ymm9, %ymm10
+	vpsrlq	$54, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	544(%rdx), %ymm10
+	vpxor	%ymm5, %ymm10, %ymm10
+	vpsllq	$15, %ymm10, %ymm11
+	vpsrlq	$49, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vmovdqu	736(%rdx), %ymm11
+	vpxor	%ymm6, %ymm11, %ymm11
+	vpshufb	%ymm1, %ymm11, %ymm11
+	vpandn	%ymm9, %ymm8, %ymm12
+	vpxor	%ymm2, %ymm12, %ymm12
+	vmovdqu	%ymm12, 480(%rax)
+	vpandn	%ymm10, %ymm9, %ymm12
+	vpxor	%ymm8, %ymm12, %ymm12
+	vmovdqu	%ymm12, 512(%rax)
+	vpandn	%ymm11, %ymm10, %ymm12
+	vpxor	%ymm9, %ymm12, %ymm9
+	vmovdqu	%ymm9, 544(%rax)
+	vpandn	%ymm2, %ymm11, %ymm9
+	vpxor	%ymm10, %ymm9, %ymm9
+	vmovdqu	%ymm9, 576(%rax)
+	vpandn	%ymm8, %ymm2, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 608(%rax)
+	vmovdqu	64(%rdx), %ymm2
+	vpxor	%ymm5, %ymm2, %ymm2
+	vpsllq	$62, %ymm2, %ymm5
+	vpsrlq	$2, %ymm2, %ymm2
+	vpor	%ymm5, %ymm2, %ymm2
+	vmovdqu	256(%rdx), %ymm5
+	vpxor	%ymm6, %ymm5, %ymm5
+	vpsllq	$55, %ymm5, %ymm6
+	vpsrlq	$9, %ymm5, %ymm5
+	vpor	%ymm6, %ymm5, %ymm5
+	vmovdqu	448(%rdx), %ymm6
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpsllq	$39, %ymm6, %ymm7
+	vpsrlq	$25, %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm6
+	vmovdqu	480(%rdx), %ymm7
+	vpxor	%ymm3, %ymm7, %ymm3
+	vpsllq	$41, %ymm3, %ymm7
+	vpsrlq	$23, %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm3
+	vmovdqu	672(%rdx), %ymm7
+	vpxor	%ymm4, %ymm7, %ymm4
+	vpsllq	$2, %ymm4, %ymm7
+	vpsrlq	$62, %ymm4, %ymm4
+	vpor	%ymm7, %ymm4, %ymm4
+	vpandn	%ymm6, %ymm5, %ymm7
+	vpxor	%ymm2, %ymm7, %ymm7
+	vmovdqu	%ymm7, 640(%rax)
+	vpandn	%ymm3, %ymm6, %ymm7
+	vpxor	%ymm5, %ymm7, %ymm7
+	vmovdqu	%ymm7, 672(%rax)
+	vpandn	%ymm4, %ymm3, %ymm7
+	vpxor	%ymm6, %ymm7, %ymm6
+	vmovdqu	%ymm6, 704(%rax)
+	vpandn	%ymm2, %ymm4, %ymm6
+	vpxor	%ymm3, %ymm6, %ymm3
+	vmovdqu	%ymm3, 736(%rax)
+	vpandn	%ymm5, %ymm2, %ymm2
+	vpxor	%ymm4, %ymm2, %ymm2
+	vmovdqu	%ymm2, 768(%rax)
+	addq	$64, %rdi
+	cmpq	$768, %rdi
+	jb  	L_keccakf1600_4x_avx2$2
+	ret
+L_sha3_512_32$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm0, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vpbroadcastq	(%rcx), %ymm6
+	movq	8(%rcx), %rdx
+	movq	glob_data + 6240(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	16(%rcx), %rdx
+	movq	glob_data + 6248(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	24(%rcx), %rcx
+	movq	glob_data + 6256(%rip), %rdx
+	movq	%rcx, 32(%rsp,%rdx,8)
+	movq	glob_data + 6264(%rip), %rcx
+	shlq	$3, %rcx
+	movb	$6, 32(%rsp,%rcx)
+	movq	glob_data + 6296(%rip), %rcx
+	shlq	$3, %rcx
+	movq	$71, %rdx
+	andq	$7, %rdx
+	addq	%rdx, %rcx
+	xorb	$-128, 32(%rsp,%rcx)
+	vmovdqu	64(%rsp), %ymm0
+	vmovdqu	96(%rsp), %ymm1
+	vmovdqu	128(%rsp), %ymm2
+	vmovdqu	160(%rsp), %ymm3
+	vmovdqu	192(%rsp), %ymm4
+	vmovdqu	224(%rsp), %ymm5
+	leaq	glob_data + 3360(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3168(%rip), %rsi
+	leaq	glob_data + 2976(%rip), %rdi
+	movq	$24, %r8
+L_sha3_512_32$2:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm4, %ymm7
+	vpxor	%ymm5, %ymm3, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm6, %ymm6
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	96(%rsi), %ymm3, %ymm7
+	vpsrlvq	96(%rdi), %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm10
+	vpxor	%ymm9, %ymm4, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm4
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm4
+	vpxor	%ymm9, %ymm5, %ymm5
+	vpermq	$-115, %ymm1, %ymm3
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm5, %ymm1
+	vpsrlvq	160(%rdi), %ymm5, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm4, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm4
+	vpblendd	$12, %ymm7, %ymm3, %ymm5
+	vpblendd	$12, %ymm3, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm4, %ymm4
+	vpblendd	$48, %ymm10, %ymm5, %ymm5
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm4, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm5, %ymm5
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm3, %ymm12
+	vpxor	%ymm3, %ymm1, %ymm4
+	vpblendd	$48, %ymm3, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm6, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm3, %ymm13, %ymm13
+	vpblendd	$-64, %ymm3, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm4, %ymm2
+	vpermq	$-115, %ymm5, %ymm4
+	vpermq	$114, %ymm12, %ymm5
+	vpblendd	$12, %ymm3, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm3, %ymm9, %ymm3
+	vpandn	%ymm3, %ymm0, %ymm3
+	vpxor	%ymm13, %ymm6, %ymm6
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm3, %ymm3
+	vpxor	(%rcx,%rdx), %ymm6, %ymm6
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L_sha3_512_32$2
+	vmovdqu	%ymm6, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm1, 96(%rsp)
+	vmovdqu	%ymm2, 128(%rsp)
+	vmovdqu	%ymm3, 160(%rsp)
+	vmovdqu	%ymm4, 192(%rsp)
+	vmovdqu	%ymm5, 224(%rsp)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	ret
+L_sha3_512_64$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm0, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vpbroadcastq	(%rcx), %ymm6
+	movq	8(%rcx), %rdx
+	movq	glob_data + 6240(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	16(%rcx), %rdx
+	movq	glob_data + 6248(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	24(%rcx), %rdx
+	movq	glob_data + 6256(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	32(%rcx), %rdx
+	movq	glob_data + 6264(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	40(%rcx), %rdx
+	movq	glob_data + 6272(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	48(%rcx), %rdx
+	movq	glob_data + 6280(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	56(%rcx), %rcx
+	movq	glob_data + 6288(%rip), %rdx
+	movq	%rcx, 32(%rsp,%rdx,8)
+	movq	glob_data + 6296(%rip), %rcx
+	shlq	$3, %rcx
+	movb	$6, 32(%rsp,%rcx)
+	movq	glob_data + 6296(%rip), %rcx
+	shlq	$3, %rcx
+	movq	$71, %rdx
+	andq	$7, %rdx
+	addq	%rdx, %rcx
+	xorb	$-128, 32(%rsp,%rcx)
+	vmovdqu	64(%rsp), %ymm0
+	vmovdqu	96(%rsp), %ymm1
+	vmovdqu	128(%rsp), %ymm2
+	vmovdqu	160(%rsp), %ymm3
+	vmovdqu	192(%rsp), %ymm4
+	vmovdqu	224(%rsp), %ymm5
+	leaq	glob_data + 3360(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3168(%rip), %rsi
+	leaq	glob_data + 2976(%rip), %rdi
+	movq	$24, %r8
+L_sha3_512_64$2:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm4, %ymm7
+	vpxor	%ymm5, %ymm3, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm6, %ymm6
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	96(%rsi), %ymm3, %ymm7
+	vpsrlvq	96(%rdi), %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm10
+	vpxor	%ymm9, %ymm4, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm4
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm4
+	vpxor	%ymm9, %ymm5, %ymm5
+	vpermq	$-115, %ymm1, %ymm3
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm5, %ymm1
+	vpsrlvq	160(%rdi), %ymm5, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm4, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm4
+	vpblendd	$12, %ymm7, %ymm3, %ymm5
+	vpblendd	$12, %ymm3, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm4, %ymm4
+	vpblendd	$48, %ymm10, %ymm5, %ymm5
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm4, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm5, %ymm5
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm3, %ymm12
+	vpxor	%ymm3, %ymm1, %ymm4
+	vpblendd	$48, %ymm3, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm6, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm3, %ymm13, %ymm13
+	vpblendd	$-64, %ymm3, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm4, %ymm2
+	vpermq	$-115, %ymm5, %ymm4
+	vpermq	$114, %ymm12, %ymm5
+	vpblendd	$12, %ymm3, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm3, %ymm9, %ymm3
+	vpandn	%ymm3, %ymm0, %ymm3
+	vpxor	%ymm13, %ymm6, %ymm6
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm3, %ymm3
+	vpxor	(%rcx,%rdx), %ymm6, %ymm6
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L_sha3_512_64$2
+	vmovdqu	%ymm6, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm1, 96(%rsp)
+	vmovdqu	%ymm2, 128(%rsp)
+	vmovdqu	%ymm3, 160(%rsp)
+	vmovdqu	%ymm4, 192(%rsp)
+	vmovdqu	%ymm5, 224(%rsp)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	ret
+L_shake256_128_33$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm0, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vpbroadcastq	(%rcx), %ymm6
+	movq	8(%rcx), %rdx
+	movq	glob_data + 6240(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	16(%rcx), %rdx
+	movq	glob_data + 6248(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	24(%rcx), %rdx
+	movq	glob_data + 6256(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movb	32(%rcx), %cl
+	movq	glob_data + 6264(%rip), %rdx
+	shlq	$3, %rdx
+	movb	%cl, 32(%rsp,%rdx)
+	incq	%rdx
+	movb	$31, 32(%rsp,%rdx)
+	movq	glob_data + 6360(%rip), %rcx
+	shlq	$3, %rcx
+	movq	$135, %rdx
+	andq	$7, %rdx
+	addq	%rdx, %rcx
+	xorb	$-128, 32(%rsp,%rcx)
+	vmovdqu	64(%rsp), %ymm0
+	vmovdqu	96(%rsp), %ymm1
+	vmovdqu	128(%rsp), %ymm2
+	vmovdqu	160(%rsp), %ymm3
+	vmovdqu	192(%rsp), %ymm4
+	vmovdqu	224(%rsp), %ymm5
+	leaq	glob_data + 3360(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3168(%rip), %rsi
+	leaq	glob_data + 2976(%rip), %rdi
+	movq	$24, %r8
+L_shake256_128_33$2:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm4, %ymm7
+	vpxor	%ymm5, %ymm3, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm6, %ymm6
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	96(%rsi), %ymm3, %ymm7
+	vpsrlvq	96(%rdi), %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm10
+	vpxor	%ymm9, %ymm4, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm4
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm4
+	vpxor	%ymm9, %ymm5, %ymm5
+	vpermq	$-115, %ymm1, %ymm3
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm5, %ymm1
+	vpsrlvq	160(%rdi), %ymm5, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm4, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm4
+	vpblendd	$12, %ymm7, %ymm3, %ymm5
+	vpblendd	$12, %ymm3, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm4, %ymm4
+	vpblendd	$48, %ymm10, %ymm5, %ymm5
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm4, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm5, %ymm5
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm3, %ymm12
+	vpxor	%ymm3, %ymm1, %ymm4
+	vpblendd	$48, %ymm3, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm6, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm3, %ymm13, %ymm13
+	vpblendd	$-64, %ymm3, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm4, %ymm2
+	vpermq	$-115, %ymm5, %ymm4
+	vpermq	$114, %ymm12, %ymm5
+	vpblendd	$12, %ymm3, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm3, %ymm9, %ymm3
+	vpandn	%ymm3, %ymm0, %ymm3
+	vpxor	%ymm13, %ymm6, %ymm6
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm3, %ymm3
+	vpxor	(%rcx,%rdx), %ymm6, %ymm6
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L_shake256_128_33$2
+	vmovdqu	%ymm6, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm1, 96(%rsp)
+	vmovdqu	%ymm2, 128(%rsp)
+	vmovdqu	%ymm3, 160(%rsp)
+	vmovdqu	%ymm4, 192(%rsp)
+	vmovdqu	%ymm5, 224(%rsp)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	ret
+L_shake256_64$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm0, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vpbroadcastq	(%rax), %ymm4
+	movq	glob_data + 6240(%rip), %rsi
+	movq	8(%rax), %rdi
+	movq	%rdi, 32(%rsp,%rsi,8)
+	movq	glob_data + 6248(%rip), %rsi
+	movq	16(%rax), %rdi
+	movq	%rdi, 32(%rsp,%rsi,8)
+	movq	glob_data + 6256(%rip), %rsi
+	movq	24(%rax), %rdi
+	movq	%rdi, 32(%rsp,%rsi,8)
+	movq	glob_data + 6264(%rip), %rsi
+	movq	32(%rax), %rdi
+	movq	%rdi, 32(%rsp,%rsi,8)
+	movq	glob_data + 6272(%rip), %rsi
+	movq	40(%rax), %rdi
+	movq	%rdi, 32(%rsp,%rsi,8)
+	movq	glob_data + 6280(%rip), %rsi
+	movq	48(%rax), %rdi
+	movq	%rdi, 32(%rsp,%rsi,8)
+	movq	glob_data + 6288(%rip), %rsi
+	movq	56(%rax), %rax
+	movq	%rax, 32(%rsp,%rsi,8)
+	movq	glob_data + 6296(%rip), %rax
+	shlq	$3, %rax
+	movb	$31, 32(%rsp,%rax)
+	movq	glob_data + 6360(%rip), %rax
+	shlq	$3, %rax
+	movq	$135, %rsi
+	andq	$7, %rsi
+	addq	%rsi, %rax
+	xorb	$-128, 32(%rsp,%rax)
+	vmovdqu	64(%rsp), %ymm5
+	vmovdqu	96(%rsp), %ymm0
+	vmovdqu	128(%rsp), %ymm1
+	vmovdqu	160(%rsp), %ymm6
+	vmovdqu	192(%rsp), %ymm2
+	vmovdqu	224(%rsp), %ymm3
+	movq	$136, %rsi
+	leaq	glob_data + 6232(%rip), %rax
+	jmp 	L_shake256_64$7
+L_shake256_64$8:
+	leaq	glob_data + 3360(%rip), %rdi
+	movq	$0, %r8
+	leaq	glob_data + 3168(%rip), %r9
+	leaq	glob_data + 2976(%rip), %r10
+	movq	$24, %r11
+L_shake256_64$11:
+	vpshufd	$78, %ymm0, %ymm8
+	vpxor	%ymm1, %ymm2, %ymm7
+	vpxor	%ymm3, %ymm6, %ymm9
+	vpxor	%ymm5, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm0, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm4, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm0, %ymm0
+	vpxor	%ymm11, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%r9), %ymm0, %ymm7
+	vpsrlvq	(%r10), %ymm0, %ymm0
+	vpor	%ymm7, %ymm0, %ymm0
+	vpxor	%ymm9, %ymm1, %ymm1
+	vpsllvq	64(%r9), %ymm1, %ymm7
+	vpsrlvq	64(%r10), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%r9), %ymm6, %ymm7
+	vpsrlvq	96(%r10), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	128(%r9), %ymm2, %ymm6
+	vpsrlvq	128(%r10), %ymm2, %ymm2
+	vpor	%ymm6, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpermq	$-115, %ymm0, %ymm6
+	vpermq	$-115, %ymm1, %ymm7
+	vpsllvq	160(%r9), %ymm3, %ymm0
+	vpsrlvq	160(%r10), %ymm3, %ymm1
+	vpor	%ymm0, %ymm1, %ymm8
+	vpxor	%ymm9, %ymm5, %ymm0
+	vpermq	$27, %ymm10, %ymm5
+	vpermq	$114, %ymm2, %ymm9
+	vpsllvq	32(%r9), %ymm0, %ymm1
+	vpsrlvq	32(%r10), %ymm0, %ymm0
+	vpor	%ymm1, %ymm0, %ymm10
+	vpsrldq	$8, %ymm8, %ymm0
+	vpandn	%ymm0, %ymm8, %ymm1
+	vpblendd	$12, %ymm9, %ymm10, %ymm0
+	vpblendd	$12, %ymm10, %ymm7, %ymm2
+	vpblendd	$12, %ymm7, %ymm6, %ymm3
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm0, %ymm0
+	vpblendd	$48, %ymm5, %ymm2, %ymm2
+	vpblendd	$48, %ymm10, %ymm3, %ymm3
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm5, %ymm0, %ymm0
+	vpblendd	$-64, %ymm9, %ymm2, %ymm2
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm2, %ymm0, %ymm0
+	vpandn	%ymm11, %ymm3, %ymm3
+	vpblendd	$12, %ymm10, %ymm5, %ymm11
+	vpblendd	$12, %ymm5, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm0, %ymm2
+	vpblendd	$48, %ymm6, %ymm11, %ymm0
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpblendd	$-64, %ymm7, %ymm0, %ymm0
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm0, %ymm0
+	vpxor	%ymm9, %ymm0, %ymm12
+	vpermq	$30, %ymm8, %ymm0
+	vpblendd	$48, %ymm4, %ymm0, %ymm0
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm4, %ymm11, %ymm11
+	vpandn	%ymm0, %ymm11, %ymm11
+	vpblendd	$12, %ymm5, %ymm7, %ymm0
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm0, %ymm0
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm0, %ymm0
+	vpblendd	$-64, %ymm5, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm0, %ymm0
+	vpxor	%ymm10, %ymm0, %ymm0
+	vpermq	$0, %ymm1, %ymm13
+	vpermq	$27, %ymm2, %ymm1
+	vpermq	$-115, %ymm3, %ymm2
+	vpermq	$114, %ymm12, %ymm3
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm5, %ymm9
+	vpblendd	$48, %ymm5, %ymm12, %ymm5
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm5, %ymm5
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm5, %ymm6
+	vpxor	%ymm13, %ymm4, %ymm4
+	vpxor	%ymm8, %ymm11, %ymm5
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rdi,%r8), %ymm4, %ymm4
+	addq	$32, %r8
+	decq	%r11
+	jne 	L_shake256_64$11
+	vmovdqu	%ymm4, 32(%rsp)
+	vmovdqu	%ymm5, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm1, 128(%rsp)
+	vmovdqu	%ymm6, 160(%rsp)
+	vmovdqu	%ymm2, 192(%rsp)
+	vmovdqu	%ymm3, 224(%rsp)
+	movq	%rsi, %rdi
+	shrq	$3, %rdi
+	movq	$0, %r8
+	jmp 	L_shake256_64$9
+L_shake256_64$10:
+	movq	(%rax,%r8,8), %r9
+	movq	32(%rsp,%r9,8), %r9
+	movq	%r9, (%rdx,%r8,8)
+	incq	%r8
+L_shake256_64$9:
+	cmpq	%rdi, %r8
+	jb  	L_shake256_64$10
+	addq	%rsi, %rdx
+	subq	%rsi, %rcx
+L_shake256_64$7:
+	cmpq	%rsi, %rcx
+	jnbe	L_shake256_64$8
+	leaq	glob_data + 3360(%rip), %rsi
+	movq	$0, %rdi
+	leaq	glob_data + 3168(%rip), %r8
+	leaq	glob_data + 2976(%rip), %r9
+	movq	$24, %r10
+L_shake256_64$6:
+	vpshufd	$78, %ymm0, %ymm8
+	vpxor	%ymm1, %ymm2, %ymm7
+	vpxor	%ymm3, %ymm6, %ymm9
+	vpxor	%ymm5, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm0, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm4, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm0, %ymm0
+	vpxor	%ymm11, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%r8), %ymm0, %ymm7
+	vpsrlvq	(%r9), %ymm0, %ymm0
+	vpor	%ymm7, %ymm0, %ymm0
+	vpxor	%ymm9, %ymm1, %ymm1
+	vpsllvq	64(%r8), %ymm1, %ymm7
+	vpsrlvq	64(%r9), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%r8), %ymm6, %ymm7
+	vpsrlvq	96(%r9), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	128(%r8), %ymm2, %ymm6
+	vpsrlvq	128(%r9), %ymm2, %ymm2
+	vpor	%ymm6, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpermq	$-115, %ymm0, %ymm6
+	vpermq	$-115, %ymm1, %ymm7
+	vpsllvq	160(%r8), %ymm3, %ymm0
+	vpsrlvq	160(%r9), %ymm3, %ymm1
+	vpor	%ymm0, %ymm1, %ymm8
+	vpxor	%ymm9, %ymm5, %ymm0
+	vpermq	$27, %ymm10, %ymm5
+	vpermq	$114, %ymm2, %ymm9
+	vpsllvq	32(%r8), %ymm0, %ymm1
+	vpsrlvq	32(%r9), %ymm0, %ymm0
+	vpor	%ymm1, %ymm0, %ymm10
+	vpsrldq	$8, %ymm8, %ymm0
+	vpandn	%ymm0, %ymm8, %ymm1
+	vpblendd	$12, %ymm9, %ymm10, %ymm0
+	vpblendd	$12, %ymm10, %ymm7, %ymm2
+	vpblendd	$12, %ymm7, %ymm6, %ymm3
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm0, %ymm0
+	vpblendd	$48, %ymm5, %ymm2, %ymm2
+	vpblendd	$48, %ymm10, %ymm3, %ymm3
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm5, %ymm0, %ymm0
+	vpblendd	$-64, %ymm9, %ymm2, %ymm2
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm2, %ymm0, %ymm0
+	vpandn	%ymm11, %ymm3, %ymm3
+	vpblendd	$12, %ymm10, %ymm5, %ymm11
+	vpblendd	$12, %ymm5, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm0, %ymm2
+	vpblendd	$48, %ymm6, %ymm11, %ymm0
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpblendd	$-64, %ymm7, %ymm0, %ymm0
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm0, %ymm0
+	vpxor	%ymm9, %ymm0, %ymm12
+	vpermq	$30, %ymm8, %ymm0
+	vpblendd	$48, %ymm4, %ymm0, %ymm0
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm4, %ymm11, %ymm11
+	vpandn	%ymm0, %ymm11, %ymm11
+	vpblendd	$12, %ymm5, %ymm7, %ymm0
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm0, %ymm0
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm0, %ymm0
+	vpblendd	$-64, %ymm5, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm0, %ymm0
+	vpxor	%ymm10, %ymm0, %ymm0
+	vpermq	$0, %ymm1, %ymm13
+	vpermq	$27, %ymm2, %ymm1
+	vpermq	$-115, %ymm3, %ymm2
+	vpermq	$114, %ymm12, %ymm3
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm5, %ymm9
+	vpblendd	$48, %ymm5, %ymm12, %ymm5
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm5, %ymm5
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm5, %ymm6
+	vpxor	%ymm13, %ymm4, %ymm4
+	vpxor	%ymm8, %ymm11, %ymm5
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rsi,%rdi), %ymm4, %ymm4
+	addq	$32, %rdi
+	decq	%r10
+	jne 	L_shake256_64$6
+	vmovdqu	%ymm4, 32(%rsp)
+	vmovdqu	%ymm5, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm1, 128(%rsp)
+	vmovdqu	%ymm6, 160(%rsp)
+	vmovdqu	%ymm2, 192(%rsp)
+	vmovdqu	%ymm3, 224(%rsp)
+	movq	%rcx, %rsi
+	shrq	$3, %rsi
+	movq	$0, %rdi
+	jmp 	L_shake256_64$4
+L_shake256_64$5:
+	movq	(%rax,%rdi,8), %r8
+	movq	32(%rsp,%r8,8), %r8
+	movq	%r8, (%rdx,%rdi,8)
+	incq	%rdi
+L_shake256_64$4:
+	cmpq	%rsi, %rdi
+	jb  	L_shake256_64$5
+	movq	(%rax,%rdi,8), %rax
+	shlq	$3, %rdi
+	shlq	$3, %rax
+	jmp 	L_shake256_64$2
+L_shake256_64$3:
+	movb	32(%rsp,%rax), %sil
+	movb	%sil, (%rdx,%rdi)
+	incq	%rdi
+	incq	%rax
+L_shake256_64$2:
+	cmpq	%rcx, %rdi
+	jb  	L_shake256_64$3
+	ret
+L_sha3_256_32$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm0, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vpbroadcastq	(%rcx), %ymm6
+	movq	8(%rcx), %rdx
+	movq	glob_data + 6240(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	16(%rcx), %rdx
+	movq	glob_data + 6248(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	24(%rcx), %rcx
+	movq	glob_data + 6256(%rip), %rdx
+	movq	%rcx, 32(%rsp,%rdx,8)
+	movq	glob_data + 6264(%rip), %rcx
+	shlq	$3, %rcx
+	movb	$6, 32(%rsp,%rcx)
+	movq	glob_data + 6360(%rip), %rcx
+	shlq	$3, %rcx
+	movq	$135, %rdx
+	andq	$7, %rdx
+	addq	%rdx, %rcx
+	xorb	$-128, 32(%rsp,%rcx)
+	vmovdqu	64(%rsp), %ymm0
+	vmovdqu	96(%rsp), %ymm1
+	vmovdqu	128(%rsp), %ymm2
+	vmovdqu	160(%rsp), %ymm3
+	vmovdqu	192(%rsp), %ymm4
+	vmovdqu	224(%rsp), %ymm5
+	leaq	glob_data + 3360(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3168(%rip), %rsi
+	leaq	glob_data + 2976(%rip), %rdi
+	movq	$24, %r8
+L_sha3_256_32$2:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm4, %ymm7
+	vpxor	%ymm5, %ymm3, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm6, %ymm6
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	96(%rsi), %ymm3, %ymm7
+	vpsrlvq	96(%rdi), %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm10
+	vpxor	%ymm9, %ymm4, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm4
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm4
+	vpxor	%ymm9, %ymm5, %ymm5
+	vpermq	$-115, %ymm1, %ymm3
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm5, %ymm1
+	vpsrlvq	160(%rdi), %ymm5, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm4, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm4
+	vpblendd	$12, %ymm7, %ymm3, %ymm5
+	vpblendd	$12, %ymm3, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm4, %ymm4
+	vpblendd	$48, %ymm10, %ymm5, %ymm5
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm4, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm5, %ymm5
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm3, %ymm12
+	vpxor	%ymm3, %ymm1, %ymm4
+	vpblendd	$48, %ymm3, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm6, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm3, %ymm13, %ymm13
+	vpblendd	$-64, %ymm3, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm4, %ymm2
+	vpermq	$-115, %ymm5, %ymm4
+	vpermq	$114, %ymm12, %ymm5
+	vpblendd	$12, %ymm3, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm3, %ymm9, %ymm3
+	vpandn	%ymm3, %ymm0, %ymm3
+	vpxor	%ymm13, %ymm6, %ymm6
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm3, %ymm3
+	vpxor	(%rcx,%rdx), %ymm6, %ymm6
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L_sha3_256_32$2
+	vmovdqu	%ymm6, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm1, 96(%rsp)
+	vmovdqu	%ymm2, 128(%rsp)
+	vmovdqu	%ymm3, 160(%rsp)
+	vmovdqu	%ymm4, 192(%rsp)
+	vmovdqu	%ymm5, 224(%rsp)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	ret
+L_sha3_256$1:
+	vpxor	%ymm6, %ymm6, %ymm6
+	vpxor	%ymm3, %ymm3, %ymm3
+	vpxor	%ymm4, %ymm4, %ymm4
+	vpxor	%ymm0, %ymm0, %ymm0
+	vpxor	%ymm5, %ymm5, %ymm5
+	vpxor	%ymm1, %ymm1, %ymm1
+	vpxor	%ymm2, %ymm2, %ymm2
+	movb	$6, %cl
+	movq	$136, %rdx
+	leaq	glob_data + 6232(%rip), %rsi
+	vpxor	%ymm7, %ymm7, %ymm7
+	vmovdqu	%ymm7, 32(%rsp)
+	vmovdqu	%ymm7, 64(%rsp)
+	vmovdqu	%ymm7, 96(%rsp)
+	vmovdqu	%ymm7, 128(%rsp)
+	vmovdqu	%ymm7, 160(%rsp)
+	vmovdqu	%ymm7, 192(%rsp)
+	vmovdqu	%ymm7, 224(%rsp)
+	jmp 	L_sha3_256$7
+L_sha3_256$8:
+	movq	%rdx, %r9
+	shrq	$3, %r9
+	movq	$0, %r10
+	jmp 	L_sha3_256$10
+L_sha3_256$11:
+	movq	(%r8,%r10,8), %r11
+	movq	(%rsi,%r10,8), %rbx
+	movq	%r11, 32(%rsp,%rbx,8)
+	incq	%r10
+L_sha3_256$10:
+	cmpq	%r9, %r10
+	jb  	L_sha3_256$11
+	movq	32(%rsp), %r9
+	movq	%r9, 40(%rsp)
+	movq	%r9, 48(%rsp)
+	movq	%r9, 56(%rsp)
+	vpxor	32(%rsp), %ymm6, %ymm6
+	vpxor	64(%rsp), %ymm3, %ymm3
+	vpxor	96(%rsp), %ymm4, %ymm4
+	vpxor	128(%rsp), %ymm0, %ymm0
+	vpxor	160(%rsp), %ymm5, %ymm5
+	vpxor	192(%rsp), %ymm1, %ymm1
+	vpxor	224(%rsp), %ymm2, %ymm2
+	addq	%rdx, %r8
+	subq	%rdx, %rdi
+	leaq	glob_data + 3360(%rip), %r9
+	movq	$0, %r10
+	leaq	glob_data + 3168(%rip), %r11
+	leaq	glob_data + 2976(%rip), %rbx
+	movq	$24, %rbp
+L_sha3_256$9:
+	vpshufd	$78, %ymm4, %ymm8
+	vpxor	%ymm0, %ymm1, %ymm7
+	vpxor	%ymm2, %ymm5, %ymm9
+	vpxor	%ymm3, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm4, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm4, %ymm4
+	vpxor	%ymm11, %ymm6, %ymm6
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%r11), %ymm4, %ymm7
+	vpsrlvq	(%rbx), %ymm4, %ymm4
+	vpor	%ymm7, %ymm4, %ymm4
+	vpxor	%ymm9, %ymm0, %ymm0
+	vpsllvq	64(%r11), %ymm0, %ymm7
+	vpsrlvq	64(%rbx), %ymm0, %ymm0
+	vpor	%ymm7, %ymm0, %ymm0
+	vpxor	%ymm9, %ymm5, %ymm5
+	vpsllvq	96(%r11), %ymm5, %ymm7
+	vpsrlvq	96(%rbx), %ymm5, %ymm5
+	vpor	%ymm7, %ymm5, %ymm10
+	vpxor	%ymm9, %ymm1, %ymm1
+	vpsllvq	128(%r11), %ymm1, %ymm5
+	vpsrlvq	128(%rbx), %ymm1, %ymm1
+	vpor	%ymm5, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpermq	$-115, %ymm4, %ymm5
+	vpermq	$-115, %ymm0, %ymm7
+	vpsllvq	160(%r11), %ymm2, %ymm0
+	vpsrlvq	160(%rbx), %ymm2, %ymm2
+	vpor	%ymm0, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm3, %ymm0
+	vpermq	$27, %ymm10, %ymm3
+	vpermq	$114, %ymm1, %ymm9
+	vpsllvq	32(%r11), %ymm0, %ymm1
+	vpsrlvq	32(%rbx), %ymm0, %ymm0
+	vpor	%ymm1, %ymm0, %ymm10
+	vpsrldq	$8, %ymm8, %ymm0
+	vpandn	%ymm0, %ymm8, %ymm0
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm2
+	vpblendd	$12, %ymm7, %ymm5, %ymm4
+	vpblendd	$12, %ymm5, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm3, %ymm2, %ymm2
+	vpblendd	$48, %ymm10, %ymm4, %ymm4
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm3, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm2, %ymm2
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm2, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm4, %ymm2
+	vpblendd	$12, %ymm10, %ymm3, %ymm4
+	vpblendd	$12, %ymm3, %ymm5, %ymm11
+	vpxor	%ymm5, %ymm1, %ymm1
+	vpblendd	$48, %ymm5, %ymm4, %ymm4
+	vpblendd	$48, %ymm7, %ymm11, %ymm11
+	vpxor	%ymm3, %ymm2, %ymm2
+	vpblendd	$-64, %ymm7, %ymm4, %ymm4
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm4, %ymm4
+	vpxor	%ymm9, %ymm4, %ymm12
+	vpermq	$30, %ymm8, %ymm4
+	vpblendd	$48, %ymm6, %ymm4, %ymm4
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm4, %ymm11, %ymm11
+	vpblendd	$12, %ymm3, %ymm7, %ymm4
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm4, %ymm4
+	vpblendd	$48, %ymm5, %ymm13, %ymm13
+	vpblendd	$-64, %ymm5, %ymm4, %ymm4
+	vpblendd	$-64, %ymm3, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm4, %ymm4
+	vpxor	%ymm10, %ymm4, %ymm4
+	vpermq	$0, %ymm0, %ymm13
+	vpermq	$27, %ymm1, %ymm0
+	vpermq	$-115, %ymm2, %ymm1
+	vpermq	$114, %ymm12, %ymm2
+	vpblendd	$12, %ymm5, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm3, %ymm9
+	vpblendd	$48, %ymm3, %ymm12, %ymm3
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm3, %ymm3
+	vpblendd	$-64, %ymm5, %ymm9, %ymm5
+	vpandn	%ymm5, %ymm3, %ymm5
+	vpxor	%ymm13, %ymm6, %ymm6
+	vpxor	%ymm8, %ymm11, %ymm3
+	vpxor	%ymm7, %ymm5, %ymm5
+	vpxor	(%r9,%r10), %ymm6, %ymm6
+	addq	$32, %r10
+	decq	%rbp
+	jne 	L_sha3_256$9
+L_sha3_256$7:
+	cmpq	%rdx, %rdi
+	jnb 	L_sha3_256$8
+	vpxor	%ymm7, %ymm7, %ymm7
+	vmovdqu	%ymm7, 32(%rsp)
+	vmovdqu	%ymm7, 64(%rsp)
+	vmovdqu	%ymm7, 96(%rsp)
+	vmovdqu	%ymm7, 128(%rsp)
+	vmovdqu	%ymm7, 160(%rsp)
+	vmovdqu	%ymm7, 192(%rsp)
+	vmovdqu	%ymm7, 224(%rsp)
+	movq	%rdi, %r9
+	shrq	$3, %r9
+	movq	$0, %r10
+	jmp 	L_sha3_256$5
+L_sha3_256$6:
+	movq	(%r8,%r10,8), %r11
+	movq	(%rsi,%r10,8), %rbx
+	movq	%r11, 32(%rsp,%rbx,8)
+	incq	%r10
+L_sha3_256$5:
+	cmpq	%r9, %r10
+	jb  	L_sha3_256$6
+	movq	(%rsi,%r10,8), %r9
+	shlq	$3, %r9
+	shlq	$3, %r10
+	jmp 	L_sha3_256$3
+L_sha3_256$4:
+	movb	(%r8,%r10), %r11b
+	movb	%r11b, 32(%rsp,%r9)
+	incq	%r10
+	incq	%r9
+L_sha3_256$3:
+	cmpq	%rdi, %r10
+	jb  	L_sha3_256$4
+	movb	%cl, 32(%rsp,%r9)
+	movq	%rdx, %rcx
+	addq	$-1, %rcx
+	shrq	$3, %rcx
+	movq	(%rsi,%rcx,8), %rcx
+	shlq	$3, %rcx
+	addq	$-1, %rdx
+	andq	$7, %rdx
+	addq	%rdx, %rcx
+	xorb	$-128, 32(%rsp,%rcx)
+	movq	32(%rsp), %rcx
+	movq	%rcx, 40(%rsp)
+	movq	%rcx, 48(%rsp)
+	movq	%rcx, 56(%rsp)
+	vpxor	32(%rsp), %ymm6, %ymm6
+	vpxor	64(%rsp), %ymm3, %ymm7
+	vpxor	96(%rsp), %ymm4, %ymm3
+	vpxor	128(%rsp), %ymm0, %ymm0
+	vpxor	160(%rsp), %ymm5, %ymm4
+	vpxor	192(%rsp), %ymm1, %ymm1
+	vpxor	224(%rsp), %ymm2, %ymm2
+	leaq	glob_data + 3360(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3168(%rip), %rsi
+	leaq	glob_data + 2976(%rip), %rdi
+	movq	$24, %r8
+L_sha3_256$2:
+	vpshufd	$78, %ymm3, %ymm5
+	vpxor	%ymm0, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm4, %ymm9
+	vpxor	%ymm7, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm10
+	vpermq	$-109, %ymm10, %ymm8
+	vpxor	%ymm3, %ymm5, %ymm5
+	vpermq	$78, %ymm5, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm8, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm5, %ymm5
+	vpxor	%ymm9, %ymm5, %ymm9
+	vpsrlq	$63, %ymm9, %ymm5
+	vpaddq	%ymm9, %ymm9, %ymm12
+	vpor	%ymm5, %ymm12, %ymm12
+	vpxor	%ymm11, %ymm3, %ymm3
+	vpxor	%ymm11, %ymm6, %ymm5
+	vpblendd	$-64, %ymm12, %ymm10, %ymm6
+	vpblendd	$3, %ymm9, %ymm8, %ymm8
+	vpxor	%ymm8, %ymm6, %ymm9
+	vpsllvq	(%rsi), %ymm3, %ymm6
+	vpsrlvq	(%rdi), %ymm3, %ymm3
+	vpor	%ymm6, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm0, %ymm0
+	vpsllvq	64(%rsi), %ymm0, %ymm6
+	vpsrlvq	64(%rdi), %ymm0, %ymm0
+	vpor	%ymm6, %ymm0, %ymm0
+	vpxor	%ymm9, %ymm4, %ymm4
+	vpsllvq	96(%rsi), %ymm4, %ymm6
+	vpsrlvq	96(%rdi), %ymm4, %ymm4
+	vpor	%ymm6, %ymm4, %ymm10
+	vpxor	%ymm9, %ymm1, %ymm1
+	vpsllvq	128(%rsi), %ymm1, %ymm4
+	vpsrlvq	128(%rdi), %ymm1, %ymm1
+	vpor	%ymm4, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpermq	$-115, %ymm3, %ymm4
+	vpermq	$-115, %ymm0, %ymm6
+	vpsllvq	160(%rsi), %ymm2, %ymm0
+	vpsrlvq	160(%rdi), %ymm2, %ymm2
+	vpor	%ymm0, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm7, %ymm0
+	vpermq	$27, %ymm10, %ymm7
+	vpermq	$114, %ymm1, %ymm9
+	vpsllvq	32(%rsi), %ymm0, %ymm1
+	vpsrlvq	32(%rdi), %ymm0, %ymm0
+	vpor	%ymm1, %ymm0, %ymm10
+	vpsrldq	$8, %ymm8, %ymm0
+	vpandn	%ymm0, %ymm8, %ymm0
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm6, %ymm2
+	vpblendd	$12, %ymm6, %ymm4, %ymm3
+	vpblendd	$12, %ymm4, %ymm10, %ymm11
+	vpblendd	$48, %ymm6, %ymm1, %ymm1
+	vpblendd	$48, %ymm7, %ymm2, %ymm2
+	vpblendd	$48, %ymm10, %ymm3, %ymm3
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm2, %ymm2
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm2, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm3, %ymm2
+	vpblendd	$12, %ymm10, %ymm7, %ymm3
+	vpblendd	$12, %ymm7, %ymm4, %ymm11
+	vpxor	%ymm4, %ymm1, %ymm1
+	vpblendd	$48, %ymm4, %ymm3, %ymm3
+	vpblendd	$48, %ymm6, %ymm11, %ymm11
+	vpxor	%ymm7, %ymm2, %ymm2
+	vpblendd	$-64, %ymm6, %ymm3, %ymm3
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm3, %ymm12
+	vpermq	$30, %ymm8, %ymm3
+	vpblendd	$48, %ymm5, %ymm3, %ymm3
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm5, %ymm11, %ymm11
+	vpandn	%ymm3, %ymm11, %ymm11
+	vpblendd	$12, %ymm7, %ymm6, %ymm3
+	vpblendd	$12, %ymm6, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm3, %ymm3
+	vpblendd	$48, %ymm4, %ymm13, %ymm13
+	vpblendd	$-64, %ymm4, %ymm3, %ymm3
+	vpblendd	$-64, %ymm7, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm3, %ymm3
+	vpxor	%ymm10, %ymm3, %ymm3
+	vpermq	$0, %ymm0, %ymm13
+	vpermq	$27, %ymm1, %ymm0
+	vpermq	$-115, %ymm2, %ymm1
+	vpermq	$114, %ymm12, %ymm2
+	vpblendd	$12, %ymm4, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm7, %ymm9
+	vpblendd	$48, %ymm7, %ymm12, %ymm7
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm7, %ymm7
+	vpblendd	$-64, %ymm4, %ymm9, %ymm4
+	vpandn	%ymm4, %ymm7, %ymm4
+	vpxor	%ymm13, %ymm5, %ymm5
+	vpxor	%ymm8, %ymm11, %ymm7
+	vpxor	%ymm6, %ymm4, %ymm4
+	vpxor	(%rcx,%rdx), %ymm5, %ymm6
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L_sha3_256$2
+	vmovdqu	%ymm6, 32(%rsp)
+	vmovdqu	%ymm7, 64(%rsp)
+	vmovdqu	%ymm3, 96(%rsp)
+	vmovdqu	%ymm0, 128(%rsp)
+	vmovdqu	%ymm4, 160(%rsp)
+	vmovdqu	%ymm1, 192(%rsp)
+	vmovdqu	%ymm2, 224(%rsp)
+	leaq	glob_data + 6232(%rip), %rcx
+	movq	(%rcx), %rdx
+	movq	32(%rsp,%rdx,8), %rdx
+	movq	%rdx, (%rax)
+	movq	8(%rcx), %rdx
+	movq	32(%rsp,%rdx,8), %rdx
+	movq	%rdx, 8(%rax)
+	movq	16(%rcx), %rdx
+	movq	32(%rsp,%rdx,8), %rdx
+	movq	%rdx, 16(%rax)
+	movq	24(%rcx), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	ret
+	.data
+	.p2align	5
+_glob_data:
+glob_data:
+      .byte 0
+      .byte 1
+      .byte 1
+      .byte 2
+      .byte 3
+      .byte 4
+      .byte 4
+      .byte 5
+      .byte 6
+      .byte 7
+      .byte 7
+      .byte 8
+      .byte 9
+      .byte 10
+      .byte 10
+      .byte 11
+      .byte 4
+      .byte 5
+      .byte 5
+      .byte 6
+      .byte 7
+      .byte 8
+      .byte 8
+      .byte 9
+      .byte 10
+      .byte 11
+      .byte 11
+      .byte 12
+      .byte 13
+      .byte 14
+      .byte 14
+      .byte 15
+      .byte 0
+      .byte 1
+      .byte 2
+      .byte 3
+      .byte 4
+      .byte 8
+      .byte 9
+      .byte 10
+      .byte 11
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 9
+      .byte 10
+      .byte 11
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 1
+      .byte 2
+      .byte 3
+      .byte 4
+      .byte 8
+      .byte 0
+      .byte 1
+      .byte 1
+      .byte 2
+      .byte 2
+      .byte 3
+      .byte 3
+      .byte 4
+      .byte 5
+      .byte 6
+      .byte 6
+      .byte 7
+      .byte 7
+      .byte 8
+      .byte 8
+      .byte 9
+      .byte 2
+      .byte 3
+      .byte 3
+      .byte 4
+      .byte 4
+      .byte 5
+      .byte 5
+      .byte 6
+      .byte 7
+      .byte 8
+      .byte 8
+      .byte 9
+      .byte 9
+      .byte 10
+      .byte 10
+      .byte 11
+      .byte 0
+      .byte 1
+      .byte 2
+      .byte -1
+      .byte 3
+      .byte 4
+      .byte 5
+      .byte -1
+      .byte 6
+      .byte 7
+      .byte 8
+      .byte -1
+      .byte 9
+      .byte 10
+      .byte 11
+      .byte -1
+      .byte 4
+      .byte 5
+      .byte 6
+      .byte -1
+      .byte 7
+      .byte 8
+      .byte 9
+      .byte -1
+      .byte 10
+      .byte 11
+      .byte 12
+      .byte -1
+      .byte 13
+      .byte 14
+      .byte 15
+      .byte -1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 1
+      .byte 1
+      .byte 1
+      .byte 2
+      .byte 2
+      .byte 2
+      .byte 2
+      .byte 3
+      .byte 3
+      .byte 3
+      .byte 3
+      .byte 4
+      .byte 4
+      .byte 4
+      .byte 4
+      .byte 5
+      .byte 5
+      .byte 5
+      .byte 5
+      .byte 6
+      .byte 6
+      .byte 6
+      .byte 6
+      .byte 7
+      .byte 7
+      .byte 7
+      .byte 7
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 4
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 5
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 2
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 6
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 3
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 7
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte -91
+      .byte -91
+      .byte -76
+      .byte -31
+      .byte 34
+      .byte 79
+      .byte 52
+      .byte 93
+      .byte 35
+      .byte 68
+      .byte 86
+      .byte -91
+      .byte -25
+      .byte 78
+      .byte -6
+      .byte 83
+      .byte 123
+      .byte -57
+      .byte 37
+      .byte 43
+      .byte 55
+      .byte 58
+      .byte -120
+      .byte 24
+      .byte -127
+      .byte 126
+      .byte 5
+      .byte -60
+      .byte -97
+      .byte -9
+      .byte -72
+      .byte -80
+      .byte -91
+      .byte 6
+      .byte -76
+      .byte 5
+      .byte 34
+      .byte 9
+      .byte 52
+      .byte 1
+      .byte 35
+      .byte 11
+      .byte 86
+      .byte 3
+      .byte -25
+      .byte 9
+      .byte -6
+      .byte 5
+      .byte 123
+      .byte 6
+      .byte 37
+      .byte 12
+      .byte 55
+      .byte 5
+      .byte -120
+      .byte 0
+      .byte -127
+      .byte 11
+      .byte 5
+      .byte 5
+      .byte -97
+      .byte 10
+      .byte -72
+      .byte 8
+      .byte 15
+      .byte 68
+      .byte 67
+      .byte -94
+      .byte 29
+      .byte -112
+      .byte 108
+      .byte -124
+      .byte 102
+      .byte -43
+      .byte -26
+      .byte 87
+      .byte -2
+      .byte 30
+      .byte -95
+      .byte -41
+      .byte -93
+      .byte -67
+      .byte 106
+      .byte -95
+      .byte 63
+      .byte -43
+      .byte -65
+      .byte 81
+      .byte -71
+      .byte -96
+      .byte -41
+      .byte 28
+      .byte -90
+      .byte -100
+      .byte -48
+      .byte 121
+      .byte 15
+      .byte 7
+      .byte 67
+      .byte 9
+      .byte 29
+      .byte 9
+      .byte 108
+      .byte 0
+      .byte 102
+      .byte 3
+      .byte -26
+      .byte 5
+      .byte -2
+      .byte 4
+      .byte -95
+      .byte 4
+      .byte -93
+      .byte 4
+      .byte 106
+      .byte 3
+      .byte 63
+      .byte 8
+      .byte -65
+      .byte 4
+      .byte -71
+      .byte 5
+      .byte -41
+      .byte 7
+      .byte -90
+      .byte 10
+      .byte -48
+      .byte 9
+      .byte -5
+      .byte 69
+      .byte 92
+      .byte 94
+      .byte 41
+      .byte -17
+      .byte 65
+      .byte -66
+      .byte -43
+      .byte 49
+      .byte -28
+      .byte 113
+      .byte 64
+      .byte -55
+      .byte -114
+      .byte -53
+      .byte -73
+      .byte -72
+      .byte -9
+      .byte 117
+      .byte -115
+      .byte -36
+      .byte -106
+      .byte 110
+      .byte -61
+      .byte 34
+      .byte 15
+      .byte 62
+      .byte 90
+      .byte 110
+      .byte 85
+      .byte -78
+      .byte -5
+      .byte 4
+      .byte 92
+      .byte 10
+      .byte 41
+      .byte 4
+      .byte 65
+      .byte 11
+      .byte -43
+      .byte 2
+      .byte -28
+      .byte 5
+      .byte 64
+      .byte 9
+      .byte -114
+      .byte 1
+      .byte -73
+      .byte 3
+      .byte -9
+      .byte 0
+      .byte -115
+      .byte 5
+      .byte -106
+      .byte 12
+      .byte -61
+      .byte 9
+      .byte 15
+      .byte 1
+      .byte 90
+      .byte 0
+      .byte 85
+      .byte 3
+      .byte 35
+      .byte 63
+      .byte 35
+      .byte 63
+      .byte -51
+      .byte -105
+      .byte -51
+      .byte -105
+      .byte 102
+      .byte -35
+      .byte 102
+      .byte -35
+      .byte 6
+      .byte -72
+      .byte 6
+      .byte -72
+      .byte -95
+      .byte -35
+      .byte -95
+      .byte -35
+      .byte 37
+      .byte 41
+      .byte 37
+      .byte 41
+      .byte 8
+      .byte -95
+      .byte 8
+      .byte -95
+      .byte -87
+      .byte 109
+      .byte -87
+      .byte 109
+      .byte 35
+      .byte 6
+      .byte 35
+      .byte 6
+      .byte -51
+      .byte 0
+      .byte -51
+      .byte 0
+      .byte 102
+      .byte 11
+      .byte 102
+      .byte 11
+      .byte 6
+      .byte 6
+      .byte 6
+      .byte 6
+      .byte -95
+      .byte 10
+      .byte -95
+      .byte 10
+      .byte 37
+      .byte 10
+      .byte 37
+      .byte 10
+      .byte 8
+      .byte 9
+      .byte 8
+      .byte 9
+      .byte -87
+      .byte 2
+      .byte -87
+      .byte 2
+      .byte 69
+      .byte -122
+      .byte 69
+      .byte -122
+      .byte 69
+      .byte -122
+      .byte 69
+      .byte -122
+      .byte -62
+      .byte 43
+      .byte -62
+      .byte 43
+      .byte -62
+      .byte 43
+      .byte -62
+      .byte 43
+      .byte -78
+      .byte -6
+      .byte -78
+      .byte -6
+      .byte -78
+      .byte -6
+      .byte -78
+      .byte -6
+      .byte 63
+      .byte -42
+      .byte 63
+      .byte -42
+      .byte 63
+      .byte -42
+      .byte 63
+      .byte -42
+      .byte 69
+      .byte 7
+      .byte 69
+      .byte 7
+      .byte 69
+      .byte 7
+      .byte 69
+      .byte 7
+      .byte -62
+      .byte 5
+      .byte -62
+      .byte 5
+      .byte -62
+      .byte 5
+      .byte -62
+      .byte 5
+      .byte -78
+      .byte 4
+      .byte -78
+      .byte 4
+      .byte -78
+      .byte 4
+      .byte -78
+      .byte 4
+      .byte 63
+      .byte 9
+      .byte 63
+      .byte 9
+      .byte 63
+      .byte 9
+      .byte 63
+      .byte 9
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -19
+      .byte -4
+      .byte -19
+      .byte -4
+      .byte -19
+      .byte 5
+      .byte -19
+      .byte 5
+      .byte 75
+      .byte 49
+      .byte -72
+      .byte -77
+      .byte -92
+      .byte -73
+      .byte 125
+      .byte -79
+      .byte -94
+      .byte -50
+      .byte 54
+      .byte 73
+      .byte -109
+      .byte -119
+      .byte -9
+      .byte 126
+      .byte -116
+      .byte -22
+      .byte -52
+      .byte -91
+      .byte -21
+      .byte 17
+      .byte -74
+      .byte -52
+      .byte -104
+      .byte 84
+      .byte -102
+      .byte 55
+      .byte -74
+      .byte -53
+      .byte 83
+      .byte -44
+      .byte 75
+      .byte 0
+      .byte -72
+      .byte 11
+      .byte -92
+      .byte 11
+      .byte 125
+      .byte 10
+      .byte -94
+      .byte 8
+      .byte 54
+      .byte 7
+      .byte -109
+      .byte 0
+      .byte -9
+      .byte 9
+      .byte -116
+      .byte 6
+      .byte -52
+      .byte 1
+      .byte -21
+      .byte 0
+      .byte -74
+      .byte 10
+      .byte -104
+      .byte 12
+      .byte -102
+      .byte 9
+      .byte -74
+      .byte 9
+      .byte 83
+      .byte 11
+      .byte -100
+      .byte 20
+      .byte 95
+      .byte 56
+      .byte 104
+      .byte -69
+      .byte 54
+      .byte 72
+      .byte 90
+      .byte 112
+      .byte 9
+      .byte -114
+      .byte 122
+      .byte -42
+      .byte -10
+      .byte -126
+      .byte -37
+      .byte -25
+      .byte 35
+      .byte 58
+      .byte 80
+      .byte -4
+      .byte 91
+      .byte 108
+      .byte -13
+      .byte -81
+      .byte -29
+      .byte 125
+      .byte -42
+      .byte 44
+      .byte 79
+      .byte 1
+      .byte -100
+      .byte 0
+      .byte 95
+      .byte 11
+      .byte 104
+      .byte 3
+      .byte 54
+      .byte 6
+      .byte 90
+      .byte 2
+      .byte 9
+      .byte 3
+      .byte 122
+      .byte 8
+      .byte -10
+      .byte 0
+      .byte -37
+      .byte 6
+      .byte 35
+      .byte 1
+      .byte 80
+      .byte 12
+      .byte 91
+      .byte 11
+      .byte -13
+      .byte 6
+      .byte -29
+      .byte 4
+      .byte -42
+      .byte 10
+      .byte 79
+      .byte 4
+      .byte 68
+      .byte -109
+      .byte -125
+      .byte 101
+      .byte -118
+      .byte 2
+      .byte 82
+      .byte -36
+      .byte -102
+      .byte 48
+      .byte 64
+      .byte -63
+      .byte 8
+      .byte -104
+      .byte -3
+      .byte 49
+      .byte 8
+      .byte -98
+      .byte 26
+      .byte -81
+      .byte 46
+      .byte -79
+      .byte 13
+      .byte 92
+      .byte 10
+      .byte -121
+      .byte 40
+      .byte -6
+      .byte 117
+      .byte 25
+      .byte 58
+      .byte 22
+      .byte 68
+      .byte 7
+      .byte -125
+      .byte 12
+      .byte -118
+      .byte 4
+      .byte 82
+      .byte 6
+      .byte -102
+      .byte 2
+      .byte 64
+      .byte 1
+      .byte 8
+      .byte 0
+      .byte -3
+      .byte 10
+      .byte 8
+      .byte 6
+      .byte 26
+      .byte 1
+      .byte 46
+      .byte 7
+      .byte 13
+      .byte 5
+      .byte 10
+      .byte 9
+      .byte 40
+      .byte 2
+      .byte 117
+      .byte 10
+      .byte 58
+      .byte 8
+      .byte -126
+      .byte 102
+      .byte -126
+      .byte 102
+      .byte 66
+      .byte -84
+      .byte 66
+      .byte -84
+      .byte 79
+      .byte 4
+      .byte 79
+      .byte 4
+      .byte 61
+      .byte -22
+      .byte 61
+      .byte -22
+      .byte -126
+      .byte 113
+      .byte -126
+      .byte 113
+      .byte -7
+      .byte 102
+      .byte -7
+      .byte 102
+      .byte 45
+      .byte -68
+      .byte 45
+      .byte -68
+      .byte -60
+      .byte 22
+      .byte -60
+      .byte 22
+      .byte -126
+      .byte 0
+      .byte -126
+      .byte 0
+      .byte 66
+      .byte 6
+      .byte 66
+      .byte 6
+      .byte 79
+      .byte 7
+      .byte 79
+      .byte 7
+      .byte 61
+      .byte 3
+      .byte 61
+      .byte 3
+      .byte -126
+      .byte 11
+      .byte -126
+      .byte 11
+      .byte -7
+      .byte 11
+      .byte -7
+      .byte 11
+      .byte 45
+      .byte 5
+      .byte 45
+      .byte 5
+      .byte -60
+      .byte 10
+      .byte -60
+      .byte 10
+      .byte 75
+      .byte 61
+      .byte 75
+      .byte 61
+      .byte 75
+      .byte 61
+      .byte 75
+      .byte 61
+      .byte -40
+      .byte 14
+      .byte -40
+      .byte 14
+      .byte -40
+      .byte 14
+      .byte -40
+      .byte 14
+      .byte -109
+      .byte -109
+      .byte -109
+      .byte -109
+      .byte -109
+      .byte -109
+      .byte -109
+      .byte -109
+      .byte -85
+      .byte 81
+      .byte -85
+      .byte 81
+      .byte -85
+      .byte 81
+      .byte -85
+      .byte 81
+      .byte 75
+      .byte 12
+      .byte 75
+      .byte 12
+      .byte 75
+      .byte 12
+      .byte 75
+      .byte 12
+      .byte -40
+      .byte 6
+      .byte -40
+      .byte 6
+      .byte -40
+      .byte 6
+      .byte -40
+      .byte 6
+      .byte -109
+      .byte 10
+      .byte -109
+      .byte 10
+      .byte -109
+      .byte 10
+      .byte -109
+      .byte 10
+      .byte -85
+      .byte 0
+      .byte -85
+      .byte 0
+      .byte -85
+      .byte 0
+      .byte -85
+      .byte 0
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 103
+      .byte -58
+      .byte 103
+      .byte -58
+      .byte 103
+      .byte 1
+      .byte 103
+      .byte 1
+      .byte -116
+      .byte -21
+      .byte -116
+      .byte -21
+      .byte -116
+      .byte 7
+      .byte -116
+      .byte 7
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 11
+      .byte 123
+      .byte 11
+      .byte 123
+      .byte 11
+      .byte 10
+      .byte 11
+      .byte 10
+      .byte -102
+      .byte 57
+      .byte -102
+      .byte 57
+      .byte -102
+      .byte 11
+      .byte -102
+      .byte 11
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte 86
+      .byte -82
+      .byte 86
+      .byte -82
+      .byte 86
+      .byte -82
+      .byte 86
+      .byte -82
+      .byte 110
+      .byte 108
+      .byte 110
+      .byte 108
+      .byte 110
+      .byte 108
+      .byte 110
+      .byte 108
+      .byte 41
+      .byte -15
+      .byte 41
+      .byte -15
+      .byte 41
+      .byte -15
+      .byte 41
+      .byte -15
+      .byte -74
+      .byte -62
+      .byte -74
+      .byte -62
+      .byte -74
+      .byte -62
+      .byte -74
+      .byte -62
+      .byte 86
+      .byte 12
+      .byte 86
+      .byte 12
+      .byte 86
+      .byte 12
+      .byte 86
+      .byte 12
+      .byte 110
+      .byte 2
+      .byte 110
+      .byte 2
+      .byte 110
+      .byte 2
+      .byte 110
+      .byte 2
+      .byte 41
+      .byte 6
+      .byte 41
+      .byte 6
+      .byte 41
+      .byte 6
+      .byte 41
+      .byte 6
+      .byte -74
+      .byte 0
+      .byte -74
+      .byte 0
+      .byte -74
+      .byte 0
+      .byte -74
+      .byte 0
+      .byte 61
+      .byte -23
+      .byte 61
+      .byte -23
+      .byte -44
+      .byte 67
+      .byte -44
+      .byte 67
+      .byte 8
+      .byte -103
+      .byte 8
+      .byte -103
+      .byte 127
+      .byte -114
+      .byte 127
+      .byte -114
+      .byte -60
+      .byte 21
+      .byte -60
+      .byte 21
+      .byte -78
+      .byte -5
+      .byte -78
+      .byte -5
+      .byte -65
+      .byte 83
+      .byte -65
+      .byte 83
+      .byte 127
+      .byte -103
+      .byte 127
+      .byte -103
+      .byte 61
+      .byte 2
+      .byte 61
+      .byte 2
+      .byte -44
+      .byte 7
+      .byte -44
+      .byte 7
+      .byte 8
+      .byte 1
+      .byte 8
+      .byte 1
+      .byte 127
+      .byte 1
+      .byte 127
+      .byte 1
+      .byte -60
+      .byte 9
+      .byte -60
+      .byte 9
+      .byte -78
+      .byte 5
+      .byte -78
+      .byte 5
+      .byte -65
+      .byte 6
+      .byte -65
+      .byte 6
+      .byte 127
+      .byte 12
+      .byte 127
+      .byte 12
+      .byte -57
+      .byte -23
+      .byte -116
+      .byte -26
+      .byte -39
+      .byte 5
+      .byte -9
+      .byte 120
+      .byte -12
+      .byte -93
+      .byte -45
+      .byte 78
+      .byte -25
+      .byte 80
+      .byte -7
+      .byte 97
+      .byte 4
+      .byte -50
+      .byte -7
+      .byte 103
+      .byte -63
+      .byte 62
+      .byte 103
+      .byte -49
+      .byte -81
+      .byte 35
+      .byte 119
+      .byte -3
+      .byte 126
+      .byte -102
+      .byte -67
+      .byte 108
+      .byte -57
+      .byte 4
+      .byte -116
+      .byte 2
+      .byte -39
+      .byte 10
+      .byte -9
+      .byte 3
+      .byte -12
+      .byte 7
+      .byte -45
+      .byte 5
+      .byte -25
+      .byte 11
+      .byte -7
+      .byte 6
+      .byte 4
+      .byte 2
+      .byte -7
+      .byte 12
+      .byte -63
+      .byte 11
+      .byte 103
+      .byte 10
+      .byte -81
+      .byte 6
+      .byte 119
+      .byte 8
+      .byte 126
+      .byte 0
+      .byte -67
+      .byte 5
+      .byte -78
+      .byte -2
+      .byte 43
+      .byte -45
+      .byte 30
+      .byte -126
+      .byte 14
+      .byte 80
+      .byte -90
+      .byte -109
+      .byte -79
+      .byte 3
+      .byte -34
+      .byte -59
+      .byte 38
+      .byte 24
+      .byte 11
+      .byte 125
+      .byte -121
+      .byte 41
+      .byte -8
+      .byte 113
+      .byte -89
+      .byte -113
+      .byte -53
+      .byte -73
+      .byte -103
+      .byte 68
+      .byte -94
+      .byte -57
+      .byte 101
+      .byte -21
+      .byte -78
+      .byte 8
+      .byte 43
+      .byte 2
+      .byte 30
+      .byte 8
+      .byte 14
+      .byte 6
+      .byte -90
+      .byte 1
+      .byte -79
+      .byte 0
+      .byte -34
+      .byte 11
+      .byte 38
+      .byte 6
+      .byte 11
+      .byte 12
+      .byte -121
+      .byte 4
+      .byte -8
+      .byte 9
+      .byte -89
+      .byte 10
+      .byte -53
+      .byte 6
+      .byte -103
+      .byte 9
+      .byte -94
+      .byte 1
+      .byte 101
+      .byte 12
+      .byte -82
+      .byte 43
+      .byte 75
+      .byte 52
+      .byte 103
+      .byte -56
+      .byte 105
+      .byte -85
+      .byte 75
+      .byte 51
+      .byte 22
+      .byte -18
+      .byte 53
+      .byte 90
+      .byte 117
+      .byte 21
+      .byte 10
+      .byte -127
+      .byte 110
+      .byte 118
+      .byte -53
+      .byte -74
+      .byte 95
+      .byte 49
+      .byte -124
+      .byte 78
+      .byte 93
+      .byte 72
+      .byte 73
+      .byte 76
+      .byte -74
+      .byte -50
+      .byte -82
+      .byte 1
+      .byte 75
+      .byte 3
+      .byte 103
+      .byte 3
+      .byte 105
+      .byte 0
+      .byte 75
+      .byte 2
+      .byte 22
+      .byte 12
+      .byte 53
+      .byte 11
+      .byte 117
+      .byte 6
+      .byte 10
+      .byte 3
+      .byte 110
+      .byte 12
+      .byte -53
+      .byte 5
+      .byte 95
+      .byte 4
+      .byte -124
+      .byte 2
+      .byte 93
+      .byte 1
+      .byte 73
+      .byte 1
+      .byte -74
+      .byte 12
+      .byte 20
+      .byte 3
+      .byte 20
+      .byte 3
+      .byte 20
+      .byte 7
+      .byte 20
+      .byte 7
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -62
+      .byte 41
+      .byte -62
+      .byte 41
+      .byte -62
+      .byte 41
+      .byte -62
+      .byte 41
+      .byte 79
+      .byte 5
+      .byte 79
+      .byte 5
+      .byte 79
+      .byte 5
+      .byte 79
+      .byte 5
+      .byte 63
+      .byte -44
+      .byte 63
+      .byte -44
+      .byte 63
+      .byte -44
+      .byte 63
+      .byte -44
+      .byte -68
+      .byte 121
+      .byte -68
+      .byte 121
+      .byte -68
+      .byte 121
+      .byte -68
+      .byte 121
+      .byte -62
+      .byte 3
+      .byte -62
+      .byte 3
+      .byte -62
+      .byte 3
+      .byte -62
+      .byte 3
+      .byte 79
+      .byte 8
+      .byte 79
+      .byte 8
+      .byte 79
+      .byte 8
+      .byte 79
+      .byte 8
+      .byte 63
+      .byte 7
+      .byte 63
+      .byte 7
+      .byte 63
+      .byte 7
+      .byte 63
+      .byte 7
+      .byte -68
+      .byte 5
+      .byte -68
+      .byte 5
+      .byte -68
+      .byte 5
+      .byte -68
+      .byte 5
+      .byte 88
+      .byte -110
+      .byte 88
+      .byte -110
+      .byte -7
+      .byte 94
+      .byte -7
+      .byte 94
+      .byte -36
+      .byte -42
+      .byte -36
+      .byte -42
+      .byte 96
+      .byte 34
+      .byte 96
+      .byte 34
+      .byte -5
+      .byte 71
+      .byte -5
+      .byte 71
+      .byte -101
+      .byte 34
+      .byte -101
+      .byte 34
+      .byte 52
+      .byte 104
+      .byte 52
+      .byte 104
+      .byte -34
+      .byte -64
+      .byte -34
+      .byte -64
+      .byte 88
+      .byte 10
+      .byte 88
+      .byte 10
+      .byte -7
+      .byte 3
+      .byte -7
+      .byte 3
+      .byte -36
+      .byte 2
+      .byte -36
+      .byte 2
+      .byte 96
+      .byte 2
+      .byte 96
+      .byte 2
+      .byte -5
+      .byte 6
+      .byte -5
+      .byte 6
+      .byte -101
+      .byte 1
+      .byte -101
+      .byte 1
+      .byte 52
+      .byte 12
+      .byte 52
+      .byte 12
+      .byte -34
+      .byte 6
+      .byte -34
+      .byte 6
+      .byte -84
+      .byte 77
+      .byte -89
+      .byte -111
+      .byte -14
+      .byte -63
+      .byte 62
+      .byte -35
+      .byte 107
+      .byte -111
+      .byte 116
+      .byte 35
+      .byte 10
+      .byte -118
+      .byte 74
+      .byte 71
+      .byte 115
+      .byte 52
+      .byte -63
+      .byte 54
+      .byte 29
+      .byte -114
+      .byte 44
+      .byte -50
+      .byte -64
+      .byte 65
+      .byte -40
+      .byte 16
+      .byte -91
+      .byte -95
+      .byte 6
+      .byte -70
+      .byte -84
+      .byte 9
+      .byte -89
+      .byte 12
+      .byte -14
+      .byte 11
+      .byte 62
+      .byte 3
+      .byte 107
+      .byte 0
+      .byte 116
+      .byte 7
+      .byte 10
+      .byte 12
+      .byte 74
+      .byte 9
+      .byte 115
+      .byte 11
+      .byte -63
+      .byte 3
+      .byte 29
+      .byte 7
+      .byte 44
+      .byte 10
+      .byte -64
+      .byte 1
+      .byte -40
+      .byte 8
+      .byte -91
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 49
+      .byte -122
+      .byte 91
+      .byte 99
+      .byte 42
+      .byte -29
+      .byte 72
+      .byte 95
+      .byte 66
+      .byte -82
+      .byte -62
+      .byte 42
+      .byte -105
+      .byte 94
+      .byte 94
+      .byte 66
+      .byte 96
+      .byte 40
+      .byte 3
+      .byte -31
+      .byte 27
+      .byte -88
+      .byte -101
+      .byte 42
+      .byte -107
+      .byte 123
+      .byte -28
+      .byte 111
+      .byte -66
+      .byte 93
+      .byte -14
+      .byte -69
+      .byte 49
+      .byte 3
+      .byte 91
+      .byte 2
+      .byte 42
+      .byte 5
+      .byte 72
+      .byte 7
+      .byte 66
+      .byte 8
+      .byte -62
+      .byte 4
+      .byte -105
+      .byte 9
+      .byte 94
+      .byte 8
+      .byte 96
+      .byte 8
+      .byte 3
+      .byte 8
+      .byte 27
+      .byte 7
+      .byte -101
+      .byte 9
+      .byte -107
+      .byte 12
+      .byte -28
+      .byte 3
+      .byte -66
+      .byte 3
+      .byte -14
+      .byte 5
+      .byte 73
+      .byte 79
+      .byte 98
+      .byte 8
+      .byte -4
+      .byte 59
+      .byte -128
+      .byte -127
+      .byte 121
+      .byte -25
+      .byte -54
+      .byte -59
+      .byte -36
+      .byte -44
+      .byte -122
+      .byte 56
+      .byte 7
+      .byte -84
+      .byte 26
+      .byte -79
+      .byte -85
+      .byte 90
+      .byte -34
+      .byte -69
+      .byte -51
+      .byte -94
+      .byte -33
+      .byte -80
+      .byte 77
+      .byte 30
+      .byte 92
+      .byte 90
+      .byte 73
+      .byte 4
+      .byte 98
+      .byte 2
+      .byte -4
+      .byte 7
+      .byte -128
+      .byte 1
+      .byte 121
+      .byte 12
+      .byte -54
+      .byte 7
+      .byte -36
+      .byte 0
+      .byte -122
+      .byte 6
+      .byte 7
+      .byte 7
+      .byte 26
+      .byte 3
+      .byte -85
+      .byte 9
+      .byte -34
+      .byte 1
+      .byte -51
+      .byte 11
+      .byte -33
+      .byte 3
+      .byte 77
+      .byte 7
+      .byte 92
+      .byte 6
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 7
+      .byte 0
+      .byte 1
+      .byte 2
+      .byte 3
+      .byte 4
+      .byte 5
+      .byte 6
+      .byte 15
+      .byte 8
+      .byte 9
+      .byte 10
+      .byte 11
+      .byte 12
+      .byte 13
+      .byte 14
+      .byte 23
+      .byte 16
+      .byte 17
+      .byte 18
+      .byte 19
+      .byte 20
+      .byte 21
+      .byte 22
+      .byte 31
+      .byte 24
+      .byte 25
+      .byte 26
+      .byte 27
+      .byte 28
+      .byte 29
+      .byte 30
+      .byte 1
+      .byte 2
+      .byte 3
+      .byte 4
+      .byte 5
+      .byte 6
+      .byte 7
+      .byte 0
+      .byte 9
+      .byte 10
+      .byte 11
+      .byte 12
+      .byte 13
+      .byte 14
+      .byte 15
+      .byte 8
+      .byte 17
+      .byte 18
+      .byte 19
+      .byte 20
+      .byte 21
+      .byte 22
+      .byte 23
+      .byte 16
+      .byte 25
+      .byte 26
+      .byte 27
+      .byte 28
+      .byte 29
+      .byte 30
+      .byte 31
+      .byte 24
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 61
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 46
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 28
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 23
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 63
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 2
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 36
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 37
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 19
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 58
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 25
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 54
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 3
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 56
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 62
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 49
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 39
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 44
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 20
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 21
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 43
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 50
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 3
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 18
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 36
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 41
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 62
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 28
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 27
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 45
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 6
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 56
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 39
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 61
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 55
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 2
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 15
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 25
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 20
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 44
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 43
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 21
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 14
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 1
+      .byte 4
+      .byte 5
+      .byte 8
+      .byte 9
+      .byte 12
+      .byte 13
+      .byte 2
+      .byte 3
+      .byte 6
+      .byte 7
+      .byte 10
+      .byte 11
+      .byte 14
+      .byte 15
+      .byte 3
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 2
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte 12
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 4
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 4
+      .byte 4
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 4
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 5
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 6
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 7
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 24
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 13
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 18
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 23
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 16
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 25
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 22
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 15
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 11
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 12
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 21
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 26
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 19
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 20
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 17
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 14
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 27
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -8
+      .byte 31
+      .byte -32
+      .byte 127
+      .byte 4
+      .byte 52
+      .byte 1
+      .byte 13
+      .byte 0
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte 15
+      .byte 0
+      .byte -16
+      .byte 0
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 3
+      .byte 0
+      .byte 16
+      .byte 15
+      .byte 0
+      .byte 1
+      .byte 16
+      .byte 15
+      .byte 0
+      .byte 0
+      .byte 2
+      .byte 1
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -91
+      .byte 6
+      .byte 15
+      .byte 7
+      .byte -76
+      .byte 5
+      .byte 67
+      .byte 9
+      .byte 34
+      .byte 9
+      .byte 29
+      .byte 9
+      .byte 52
+      .byte 1
+      .byte 108
+      .byte 0
+      .byte 35
+      .byte 11
+      .byte 102
+      .byte 3
+      .byte 86
+      .byte 3
+      .byte -26
+      .byte 5
+      .byte -25
+      .byte 9
+      .byte -2
+      .byte 4
+      .byte -6
+      .byte 5
+      .byte -95
+      .byte 4
+      .byte 123
+      .byte 6
+      .byte -93
+      .byte 4
+      .byte 37
+      .byte 12
+      .byte 106
+      .byte 3
+      .byte 55
+      .byte 5
+      .byte 63
+      .byte 8
+      .byte -120
+      .byte 0
+      .byte -65
+      .byte 4
+      .byte -127
+      .byte 11
+      .byte -71
+      .byte 5
+      .byte 5
+      .byte 5
+      .byte -41
+      .byte 7
+      .byte -97
+      .byte 10
+      .byte -90
+      .byte 10
+      .byte -72
+      .byte 8
+      .byte -48
+      .byte 9
+      .byte 75
+      .byte 0
+      .byte -100
+      .byte 0
+      .byte -72
+      .byte 11
+      .byte 95
+      .byte 11
+      .byte -92
+      .byte 11
+      .byte 104
+      .byte 3
+      .byte 125
+      .byte 10
+      .byte 54
+      .byte 6
+      .byte -94
+      .byte 8
+      .byte 90
+      .byte 2
+      .byte 54
+      .byte 7
+      .byte 9
+      .byte 3
+      .byte -109
+      .byte 0
+      .byte 122
+      .byte 8
+      .byte -9
+      .byte 9
+      .byte -10
+      .byte 0
+      .byte -116
+      .byte 6
+      .byte -37
+      .byte 6
+      .byte -52
+      .byte 1
+      .byte 35
+      .byte 1
+      .byte -21
+      .byte 0
+      .byte 80
+      .byte 12
+      .byte -74
+      .byte 10
+      .byte 91
+      .byte 11
+      .byte -104
+      .byte 12
+      .byte -13
+      .byte 6
+      .byte -102
+      .byte 9
+      .byte -29
+      .byte 4
+      .byte -74
+      .byte 9
+      .byte -42
+      .byte 10
+      .byte 83
+      .byte 11
+      .byte 79
+      .byte 4
+      .byte -5
+      .byte 4
+      .byte 92
+      .byte 10
+      .byte 41
+      .byte 4
+      .byte 65
+      .byte 11
+      .byte -43
+      .byte 2
+      .byte -28
+      .byte 5
+      .byte 64
+      .byte 9
+      .byte -114
+      .byte 1
+      .byte -73
+      .byte 3
+      .byte -9
+      .byte 0
+      .byte -115
+      .byte 5
+      .byte -106
+      .byte 12
+      .byte -61
+      .byte 9
+      .byte 15
+      .byte 1
+      .byte 90
+      .byte 0
+      .byte 85
+      .byte 3
+      .byte 68
+      .byte 7
+      .byte -125
+      .byte 12
+      .byte -118
+      .byte 4
+      .byte 82
+      .byte 6
+      .byte -102
+      .byte 2
+      .byte 64
+      .byte 1
+      .byte 8
+      .byte 0
+      .byte -3
+      .byte 10
+      .byte 8
+      .byte 6
+      .byte 26
+      .byte 1
+      .byte 46
+      .byte 7
+      .byte 13
+      .byte 5
+      .byte 10
+      .byte 9
+      .byte 40
+      .byte 2
+      .byte 117
+      .byte 10
+      .byte 58
+      .byte 8
+      .byte 35
+      .byte 6
+      .byte -51
+      .byte 0
+      .byte 102
+      .byte 11
+      .byte 6
+      .byte 6
+      .byte -95
+      .byte 10
+      .byte 37
+      .byte 10
+      .byte 8
+      .byte 9
+      .byte -87
+      .byte 2
+      .byte -126
+      .byte 0
+      .byte 66
+      .byte 6
+      .byte 79
+      .byte 7
+      .byte 61
+      .byte 3
+      .byte -126
+      .byte 11
+      .byte -7
+      .byte 11
+      .byte 45
+      .byte 5
+      .byte -60
+      .byte 10
+      .byte 69
+      .byte 7
+      .byte -62
+      .byte 5
+      .byte -78
+      .byte 4
+      .byte 63
+      .byte 9
+      .byte 75
+      .byte 12
+      .byte -40
+      .byte 6
+      .byte -109
+      .byte 10
+      .byte -85
+      .byte 0
+      .byte 55
+      .byte 12
+      .byte -30
+      .byte 11
+      .byte 115
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte -19
+      .byte 5
+      .byte 103
+      .byte 1
+      .byte -10
+      .byte 2
+      .byte -95
+      .byte 5
+      .byte -19
+      .byte 8
+      .byte 11
+      .byte 10
+      .byte -102
+      .byte 11
+      .byte 20
+      .byte 7
+      .byte -43
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte 31
+      .byte 1
+      .byte -54
+      .byte 0
+      .byte 86
+      .byte 12
+      .byte 110
+      .byte 2
+      .byte 41
+      .byte 6
+      .byte -74
+      .byte 0
+      .byte -62
+      .byte 3
+      .byte 79
+      .byte 8
+      .byte 63
+      .byte 7
+      .byte -68
+      .byte 5
+      .byte 61
+      .byte 2
+      .byte -44
+      .byte 7
+      .byte 8
+      .byte 1
+      .byte 127
+      .byte 1
+      .byte -60
+      .byte 9
+      .byte -78
+      .byte 5
+      .byte -65
+      .byte 6
+      .byte 127
+      .byte 12
+      .byte 88
+      .byte 10
+      .byte -7
+      .byte 3
+      .byte -36
+      .byte 2
+      .byte 96
+      .byte 2
+      .byte -5
+      .byte 6
+      .byte -101
+      .byte 1
+      .byte 52
+      .byte 12
+      .byte -34
+      .byte 6
+      .byte -57
+      .byte 4
+      .byte -116
+      .byte 2
+      .byte -39
+      .byte 10
+      .byte -9
+      .byte 3
+      .byte -12
+      .byte 7
+      .byte -45
+      .byte 5
+      .byte -25
+      .byte 11
+      .byte -7
+      .byte 6
+      .byte 4
+      .byte 2
+      .byte -7
+      .byte 12
+      .byte -63
+      .byte 11
+      .byte 103
+      .byte 10
+      .byte -81
+      .byte 6
+      .byte 119
+      .byte 8
+      .byte 126
+      .byte 0
+      .byte -67
+      .byte 5
+      .byte -84
+      .byte 9
+      .byte -89
+      .byte 12
+      .byte -14
+      .byte 11
+      .byte 62
+      .byte 3
+      .byte 107
+      .byte 0
+      .byte 116
+      .byte 7
+      .byte 10
+      .byte 12
+      .byte 74
+      .byte 9
+      .byte 115
+      .byte 11
+      .byte -63
+      .byte 3
+      .byte 29
+      .byte 7
+      .byte 44
+      .byte 10
+      .byte -64
+      .byte 1
+      .byte -40
+      .byte 8
+      .byte -91
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte -78
+      .byte 8
+      .byte -82
+      .byte 1
+      .byte 43
+      .byte 2
+      .byte 75
+      .byte 3
+      .byte 30
+      .byte 8
+      .byte 103
+      .byte 3
+      .byte 14
+      .byte 6
+      .byte 105
+      .byte 0
+      .byte -90
+      .byte 1
+      .byte 75
+      .byte 2
+      .byte -79
+      .byte 0
+      .byte 22
+      .byte 12
+      .byte -34
+      .byte 11
+      .byte 53
+      .byte 11
+      .byte 38
+      .byte 6
+      .byte 117
+      .byte 6
+      .byte 11
+      .byte 12
+      .byte 10
+      .byte 3
+      .byte -121
+      .byte 4
+      .byte 110
+      .byte 12
+      .byte -8
+      .byte 9
+      .byte -53
+      .byte 5
+      .byte -89
+      .byte 10
+      .byte 95
+      .byte 4
+      .byte -53
+      .byte 6
+      .byte -124
+      .byte 2
+      .byte -103
+      .byte 9
+      .byte 93
+      .byte 1
+      .byte -94
+      .byte 1
+      .byte 73
+      .byte 1
+      .byte 101
+      .byte 12
+      .byte -74
+      .byte 12
+      .byte 49
+      .byte 3
+      .byte 73
+      .byte 4
+      .byte 91
+      .byte 2
+      .byte 98
+      .byte 2
+      .byte 42
+      .byte 5
+      .byte -4
+      .byte 7
+      .byte 72
+      .byte 7
+      .byte -128
+      .byte 1
+      .byte 66
+      .byte 8
+      .byte 121
+      .byte 12
+      .byte -62
+      .byte 4
+      .byte -54
+      .byte 7
+      .byte -105
+      .byte 9
+      .byte -36
+      .byte 0
+      .byte 94
+      .byte 8
+      .byte -122
+      .byte 6
+      .byte 96
+      .byte 8
+      .byte 7
+      .byte 7
+      .byte 3
+      .byte 8
+      .byte 26
+      .byte 3
+      .byte 27
+      .byte 7
+      .byte -85
+      .byte 9
+      .byte -101
+      .byte 9
+      .byte -34
+      .byte 1
+      .byte -107
+      .byte 12
+      .byte -51
+      .byte 11
+      .byte -28
+      .byte 3
+      .byte -33
+      .byte 3
+      .byte -66
+      .byte 3
+      .byte 77
+      .byte 7
+      .byte -14
+      .byte 5
+      .byte 92
+      .byte 6
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/.deps/kem.s.d b/src/kem/kyber/libjade_kyber512_amd64_ref/.deps/kem.s.d
new file mode 100644
index 0000000000..d3b866d0ef
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_ref/.deps/kem.s.d
@@ -0,0 +1 @@
+kem.s: kem.jazz /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber512/amd64/ref/indcpa.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber512/common/params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/poly.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_ref_DIRTY.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/ref1/keccak1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/ref1/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600_globals.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/zetas.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/reduce.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/polyvec.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/gen_matrix.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/tofromstack.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/verify.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/kem.jinc
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/Makefile b/src/kem/kyber/libjade_kyber512_amd64_ref/Makefile
new file mode 100644
index 0000000000..29a80faa80
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_ref/Makefile
@@ -0,0 +1,2 @@
+SRCS := kem.jazz
+include ../../../../../Makefile.common
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/api.c b/src/kem/kyber/libjade_kyber512_amd64_ref/api.c
new file mode 100644
index 0000000000..2a4298f01f
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_ref/api.c
@@ -0,0 +1,20 @@
+#include <oqs/rand.h>
+#include "libjade_randombytes.h"
+#include "api.h"
+
+int libjade_kyber512_amd64_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
+    uint8_t keypair_coins[JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES];
+    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2);
+    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2);
+    return jade_kem_kyber_kyber512_amd64_ref_keypair_derand(public_key, secret_key, keypair_coins);
+}
+
+int libjade_kyber512_amd64_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
+    uint8_t enc_coins[JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES];
+    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES);
+    return jade_kem_kyber_kyber512_amd64_ref_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
+}
+
+int libjade_kyber512_amd64_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
+    return jade_kem_kyber_kyber512_amd64_ref_dec(shared_secret, ciphertext, secret_key);
+}
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/include/api.h b/src/kem/kyber/libjade_kyber512_amd64_ref/include/api.h
new file mode 100644
index 0000000000..233223089c
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_ref/include/api.h
@@ -0,0 +1,45 @@
+#ifndef JADE_KEM_kyber_kyber512_amd64_ref_API_H
+#define JADE_KEM_kyber_kyber512_amd64_ref_API_H
+
+#include <stdint.h>
+
+#define JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES 64
+#define JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES     32
+
+int jade_kem_kyber_kyber512_amd64_ref_keypair_derand(
+  uint8_t *public_key,
+  uint8_t *secret_key,
+  const uint8_t *coins
+);
+
+int libjade_kyber512_amd64_ref_keypair(
+  uint8_t *public_key,
+  uint8_t *secret_key
+);
+
+int jade_kem_kyber_kyber512_amd64_ref_enc_derand(
+  uint8_t *ciphertext,
+  uint8_t *shared_secret,
+  const uint8_t *public_key,
+  const uint8_t *coins
+);
+
+int libjade_kyber512_amd64_ref_enc(
+  uint8_t *ciphertext,
+  uint8_t *shared_secret,
+  const uint8_t *public_key
+);
+
+int jade_kem_kyber_kyber512_amd64_ref_dec(
+  uint8_t *shared_secret,
+  const uint8_t *ciphertext,
+  const uint8_t *secret_key
+);
+
+int libjade_kyber512_amd64_ref_dec(
+  uint8_t *shared_secret,
+  const uint8_t *ciphertext,
+  const uint8_t *secret_key
+);
+
+#endif
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/indcpa.jinc b/src/kem/kyber/libjade_kyber512_amd64_ref/indcpa.jinc
new file mode 100644
index 0000000000..c1bb634bb2
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_ref/indcpa.jinc
@@ -0,0 +1,242 @@
+from Jade require "crypto_kem/kyber/kyber512/common/params.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/ref/poly.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/ref/polyvec.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/ref/gen_matrix.jinc"
+
+inline
+fn __indcpa_keypair_derand(reg u64 pkp, reg u64 skp, reg ptr u8[KYBER_SYMBYTES] coins)
+{
+  stack u64 spkp sskp;
+  stack u16[KYBER_K * KYBER_VECN] a;
+  stack u16[KYBER_VECN] e pkpv skpv;
+  stack u8[64] buf;
+  stack u8[KYBER_SYMBYTES] publicseed noiseseed;
+  reg u64 t64;
+  reg u8 nonce, c;
+  inline int i;
+
+  spkp = pkp;
+  sskp = skp;
+
+  buf = _sha3_512_32(buf, coins);
+
+  for i=0 to KYBER_SYMBYTES/8
+  {
+    t64 = buf[u64 i];
+    publicseed[u64 i] = t64;
+    t64 = buf[u64 i + KYBER_SYMBYTES/8];
+    noiseseed[u64 i] = t64;
+  }
+
+  a = __gen_matrix(publicseed, 0);
+
+  nonce = 0;
+  skpv[0:KYBER_N] = _poly_getnoise_eta1(skpv[0:KYBER_N], noiseseed, nonce);
+  nonce = 1;
+  skpv[KYBER_N:KYBER_N] = _poly_getnoise_eta1(skpv[KYBER_N:KYBER_N], noiseseed, nonce);
+
+  nonce = 2;
+  e[0:KYBER_N] = _poly_getnoise_eta1(e[0:KYBER_N], noiseseed, nonce);
+  nonce = 3;
+  e[KYBER_N:KYBER_N] = _poly_getnoise_eta1(e[KYBER_N:KYBER_N], noiseseed, nonce);
+
+  skpv = __polyvec_ntt(skpv);
+  e    = __polyvec_ntt(e);
+
+  for i=0 to KYBER_K
+  {
+    pkpv[i*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(a[i*KYBER_VECN:KYBER_VECN], skpv);
+    pkpv[i*KYBER_N:KYBER_N] = _poly_frommont(pkpv[i*KYBER_N:KYBER_N]);
+  }
+
+  pkpv = __polyvec_add2(pkpv, e);
+  pkpv = __polyvec_reduce(pkpv);
+
+  pkp = spkp;
+  skp = sskp;
+
+  __polyvec_tobytes(skp, skpv);
+  __polyvec_tobytes(pkp, pkpv);
+
+  pkp += KYBER_POLYVECBYTES; 
+  for i=0 to KYBER_SYMBYTES/8
+  {
+    t64 = publicseed[u64 i];
+    (u64)[pkp] = t64;
+    pkp += 8;
+  }
+}
+
+
+inline
+fn __indcpa_enc_0(stack u64 sctp, reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed)
+{
+  stack u16[KYBER_K*KYBER_VECN] aat;
+  stack u16[KYBER_VECN] pkpv sp ep bp;
+  stack u16[KYBER_N] k epp v;
+  stack u8[KYBER_SYMBYTES] publicseed;
+  stack ptr u8[KYBER_SYMBYTES] s_noiseseed;
+  reg ptr u8[KYBER_SYMBYTES] lnoiseseed;
+  reg u64 i ctp t64;
+  reg u8 nonce;
+  inline int j;
+
+  pkpv = __polyvec_frombytes(pkp);
+
+  i = 0;
+  pkp += KYBER_POLYVECBYTES;
+  while (i < KYBER_SYMBYTES/8)
+  {
+    t64 = (u64)[pkp];
+    publicseed[u64 (int)i] = t64;
+    pkp += 8;
+    i += 1;
+  }
+
+  k = _i_poly_frommsg(k, msgp);
+
+  s_noiseseed = noiseseed;
+  aat = __gen_matrix(publicseed, 1);
+
+  lnoiseseed = s_noiseseed;
+  nonce = 0;
+  sp[0:KYBER_N] = _poly_getnoise_eta1(sp[0:KYBER_N], lnoiseseed, nonce);
+  lnoiseseed = s_noiseseed;
+  nonce = 1;
+  sp[KYBER_N:KYBER_N] = _poly_getnoise_eta1(sp[KYBER_N:KYBER_N], lnoiseseed, nonce);
+
+  lnoiseseed = s_noiseseed;
+  nonce = 2;
+  ep[0:KYBER_N] = _poly_getnoise_eta2(ep[0:KYBER_N], lnoiseseed, nonce);
+  lnoiseseed = s_noiseseed;
+  nonce = 3;
+  ep[KYBER_N:KYBER_N] = _poly_getnoise_eta2(ep[KYBER_N:KYBER_N], lnoiseseed, nonce);
+
+  lnoiseseed = s_noiseseed;
+  nonce = 4;
+  epp = _poly_getnoise_eta2(epp, lnoiseseed, nonce);
+
+  sp = __polyvec_ntt(sp);
+
+  for j=0 to KYBER_K
+  {
+    bp[j*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(aat[j*KYBER_VECN:KYBER_VECN], sp);
+  }
+  
+  v = __polyvec_pointwise_acc(pkpv, sp);
+
+  bp = __polyvec_invntt(bp);
+  v = _poly_invntt(v);
+
+  bp = __polyvec_add2(bp, ep);
+  v = _poly_add2(v, epp);
+  v = _poly_add2(v, k);
+  bp = __polyvec_reduce(bp);
+  v  = __poly_reduce(v);
+
+  ctp = sctp;
+  __polyvec_compress(ctp, bp);
+  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
+  v = _poly_compress(ctp, v);
+}
+
+inline
+fn __indcpa_enc_1(reg ptr u8[KYBER_INDCPA_BYTES] ctp, reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed) -> reg ptr u8[KYBER_INDCPA_BYTES]
+{
+  stack u16[KYBER_K*KYBER_VECN] aat;
+  stack u16[KYBER_VECN] pkpv sp ep bp;
+  stack u16[KYBER_N] k epp v;
+  stack u8[KYBER_SYMBYTES] publicseed;
+  stack ptr u8[KYBER_SYMBYTES] s_noiseseed;
+  reg ptr u8[KYBER_SYMBYTES] lnoiseseed;
+  stack ptr u8[KYBER_INDCPA_BYTES] sctp;
+  reg u64 i t64;
+  reg u8 nonce;
+  inline int j;
+
+  sctp = ctp;
+
+  pkpv = __polyvec_frombytes(pkp);
+
+  i = 0;
+  pkp += KYBER_POLYVECBYTES;
+  while (i < KYBER_SYMBYTES/8)
+  {
+    t64 = (u64)[pkp];
+    publicseed[u64 (int)i] = t64;
+    pkp += 8;
+    i += 1;
+  }
+
+  k = _i_poly_frommsg(k, msgp);
+
+  s_noiseseed = noiseseed;
+  aat = __gen_matrix(publicseed, 1);
+  lnoiseseed = s_noiseseed;
+
+  nonce = 0;
+  sp[0:KYBER_N] = _poly_getnoise_eta1(sp[0:KYBER_N], lnoiseseed, nonce);
+  lnoiseseed = s_noiseseed;
+  nonce = 1;
+  sp[KYBER_N:KYBER_N] = _poly_getnoise_eta1(sp[KYBER_N:KYBER_N], lnoiseseed, nonce);
+
+  lnoiseseed = s_noiseseed;
+  nonce = 2;
+  ep[0:KYBER_N] = _poly_getnoise_eta2(ep[0:KYBER_N], lnoiseseed, nonce);
+  lnoiseseed = s_noiseseed;
+  nonce = 3;
+  ep[KYBER_N:KYBER_N] = _poly_getnoise_eta2(ep[KYBER_N:KYBER_N], lnoiseseed, nonce);
+
+  lnoiseseed = s_noiseseed;
+  nonce = 4;
+  epp = _poly_getnoise_eta2(epp, lnoiseseed, nonce);
+
+  sp = __polyvec_ntt(sp);
+    
+  for j=0 to KYBER_K
+  {
+    bp[j*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(aat[j*KYBER_VECN:KYBER_VECN], sp);
+  }
+  
+  v = __polyvec_pointwise_acc(pkpv, sp);
+
+  bp = __polyvec_invntt(bp);
+  v = _poly_invntt(v);
+
+  bp = __polyvec_add2(bp, ep);
+  v = _poly_add2(v, epp);
+  v = _poly_add2(v, k);
+  bp = __polyvec_reduce(bp);
+  v  = __poly_reduce(v);
+
+  ctp = sctp;
+  ctp[0:KYBER_POLYVECCOMPRESSEDBYTES] = __i_polyvec_compress(ctp[0:KYBER_POLYVECCOMPRESSEDBYTES], bp);
+  ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v = _i_poly_compress(ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v);
+
+  return ctp;
+}
+
+
+inline
+fn __indcpa_dec(reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 ctp, reg u64 skp) -> reg ptr u8[KYBER_INDCPA_MSGBYTES]
+{
+  stack u16[KYBER_N] t v mp;
+  stack u16[KYBER_VECN] bp skpv;
+
+  bp = __polyvec_decompress(ctp);
+  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
+  v = _poly_decompress(v, ctp);
+
+  skpv = __polyvec_frombytes(skp);
+  
+  bp = __polyvec_ntt(bp);
+  t = __polyvec_pointwise_acc(skpv, bp);
+  t = _poly_invntt(t);
+
+  mp = _poly_sub(mp, v, t);
+  mp = __poly_reduce(mp);
+  
+  msgp, mp = _i_poly_tomsg(msgp, mp);
+
+  return msgp;
+}
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/kem.jazz b/src/kem/kyber/libjade_kyber512_amd64_ref/kem.jazz
new file mode 100644
index 0000000000..3d43af2ae5
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_ref/kem.jazz
@@ -0,0 +1,66 @@
+require "indcpa.jinc"
+from Jade require "common/tofromstack.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/ref/verify.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/kem.jinc"
+
+export fn jade_kem_kyber_kyber512_amd64_ref_keypair_derand(reg u64 public_key secret_key coins) -> reg u64
+{
+  reg u64 r;
+  stack u8[2*KYBER_SYMBYTES] stack_coins;
+
+  public_key = public_key;
+  secret_key = secret_key;
+  stack_coins = __tostack64u8(stack_coins, coins);
+  __crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber512_amd64_ref_keypair(reg u64 public_key secret_key) -> reg u64
+{
+  reg u64 r;
+  stack u8[2*KYBER_SYMBYTES] stack_coins;
+
+  public_key = public_key;
+  secret_key = secret_key;
+  stack_coins = #randombytes(stack_coins);
+  __crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber512_amd64_ref_enc_derand(reg u64 ciphertext shared_secret public_key coins) -> reg u64
+{
+  reg u64 r;
+  stack u8[KYBER_SYMBYTES] stack_coins;
+  
+  ciphertext = ciphertext;
+  shared_secret = shared_secret;
+  public_key = public_key;
+  stack_coins = __tostack32u8(stack_coins, coins);
+  __crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber512_amd64_ref_enc(reg u64 ciphertext shared_secret public_key) -> reg u64
+{
+  reg u64 r;
+  stack u8[KYBER_SYMBYTES] stack_coins;
+
+  ciphertext = ciphertext;
+  shared_secret = shared_secret;
+  public_key = public_key;
+  stack_coins = #randombytes(stack_coins);
+  __crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber512_amd64_ref_dec(reg u64 shared_secret ciphertext secret_key) -> reg u64
+{
+  reg u64 r;
+  __crypto_kem_dec_jazz(shared_secret, ciphertext, secret_key);
+  ?{}, r = #set0();
+  return r;
+}
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/kem.s b/src/kem/kyber/libjade_kyber512_amd64_ref/kem.s
new file mode 100644
index 0000000000..62cc5b987a
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_amd64_ref/kem.s
@@ -0,0 +1,16332 @@
+	.att_syntax
+	.text
+	.p2align	5
+	.globl	_jade_kem_kyber_kyber512_amd64_ref_dec
+	.globl	jade_kem_kyber_kyber512_amd64_ref_dec
+	.globl	_jade_kem_kyber_kyber512_amd64_ref_enc
+	.globl	jade_kem_kyber_kyber512_amd64_ref_enc
+	.globl	_jade_kem_kyber_kyber512_amd64_ref_enc_derand
+	.globl	jade_kem_kyber_kyber512_amd64_ref_enc_derand
+	.globl	_jade_kem_kyber_kyber512_amd64_ref_keypair
+	.globl	jade_kem_kyber_kyber512_amd64_ref_keypair
+	.globl	_jade_kem_kyber_kyber512_amd64_ref_keypair_derand
+	.globl	jade_kem_kyber_kyber512_amd64_ref_keypair_derand
+_jade_kem_kyber_kyber512_amd64_ref_dec:
+jade_kem_kyber_kyber512_amd64_ref_dec:
+	movq	%rsp, %rax
+	leaq	-9632(%rsp), %rsp
+	andq	$-8, %rsp
+	movq	%rax, 9624(%rsp)
+	movq	%r14, 9584(%rsp)
+	movq	%r13, 9592(%rsp)
+	movq	%r12, 9600(%rsp)
+	movq	%rbp, 9608(%rsp)
+	movq	%rbx, 9616(%rsp)
+	movq	%rdi, (%rsp)
+	movq	%rsi, 8(%rsp)
+	leaq	88(%rsp), %rax
+	movq	$0, %rcx
+	movq	$0, %rdi
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$124
+Ljade_kem_kyber_kyber512_amd64_ref_dec$125:
+	movzbl	(%rsi,%rdi), %r10d
+	incq	%rdi
+	movzbl	(%rsi,%rdi), %r11d
+	incq	%rdi
+	movzbl	(%rsi,%rdi), %r8d
+	incq	%rdi
+	movzbl	(%rsi,%rdi), %r9d
+	incq	%rdi
+	movzbl	(%rsi,%rdi), %ebx
+	incq	%rdi
+	movl	%r11d, %ebp
+	shrl	$2, %r11d
+	andl	$3, %ebp
+	shll	$8, %ebp
+	orl 	%ebp, %r10d
+	movl	%r8d, %ebp
+	shrl	$4, %r8d
+	andl	$15, %ebp
+	shll	$6, %ebp
+	orl 	%ebp, %r11d
+	movl	%r9d, %ebp
+	shrl	$6, %r9d
+	andl	$63, %ebp
+	shll	$4, %ebp
+	orl 	%ebp, %r8d
+	shll	$2, %ebx
+	orl 	%ebx, %r9d
+	imull	$3329, %r10d, %r10d
+	addl	$512, %r10d
+	shrl	$10, %r10d
+	movw	%r10w, 2464(%rsp,%rcx,2)
+	incq	%rcx
+	imull	$3329, %r11d, %r10d
+	addl	$512, %r10d
+	shrl	$10, %r10d
+	movw	%r10w, 2464(%rsp,%rcx,2)
+	incq	%rcx
+	imull	$3329, %r8d, %r8d
+	addl	$512, %r8d
+	shrl	$10, %r8d
+	movw	%r8w, 2464(%rsp,%rcx,2)
+	incq	%rcx
+	imull	$3329, %r9d, %r8d
+	addl	$512, %r8d
+	shrl	$10, %r8d
+	movw	%r8w, 2464(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$124:
+	cmpq	$512, %rcx
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$125
+	addq	$640, %rsi
+	leaq	928(%rsp), %rcx
+	call	L_poly_decompress$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$123:
+	movq	%rdx, %rsi
+	leaq	3488(%rsp), %rdi
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$122:
+	addq	$384, %rsi
+	leaq	4000(%rsp), %rdi
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$121:
+	leaq	2464(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$120:
+	leaq	2976(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$119:
+	leaq	416(%rsp), %rdi
+	leaq	3488(%rsp), %rcx
+	leaq	2464(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$118:
+	leaq	16(%rsp), %rsp
+	leaq	1440(%rsp), %rdi
+	leaq	4000(%rsp), %rcx
+	leaq	2976(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$117:
+	leaq	16(%rsp), %rsp
+	leaq	416(%rsp), %rcx
+	leaq	1440(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$116:
+	leaq	416(%rsp), %rcx
+	movq	$0, %rsi
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$114
+Ljade_kem_kyber_kyber512_amd64_ref_dec$115:
+	movw	(%rcx,%rsi,2), %di
+	movswl	%di, %r8d
+	imull	$20159, %r8d, %r8d
+	sarl	$26, %r8d
+	imull	$3329, %r8d, %r8d
+	subw	%r8w, %di
+	movw	%di, (%rcx,%rsi,2)
+	incq	%rsi
+Ljade_kem_kyber_kyber512_amd64_ref_dec$114:
+	cmpq	$256, %rsi
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$115
+	leaq	416(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$113:
+	leaq	1440(%rsp), %rcx
+	leaq	928(%rsp), %rsi
+	leaq	416(%rsp), %rdi
+	call	L_poly_sub$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$112:
+	leaq	1440(%rsp), %rcx
+	movq	$0, %rsi
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$110
+Ljade_kem_kyber_kyber512_amd64_ref_dec$111:
+	movw	(%rcx,%rsi,2), %di
+	movswl	%di, %r8d
+	imull	$20159, %r8d, %r8d
+	sarl	$26, %r8d
+	imull	$3329, %r8d, %r8d
+	subw	%r8w, %di
+	movw	%di, (%rcx,%rsi,2)
+	incq	%rsi
+Ljade_kem_kyber_kyber512_amd64_ref_dec$110:
+	cmpq	$256, %rsi
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$111
+	leaq	1440(%rsp), %rcx
+	call	L_i_poly_tomsg$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$109:
+	leaq	32(%rdx), %rax
+	addq	$1536, %rax
+	movq	(%rax), %rcx
+	movq	%rcx, 120(%rsp)
+	movq	8(%rax), %rcx
+	movq	%rcx, 128(%rsp)
+	movq	16(%rax), %rcx
+	movq	%rcx, 136(%rsp)
+	movq	24(%rax), %rax
+	movq	%rax, 144(%rsp)
+	movq	%rdx, 16(%rsp)
+	leaq	152(%rsp), %rax
+	leaq	88(%rsp), %rcx
+	leaq	-208(%rsp), %rsp
+	call	L_sha3_512_64$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$108:
+	leaq	208(%rsp), %rsp
+	movq	16(%rsp), %rdx
+	addq	$768, %rdx
+	leaq	8810(%rsp), %rsi
+	leaq	88(%rsp), %rcx
+	leaq	184(%rsp), %rax
+	movq	%rsi, 24(%rsp)
+	movq	%rdx, %rsi
+	leaq	2464(%rsp), %rdi
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$107:
+	addq	$384, %rsi
+	leaq	2976(%rsp), %rdi
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$106:
+	movq	$0, %rsi
+	addq	$768, %rdx
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$104
+Ljade_kem_kyber_kyber512_amd64_ref_dec$105:
+	movq	(%rdx), %rdi
+	movq	%rdi, 56(%rsp,%rsi,8)
+	addq	$8, %rdx
+	incq	%rsi
+Ljade_kem_kyber_kyber512_amd64_ref_dec$104:
+	cmpq	$4, %rsi
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$105
+	leaq	1440(%rsp), %rdx
+	call	L_i_poly_frommsg$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$103:
+	movq	%rax, 32(%rsp)
+	movq	$1, %rax
+	movq	%rax, 40(%rsp)
+	movb	56(%rsp), %al
+	movb	%al, 8608(%rsp)
+	movb	57(%rsp), %al
+	movb	%al, 8609(%rsp)
+	movb	58(%rsp), %al
+	movb	%al, 8610(%rsp)
+	movb	59(%rsp), %al
+	movb	%al, 8611(%rsp)
+	movb	60(%rsp), %al
+	movb	%al, 8612(%rsp)
+	movb	61(%rsp), %al
+	movb	%al, 8613(%rsp)
+	movb	62(%rsp), %al
+	movb	%al, 8614(%rsp)
+	movb	63(%rsp), %al
+	movb	%al, 8615(%rsp)
+	movb	64(%rsp), %al
+	movb	%al, 8616(%rsp)
+	movb	65(%rsp), %al
+	movb	%al, 8617(%rsp)
+	movb	66(%rsp), %al
+	movb	%al, 8618(%rsp)
+	movb	67(%rsp), %al
+	movb	%al, 8619(%rsp)
+	movb	68(%rsp), %al
+	movb	%al, 8620(%rsp)
+	movb	69(%rsp), %al
+	movb	%al, 8621(%rsp)
+	movb	70(%rsp), %al
+	movb	%al, 8622(%rsp)
+	movb	71(%rsp), %al
+	movb	%al, 8623(%rsp)
+	movb	72(%rsp), %al
+	movb	%al, 8624(%rsp)
+	movb	73(%rsp), %al
+	movb	%al, 8625(%rsp)
+	movb	74(%rsp), %al
+	movb	%al, 8626(%rsp)
+	movb	75(%rsp), %al
+	movb	%al, 8627(%rsp)
+	movb	76(%rsp), %al
+	movb	%al, 8628(%rsp)
+	movb	77(%rsp), %al
+	movb	%al, 8629(%rsp)
+	movb	78(%rsp), %al
+	movb	%al, 8630(%rsp)
+	movb	79(%rsp), %al
+	movb	%al, 8631(%rsp)
+	movb	80(%rsp), %al
+	movb	%al, 8632(%rsp)
+	movb	81(%rsp), %al
+	movb	%al, 8633(%rsp)
+	movb	82(%rsp), %al
+	movb	%al, 8634(%rsp)
+	movb	83(%rsp), %al
+	movb	%al, 8635(%rsp)
+	movb	84(%rsp), %al
+	movb	%al, 8636(%rsp)
+	movb	85(%rsp), %al
+	movb	%al, 8637(%rsp)
+	movb	86(%rsp), %al
+	movb	%al, 8638(%rsp)
+	movb	87(%rsp), %al
+	movb	%al, 8639(%rsp)
+	movq	40(%rsp), %rax
+	cmpq	$0, %rax
+	je  	Ljade_kem_kyber_kyber512_amd64_ref_dec$101
+	movb	$0, 8640(%rsp)
+	movb	$0, 8641(%rsp)
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$102
+Ljade_kem_kyber_kyber512_amd64_ref_dec$101:
+	movb	$0, 8640(%rsp)
+	movb	$0, 8641(%rsp)
+Ljade_kem_kyber_kyber512_amd64_ref_dec$102:
+	leaq	216(%rsp), %rax
+	leaq	8608(%rsp), %rcx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$100:
+	movq	$0, %rax
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$98
+Ljade_kem_kyber_kyber512_amd64_ref_dec$99:
+	movq	%rax, 416(%rsp,%rax,8)
+	incq	%rax
+Ljade_kem_kyber_kyber512_amd64_ref_dec$98:
+	cmpq	$64, %rax
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$99
+	movq	$0, %rax
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$90
+Ljade_kem_kyber_kyber512_amd64_ref_dec$91:
+	movq	%rax, 48(%rsp)
+	leaq	216(%rsp), %rax
+	leaq	8642(%rsp), %rcx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$97:
+	leaq	8(%rsp), %rsp
+	movq	48(%rsp), %rax
+	movq	$0, %rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$92:
+	movzbw	8642(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	8642(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	8642(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$95
+	cmpq	$256, %rax
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$95
+	movw	%dx, 416(%rsp,%rax,2)
+	incq	%rax
+Ljade_kem_kyber_kyber512_amd64_ref_dec$96:
+Ljade_kem_kyber_kyber512_amd64_ref_dec$95:
+	cmpw	$3329, %di
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$93
+	cmpq	$256, %rax
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$93
+	movw	%di, 416(%rsp,%rax,2)
+	incq	%rax
+Ljade_kem_kyber_kyber512_amd64_ref_dec$94:
+Ljade_kem_kyber_kyber512_amd64_ref_dec$93:
+	cmpq	$166, %rcx
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$92
+Ljade_kem_kyber_kyber512_amd64_ref_dec$90:
+	cmpq	$256, %rax
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$91
+	movq	$0, %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$88
+Ljade_kem_kyber_kyber512_amd64_ref_dec$89:
+	movw	416(%rsp,%rax,2), %dx
+	movw	%dx, 6560(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$88:
+	cmpq	$256, %rax
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$89
+	movq	40(%rsp), %rax
+	cmpq	$0, %rax
+	je  	Ljade_kem_kyber_kyber512_amd64_ref_dec$86
+	movb	$0, 8640(%rsp)
+	movb	$1, 8641(%rsp)
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$87
+Ljade_kem_kyber_kyber512_amd64_ref_dec$86:
+	movb	$1, 8640(%rsp)
+	movb	$0, 8641(%rsp)
+Ljade_kem_kyber_kyber512_amd64_ref_dec$87:
+	leaq	216(%rsp), %rax
+	leaq	8608(%rsp), %rcx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$85:
+	movq	$0, %rax
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$83
+Ljade_kem_kyber_kyber512_amd64_ref_dec$84:
+	movq	%rax, 416(%rsp,%rax,8)
+	incq	%rax
+Ljade_kem_kyber_kyber512_amd64_ref_dec$83:
+	cmpq	$64, %rax
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$84
+	movq	$0, %rax
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$75
+Ljade_kem_kyber_kyber512_amd64_ref_dec$76:
+	movq	%rax, 48(%rsp)
+	leaq	216(%rsp), %rax
+	leaq	8642(%rsp), %rcx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$82:
+	leaq	8(%rsp), %rsp
+	movq	48(%rsp), %rax
+	movq	$0, %rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$77:
+	movzbw	8642(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	8642(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	8642(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$80
+	cmpq	$256, %rax
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$80
+	movw	%dx, 416(%rsp,%rax,2)
+	incq	%rax
+Ljade_kem_kyber_kyber512_amd64_ref_dec$81:
+Ljade_kem_kyber_kyber512_amd64_ref_dec$80:
+	cmpw	$3329, %di
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$78
+	cmpq	$256, %rax
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$78
+	movw	%di, 416(%rsp,%rax,2)
+	incq	%rax
+Ljade_kem_kyber_kyber512_amd64_ref_dec$79:
+Ljade_kem_kyber_kyber512_amd64_ref_dec$78:
+	cmpq	$166, %rcx
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$77
+Ljade_kem_kyber_kyber512_amd64_ref_dec$75:
+	cmpq	$256, %rax
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$76
+	movq	$0, %rax
+	movq	$256, %rcx
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$73
+Ljade_kem_kyber_kyber512_amd64_ref_dec$74:
+	movw	416(%rsp,%rax,2), %dx
+	movw	%dx, 6560(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$73:
+	cmpq	$256, %rax
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$74
+	movq	40(%rsp), %rax
+	cmpq	$0, %rax
+	je  	Ljade_kem_kyber_kyber512_amd64_ref_dec$71
+	movb	$1, 8640(%rsp)
+	movb	$0, 8641(%rsp)
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$72
+Ljade_kem_kyber_kyber512_amd64_ref_dec$71:
+	movb	$0, 8640(%rsp)
+	movb	$1, 8641(%rsp)
+Ljade_kem_kyber_kyber512_amd64_ref_dec$72:
+	leaq	216(%rsp), %rax
+	leaq	8608(%rsp), %rcx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$70:
+	movq	$0, %rax
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$68
+Ljade_kem_kyber_kyber512_amd64_ref_dec$69:
+	movq	%rax, 416(%rsp,%rax,8)
+	incq	%rax
+Ljade_kem_kyber_kyber512_amd64_ref_dec$68:
+	cmpq	$64, %rax
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$69
+	movq	$0, %rax
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$60
+Ljade_kem_kyber_kyber512_amd64_ref_dec$61:
+	movq	%rax, 48(%rsp)
+	leaq	216(%rsp), %rax
+	leaq	8642(%rsp), %rcx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$67:
+	leaq	8(%rsp), %rsp
+	movq	48(%rsp), %rax
+	movq	$0, %rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$62:
+	movzbw	8642(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	8642(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	8642(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$65
+	cmpq	$256, %rax
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$65
+	movw	%dx, 416(%rsp,%rax,2)
+	incq	%rax
+Ljade_kem_kyber_kyber512_amd64_ref_dec$66:
+Ljade_kem_kyber_kyber512_amd64_ref_dec$65:
+	cmpw	$3329, %di
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$63
+	cmpq	$256, %rax
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$63
+	movw	%di, 416(%rsp,%rax,2)
+	incq	%rax
+Ljade_kem_kyber_kyber512_amd64_ref_dec$64:
+Ljade_kem_kyber_kyber512_amd64_ref_dec$63:
+	cmpq	$166, %rcx
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$62
+Ljade_kem_kyber_kyber512_amd64_ref_dec$60:
+	cmpq	$256, %rax
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$61
+	movq	$0, %rax
+	movq	$512, %rcx
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$58
+Ljade_kem_kyber_kyber512_amd64_ref_dec$59:
+	movw	416(%rsp,%rax,2), %dx
+	movw	%dx, 6560(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$58:
+	cmpq	$256, %rax
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$59
+	movq	40(%rsp), %rax
+	cmpq	$0, %rax
+	je  	Ljade_kem_kyber_kyber512_amd64_ref_dec$56
+	movb	$1, 8640(%rsp)
+	movb	$1, 8641(%rsp)
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$57
+Ljade_kem_kyber_kyber512_amd64_ref_dec$56:
+	movb	$1, 8640(%rsp)
+	movb	$1, 8641(%rsp)
+Ljade_kem_kyber_kyber512_amd64_ref_dec$57:
+	leaq	216(%rsp), %rax
+	leaq	8608(%rsp), %rcx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$55:
+	movq	$0, %rax
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$53
+Ljade_kem_kyber_kyber512_amd64_ref_dec$54:
+	movq	%rax, 416(%rsp,%rax,8)
+	incq	%rax
+Ljade_kem_kyber_kyber512_amd64_ref_dec$53:
+	cmpq	$64, %rax
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$54
+	movq	$0, %rax
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$45
+Ljade_kem_kyber_kyber512_amd64_ref_dec$46:
+	movq	%rax, 40(%rsp)
+	leaq	216(%rsp), %rax
+	leaq	8642(%rsp), %rcx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$52:
+	leaq	8(%rsp), %rsp
+	movq	40(%rsp), %rax
+	movq	$0, %rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$47:
+	movzbw	8642(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	8642(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	8642(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$50
+	cmpq	$256, %rax
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$50
+	movw	%dx, 416(%rsp,%rax,2)
+	incq	%rax
+Ljade_kem_kyber_kyber512_amd64_ref_dec$51:
+Ljade_kem_kyber_kyber512_amd64_ref_dec$50:
+	cmpw	$3329, %di
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$48
+	cmpq	$256, %rax
+	jnb 	Ljade_kem_kyber_kyber512_amd64_ref_dec$48
+	movw	%di, 416(%rsp,%rax,2)
+	incq	%rax
+Ljade_kem_kyber_kyber512_amd64_ref_dec$49:
+Ljade_kem_kyber_kyber512_amd64_ref_dec$48:
+	cmpq	$166, %rcx
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$47
+Ljade_kem_kyber_kyber512_amd64_ref_dec$45:
+	cmpq	$256, %rax
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$46
+	movq	$0, %rax
+	movq	$768, %rcx
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$43
+Ljade_kem_kyber_kyber512_amd64_ref_dec$44:
+	movw	416(%rsp,%rax,2), %dx
+	movw	%dx, 6560(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$43:
+	cmpq	$256, %rax
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$44
+	movq	32(%rsp), %rcx
+	movb	$0, %al
+	leaq	3488(%rsp), %rdx
+	leaq	-240(%rsp), %rsp
+	call	L_poly_getnoise_eta1$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$42:
+	leaq	240(%rsp), %rsp
+	movq	32(%rsp), %rcx
+	movb	$1, %al
+	leaq	4000(%rsp), %rdx
+	leaq	-240(%rsp), %rsp
+	call	L_poly_getnoise_eta1$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$41:
+	leaq	240(%rsp), %rsp
+	movq	32(%rsp), %rax
+	movb	$2, %cl
+	leaq	4512(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise_eta2$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$40:
+	leaq	176(%rsp), %rsp
+	movq	32(%rsp), %rax
+	movb	$3, %cl
+	leaq	5024(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise_eta2$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$39:
+	leaq	176(%rsp), %rsp
+	movq	32(%rsp), %rax
+	movb	$4, %cl
+	leaq	416(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise_eta2$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$38:
+	leaq	176(%rsp), %rsp
+	leaq	3488(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$37:
+	leaq	4000(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$36:
+	leaq	5536(%rsp), %rdi
+	leaq	6560(%rsp), %rcx
+	leaq	3488(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$35:
+	leaq	16(%rsp), %rsp
+	leaq	928(%rsp), %rdi
+	leaq	7072(%rsp), %rcx
+	leaq	4000(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$34:
+	leaq	16(%rsp), %rsp
+	leaq	5536(%rsp), %rcx
+	leaq	928(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$33:
+	leaq	5536(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$31
+Ljade_kem_kyber_kyber512_amd64_ref_dec$32:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$31:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$32
+	leaq	6048(%rsp), %rdi
+	leaq	7584(%rsp), %rcx
+	leaq	3488(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$30:
+	leaq	16(%rsp), %rsp
+	leaq	928(%rsp), %rdi
+	leaq	8096(%rsp), %rcx
+	leaq	4000(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$29:
+	leaq	16(%rsp), %rsp
+	leaq	6048(%rsp), %rcx
+	leaq	928(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$28:
+	leaq	6048(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$26
+Ljade_kem_kyber_kyber512_amd64_ref_dec$27:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$26:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$27
+	leaq	928(%rsp), %rdi
+	leaq	2464(%rsp), %rcx
+	leaq	3488(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$25:
+	leaq	16(%rsp), %rsp
+	leaq	1952(%rsp), %rdi
+	leaq	2976(%rsp), %rcx
+	leaq	4000(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$24:
+	leaq	16(%rsp), %rsp
+	leaq	928(%rsp), %rcx
+	leaq	1952(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$23:
+	leaq	928(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$21
+Ljade_kem_kyber_kyber512_amd64_ref_dec$22:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$21:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$22
+	leaq	5536(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$20:
+	leaq	6048(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$19:
+	leaq	928(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$18:
+	leaq	5536(%rsp), %rcx
+	leaq	4512(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$17:
+	leaq	6048(%rsp), %rcx
+	leaq	5024(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$16:
+	leaq	928(%rsp), %rcx
+	leaq	416(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$15:
+	leaq	928(%rsp), %rcx
+	leaq	1440(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$14:
+	leaq	5536(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$12
+Ljade_kem_kyber_kyber512_amd64_ref_dec$13:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$12:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$13
+	leaq	6048(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$10
+Ljade_kem_kyber_kyber512_amd64_ref_dec$11:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$10:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$11
+	leaq	928(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$8
+Ljade_kem_kyber_kyber512_amd64_ref_dec$9:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber512_amd64_ref_dec$8:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$9
+	movq	24(%rsp), %rax
+	movq	%rax, %rdx
+	movq	$0, %rsi
+	movq	$0, %rdi
+	leaq	5536(%rsp), %rcx
+	call	L_poly_csubq$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$7:
+	leaq	6048(%rsp), %rcx
+	call	L_poly_csubq$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$6:
+	jmp 	Ljade_kem_kyber_kyber512_amd64_ref_dec$4
+Ljade_kem_kyber_kyber512_amd64_ref_dec$5:
+	movzwq	5536(%rsp,%rsi,2), %rcx
+	incq	%rsi
+	shlq	$10, %rcx
+	addq	$1665, %rcx
+	imulq	$1290167, %rcx, %rcx
+	shrq	$32, %rcx
+	andq	$1023, %rcx
+	movzwq	5536(%rsp,%rsi,2), %r8
+	incq	%rsi
+	shlq	$10, %r8
+	addq	$1665, %r8
+	imulq	$1290167, %r8, %r8
+	shrq	$32, %r8
+	andq	$1023, %r8
+	movzwq	5536(%rsp,%rsi,2), %r9
+	incq	%rsi
+	shlq	$10, %r9
+	addq	$1665, %r9
+	imulq	$1290167, %r9, %r9
+	shrq	$32, %r9
+	andq	$1023, %r9
+	movzwq	5536(%rsp,%rsi,2), %r10
+	incq	%rsi
+	shlq	$10, %r10
+	addq	$1665, %r10
+	imulq	$1290167, %r10, %r10
+	shrq	$32, %r10
+	andq	$1023, %r10
+	movw	%cx, %r11w
+	andw	$255, %r11w
+	movb	%r11b, (%rdx,%rdi)
+	incq	%rdi
+	shrw	$8, %cx
+	movw	%r8w, %r11w
+	shlw	$2, %r11w
+	orw 	%cx, %r11w
+	movb	%r11b, (%rdx,%rdi)
+	incq	%rdi
+	shrw	$6, %r8w
+	movw	%r9w, %cx
+	shlw	$4, %cx
+	orw 	%r8w, %cx
+	movb	%cl, (%rdx,%rdi)
+	incq	%rdi
+	shrw	$4, %r9w
+	movw	%r10w, %cx
+	shlw	$6, %cx
+	orw 	%r9w, %cx
+	movb	%cl, (%rdx,%rdi)
+	incq	%rdi
+	shrq	$2, %r10
+	movb	%r10b, (%rdx,%rdi)
+	incq	%rdi
+Ljade_kem_kyber_kyber512_amd64_ref_dec$4:
+	cmpq	$512, %rsi
+	jb  	Ljade_kem_kyber_kyber512_amd64_ref_dec$5
+	leaq	640(%rax), %rax
+	leaq	928(%rsp), %rcx
+	call	L_i_poly_compress$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$3:
+	movq	8(%rsp), %rsi
+	leaq	8810(%rsp), %rax
+	movq	$0, %rcx
+	movb	(%rax), %dl
+	movb	(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1(%rax), %dl
+	movb	1(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	2(%rax), %dl
+	movb	2(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	3(%rax), %dl
+	movb	3(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	4(%rax), %dl
+	movb	4(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	5(%rax), %dl
+	movb	5(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	6(%rax), %dl
+	movb	6(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	7(%rax), %dl
+	movb	7(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	8(%rax), %dl
+	movb	8(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	9(%rax), %dl
+	movb	9(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	10(%rax), %dl
+	movb	10(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	11(%rax), %dl
+	movb	11(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	12(%rax), %dl
+	movb	12(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	13(%rax), %dl
+	movb	13(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	14(%rax), %dl
+	movb	14(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	15(%rax), %dl
+	movb	15(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	16(%rax), %dl
+	movb	16(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	17(%rax), %dl
+	movb	17(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	18(%rax), %dl
+	movb	18(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	19(%rax), %dl
+	movb	19(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	20(%rax), %dl
+	movb	20(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	21(%rax), %dl
+	movb	21(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	22(%rax), %dl
+	movb	22(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	23(%rax), %dl
+	movb	23(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	24(%rax), %dl
+	movb	24(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	25(%rax), %dl
+	movb	25(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	26(%rax), %dl
+	movb	26(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	27(%rax), %dl
+	movb	27(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	28(%rax), %dl
+	movb	28(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	29(%rax), %dl
+	movb	29(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	30(%rax), %dl
+	movb	30(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	31(%rax), %dl
+	movb	31(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	32(%rax), %dl
+	movb	32(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	33(%rax), %dl
+	movb	33(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	34(%rax), %dl
+	movb	34(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	35(%rax), %dl
+	movb	35(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	36(%rax), %dl
+	movb	36(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	37(%rax), %dl
+	movb	37(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	38(%rax), %dl
+	movb	38(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	39(%rax), %dl
+	movb	39(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	40(%rax), %dl
+	movb	40(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	41(%rax), %dl
+	movb	41(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	42(%rax), %dl
+	movb	42(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	43(%rax), %dl
+	movb	43(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	44(%rax), %dl
+	movb	44(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	45(%rax), %dl
+	movb	45(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	46(%rax), %dl
+	movb	46(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	47(%rax), %dl
+	movb	47(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	48(%rax), %dl
+	movb	48(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	49(%rax), %dl
+	movb	49(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	50(%rax), %dl
+	movb	50(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	51(%rax), %dl
+	movb	51(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	52(%rax), %dl
+	movb	52(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	53(%rax), %dl
+	movb	53(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	54(%rax), %dl
+	movb	54(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	55(%rax), %dl
+	movb	55(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	56(%rax), %dl
+	movb	56(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	57(%rax), %dl
+	movb	57(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	58(%rax), %dl
+	movb	58(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	59(%rax), %dl
+	movb	59(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	60(%rax), %dl
+	movb	60(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	61(%rax), %dl
+	movb	61(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	62(%rax), %dl
+	movb	62(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	63(%rax), %dl
+	movb	63(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	64(%rax), %dl
+	movb	64(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	65(%rax), %dl
+	movb	65(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	66(%rax), %dl
+	movb	66(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	67(%rax), %dl
+	movb	67(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	68(%rax), %dl
+	movb	68(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	69(%rax), %dl
+	movb	69(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	70(%rax), %dl
+	movb	70(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	71(%rax), %dl
+	movb	71(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	72(%rax), %dl
+	movb	72(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	73(%rax), %dl
+	movb	73(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	74(%rax), %dl
+	movb	74(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	75(%rax), %dl
+	movb	75(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	76(%rax), %dl
+	movb	76(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	77(%rax), %dl
+	movb	77(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	78(%rax), %dl
+	movb	78(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	79(%rax), %dl
+	movb	79(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	80(%rax), %dl
+	movb	80(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	81(%rax), %dl
+	movb	81(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	82(%rax), %dl
+	movb	82(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	83(%rax), %dl
+	movb	83(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	84(%rax), %dl
+	movb	84(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	85(%rax), %dl
+	movb	85(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	86(%rax), %dl
+	movb	86(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	87(%rax), %dl
+	movb	87(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	88(%rax), %dl
+	movb	88(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	89(%rax), %dl
+	movb	89(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	90(%rax), %dl
+	movb	90(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	91(%rax), %dl
+	movb	91(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	92(%rax), %dl
+	movb	92(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	93(%rax), %dl
+	movb	93(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	94(%rax), %dl
+	movb	94(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	95(%rax), %dl
+	movb	95(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	96(%rax), %dl
+	movb	96(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	97(%rax), %dl
+	movb	97(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	98(%rax), %dl
+	movb	98(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	99(%rax), %dl
+	movb	99(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	100(%rax), %dl
+	movb	100(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	101(%rax), %dl
+	movb	101(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	102(%rax), %dl
+	movb	102(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	103(%rax), %dl
+	movb	103(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	104(%rax), %dl
+	movb	104(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	105(%rax), %dl
+	movb	105(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	106(%rax), %dl
+	movb	106(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	107(%rax), %dl
+	movb	107(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	108(%rax), %dl
+	movb	108(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	109(%rax), %dl
+	movb	109(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	110(%rax), %dl
+	movb	110(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	111(%rax), %dl
+	movb	111(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	112(%rax), %dl
+	movb	112(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	113(%rax), %dl
+	movb	113(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	114(%rax), %dl
+	movb	114(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	115(%rax), %dl
+	movb	115(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	116(%rax), %dl
+	movb	116(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	117(%rax), %dl
+	movb	117(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	118(%rax), %dl
+	movb	118(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	119(%rax), %dl
+	movb	119(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	120(%rax), %dl
+	movb	120(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	121(%rax), %dl
+	movb	121(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	122(%rax), %dl
+	movb	122(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	123(%rax), %dl
+	movb	123(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	124(%rax), %dl
+	movb	124(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	125(%rax), %dl
+	movb	125(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	126(%rax), %dl
+	movb	126(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	127(%rax), %dl
+	movb	127(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	128(%rax), %dl
+	movb	128(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	129(%rax), %dl
+	movb	129(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	130(%rax), %dl
+	movb	130(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	131(%rax), %dl
+	movb	131(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	132(%rax), %dl
+	movb	132(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	133(%rax), %dl
+	movb	133(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	134(%rax), %dl
+	movb	134(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	135(%rax), %dl
+	movb	135(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	136(%rax), %dl
+	movb	136(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	137(%rax), %dl
+	movb	137(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	138(%rax), %dl
+	movb	138(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	139(%rax), %dl
+	movb	139(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	140(%rax), %dl
+	movb	140(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	141(%rax), %dl
+	movb	141(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	142(%rax), %dl
+	movb	142(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	143(%rax), %dl
+	movb	143(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	144(%rax), %dl
+	movb	144(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	145(%rax), %dl
+	movb	145(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	146(%rax), %dl
+	movb	146(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	147(%rax), %dl
+	movb	147(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	148(%rax), %dl
+	movb	148(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	149(%rax), %dl
+	movb	149(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	150(%rax), %dl
+	movb	150(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	151(%rax), %dl
+	movb	151(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	152(%rax), %dl
+	movb	152(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	153(%rax), %dl
+	movb	153(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	154(%rax), %dl
+	movb	154(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	155(%rax), %dl
+	movb	155(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	156(%rax), %dl
+	movb	156(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	157(%rax), %dl
+	movb	157(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	158(%rax), %dl
+	movb	158(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	159(%rax), %dl
+	movb	159(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	160(%rax), %dl
+	movb	160(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	161(%rax), %dl
+	movb	161(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	162(%rax), %dl
+	movb	162(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	163(%rax), %dl
+	movb	163(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	164(%rax), %dl
+	movb	164(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	165(%rax), %dl
+	movb	165(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	166(%rax), %dl
+	movb	166(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	167(%rax), %dl
+	movb	167(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	168(%rax), %dl
+	movb	168(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	169(%rax), %dl
+	movb	169(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	170(%rax), %dl
+	movb	170(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	171(%rax), %dl
+	movb	171(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	172(%rax), %dl
+	movb	172(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	173(%rax), %dl
+	movb	173(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	174(%rax), %dl
+	movb	174(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	175(%rax), %dl
+	movb	175(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	176(%rax), %dl
+	movb	176(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	177(%rax), %dl
+	movb	177(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	178(%rax), %dl
+	movb	178(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	179(%rax), %dl
+	movb	179(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	180(%rax), %dl
+	movb	180(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	181(%rax), %dl
+	movb	181(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	182(%rax), %dl
+	movb	182(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	183(%rax), %dl
+	movb	183(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	184(%rax), %dl
+	movb	184(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	185(%rax), %dl
+	movb	185(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	186(%rax), %dl
+	movb	186(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	187(%rax), %dl
+	movb	187(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	188(%rax), %dl
+	movb	188(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	189(%rax), %dl
+	movb	189(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	190(%rax), %dl
+	movb	190(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	191(%rax), %dl
+	movb	191(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	192(%rax), %dl
+	movb	192(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	193(%rax), %dl
+	movb	193(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	194(%rax), %dl
+	movb	194(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	195(%rax), %dl
+	movb	195(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	196(%rax), %dl
+	movb	196(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	197(%rax), %dl
+	movb	197(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	198(%rax), %dl
+	movb	198(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	199(%rax), %dl
+	movb	199(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	200(%rax), %dl
+	movb	200(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	201(%rax), %dl
+	movb	201(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	202(%rax), %dl
+	movb	202(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	203(%rax), %dl
+	movb	203(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	204(%rax), %dl
+	movb	204(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	205(%rax), %dl
+	movb	205(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	206(%rax), %dl
+	movb	206(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	207(%rax), %dl
+	movb	207(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	208(%rax), %dl
+	movb	208(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	209(%rax), %dl
+	movb	209(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	210(%rax), %dl
+	movb	210(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	211(%rax), %dl
+	movb	211(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	212(%rax), %dl
+	movb	212(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	213(%rax), %dl
+	movb	213(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	214(%rax), %dl
+	movb	214(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	215(%rax), %dl
+	movb	215(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	216(%rax), %dl
+	movb	216(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	217(%rax), %dl
+	movb	217(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	218(%rax), %dl
+	movb	218(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	219(%rax), %dl
+	movb	219(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	220(%rax), %dl
+	movb	220(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	221(%rax), %dl
+	movb	221(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	222(%rax), %dl
+	movb	222(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	223(%rax), %dl
+	movb	223(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	224(%rax), %dl
+	movb	224(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	225(%rax), %dl
+	movb	225(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	226(%rax), %dl
+	movb	226(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	227(%rax), %dl
+	movb	227(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	228(%rax), %dl
+	movb	228(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	229(%rax), %dl
+	movb	229(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	230(%rax), %dl
+	movb	230(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	231(%rax), %dl
+	movb	231(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	232(%rax), %dl
+	movb	232(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	233(%rax), %dl
+	movb	233(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	234(%rax), %dl
+	movb	234(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	235(%rax), %dl
+	movb	235(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	236(%rax), %dl
+	movb	236(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	237(%rax), %dl
+	movb	237(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	238(%rax), %dl
+	movb	238(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	239(%rax), %dl
+	movb	239(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	240(%rax), %dl
+	movb	240(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	241(%rax), %dl
+	movb	241(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	242(%rax), %dl
+	movb	242(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	243(%rax), %dl
+	movb	243(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	244(%rax), %dl
+	movb	244(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	245(%rax), %dl
+	movb	245(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	246(%rax), %dl
+	movb	246(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	247(%rax), %dl
+	movb	247(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	248(%rax), %dl
+	movb	248(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	249(%rax), %dl
+	movb	249(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	250(%rax), %dl
+	movb	250(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	251(%rax), %dl
+	movb	251(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	252(%rax), %dl
+	movb	252(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	253(%rax), %dl
+	movb	253(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	254(%rax), %dl
+	movb	254(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	255(%rax), %dl
+	movb	255(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	256(%rax), %dl
+	movb	256(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	257(%rax), %dl
+	movb	257(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	258(%rax), %dl
+	movb	258(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	259(%rax), %dl
+	movb	259(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	260(%rax), %dl
+	movb	260(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	261(%rax), %dl
+	movb	261(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	262(%rax), %dl
+	movb	262(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	263(%rax), %dl
+	movb	263(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	264(%rax), %dl
+	movb	264(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	265(%rax), %dl
+	movb	265(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	266(%rax), %dl
+	movb	266(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	267(%rax), %dl
+	movb	267(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	268(%rax), %dl
+	movb	268(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	269(%rax), %dl
+	movb	269(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	270(%rax), %dl
+	movb	270(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	271(%rax), %dl
+	movb	271(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	272(%rax), %dl
+	movb	272(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	273(%rax), %dl
+	movb	273(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	274(%rax), %dl
+	movb	274(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	275(%rax), %dl
+	movb	275(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	276(%rax), %dl
+	movb	276(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	277(%rax), %dl
+	movb	277(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	278(%rax), %dl
+	movb	278(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	279(%rax), %dl
+	movb	279(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	280(%rax), %dl
+	movb	280(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	281(%rax), %dl
+	movb	281(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	282(%rax), %dl
+	movb	282(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	283(%rax), %dl
+	movb	283(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	284(%rax), %dl
+	movb	284(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	285(%rax), %dl
+	movb	285(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	286(%rax), %dl
+	movb	286(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	287(%rax), %dl
+	movb	287(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	288(%rax), %dl
+	movb	288(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	289(%rax), %dl
+	movb	289(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	290(%rax), %dl
+	movb	290(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	291(%rax), %dl
+	movb	291(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	292(%rax), %dl
+	movb	292(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	293(%rax), %dl
+	movb	293(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	294(%rax), %dl
+	movb	294(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	295(%rax), %dl
+	movb	295(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	296(%rax), %dl
+	movb	296(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	297(%rax), %dl
+	movb	297(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	298(%rax), %dl
+	movb	298(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	299(%rax), %dl
+	movb	299(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	300(%rax), %dl
+	movb	300(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	301(%rax), %dl
+	movb	301(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	302(%rax), %dl
+	movb	302(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	303(%rax), %dl
+	movb	303(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	304(%rax), %dl
+	movb	304(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	305(%rax), %dl
+	movb	305(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	306(%rax), %dl
+	movb	306(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	307(%rax), %dl
+	movb	307(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	308(%rax), %dl
+	movb	308(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	309(%rax), %dl
+	movb	309(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	310(%rax), %dl
+	movb	310(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	311(%rax), %dl
+	movb	311(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	312(%rax), %dl
+	movb	312(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	313(%rax), %dl
+	movb	313(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	314(%rax), %dl
+	movb	314(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	315(%rax), %dl
+	movb	315(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	316(%rax), %dl
+	movb	316(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	317(%rax), %dl
+	movb	317(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	318(%rax), %dl
+	movb	318(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	319(%rax), %dl
+	movb	319(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	320(%rax), %dl
+	movb	320(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	321(%rax), %dl
+	movb	321(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	322(%rax), %dl
+	movb	322(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	323(%rax), %dl
+	movb	323(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	324(%rax), %dl
+	movb	324(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	325(%rax), %dl
+	movb	325(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	326(%rax), %dl
+	movb	326(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	327(%rax), %dl
+	movb	327(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	328(%rax), %dl
+	movb	328(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	329(%rax), %dl
+	movb	329(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	330(%rax), %dl
+	movb	330(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	331(%rax), %dl
+	movb	331(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	332(%rax), %dl
+	movb	332(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	333(%rax), %dl
+	movb	333(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	334(%rax), %dl
+	movb	334(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	335(%rax), %dl
+	movb	335(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	336(%rax), %dl
+	movb	336(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	337(%rax), %dl
+	movb	337(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	338(%rax), %dl
+	movb	338(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	339(%rax), %dl
+	movb	339(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	340(%rax), %dl
+	movb	340(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	341(%rax), %dl
+	movb	341(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	342(%rax), %dl
+	movb	342(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	343(%rax), %dl
+	movb	343(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	344(%rax), %dl
+	movb	344(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	345(%rax), %dl
+	movb	345(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	346(%rax), %dl
+	movb	346(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	347(%rax), %dl
+	movb	347(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	348(%rax), %dl
+	movb	348(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	349(%rax), %dl
+	movb	349(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	350(%rax), %dl
+	movb	350(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	351(%rax), %dl
+	movb	351(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	352(%rax), %dl
+	movb	352(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	353(%rax), %dl
+	movb	353(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	354(%rax), %dl
+	movb	354(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	355(%rax), %dl
+	movb	355(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	356(%rax), %dl
+	movb	356(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	357(%rax), %dl
+	movb	357(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	358(%rax), %dl
+	movb	358(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	359(%rax), %dl
+	movb	359(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	360(%rax), %dl
+	movb	360(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	361(%rax), %dl
+	movb	361(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	362(%rax), %dl
+	movb	362(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	363(%rax), %dl
+	movb	363(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	364(%rax), %dl
+	movb	364(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	365(%rax), %dl
+	movb	365(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	366(%rax), %dl
+	movb	366(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	367(%rax), %dl
+	movb	367(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	368(%rax), %dl
+	movb	368(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	369(%rax), %dl
+	movb	369(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	370(%rax), %dl
+	movb	370(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	371(%rax), %dl
+	movb	371(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	372(%rax), %dl
+	movb	372(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	373(%rax), %dl
+	movb	373(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	374(%rax), %dl
+	movb	374(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	375(%rax), %dl
+	movb	375(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	376(%rax), %dl
+	movb	376(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	377(%rax), %dl
+	movb	377(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	378(%rax), %dl
+	movb	378(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	379(%rax), %dl
+	movb	379(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	380(%rax), %dl
+	movb	380(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	381(%rax), %dl
+	movb	381(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	382(%rax), %dl
+	movb	382(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	383(%rax), %dl
+	movb	383(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	384(%rax), %dl
+	movb	384(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	385(%rax), %dl
+	movb	385(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	386(%rax), %dl
+	movb	386(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	387(%rax), %dl
+	movb	387(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	388(%rax), %dl
+	movb	388(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	389(%rax), %dl
+	movb	389(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	390(%rax), %dl
+	movb	390(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	391(%rax), %dl
+	movb	391(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	392(%rax), %dl
+	movb	392(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	393(%rax), %dl
+	movb	393(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	394(%rax), %dl
+	movb	394(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	395(%rax), %dl
+	movb	395(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	396(%rax), %dl
+	movb	396(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	397(%rax), %dl
+	movb	397(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	398(%rax), %dl
+	movb	398(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	399(%rax), %dl
+	movb	399(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	400(%rax), %dl
+	movb	400(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	401(%rax), %dl
+	movb	401(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	402(%rax), %dl
+	movb	402(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	403(%rax), %dl
+	movb	403(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	404(%rax), %dl
+	movb	404(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	405(%rax), %dl
+	movb	405(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	406(%rax), %dl
+	movb	406(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	407(%rax), %dl
+	movb	407(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	408(%rax), %dl
+	movb	408(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	409(%rax), %dl
+	movb	409(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	410(%rax), %dl
+	movb	410(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	411(%rax), %dl
+	movb	411(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	412(%rax), %dl
+	movb	412(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	413(%rax), %dl
+	movb	413(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	414(%rax), %dl
+	movb	414(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	415(%rax), %dl
+	movb	415(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	416(%rax), %dl
+	movb	416(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	417(%rax), %dl
+	movb	417(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	418(%rax), %dl
+	movb	418(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	419(%rax), %dl
+	movb	419(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	420(%rax), %dl
+	movb	420(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	421(%rax), %dl
+	movb	421(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	422(%rax), %dl
+	movb	422(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	423(%rax), %dl
+	movb	423(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	424(%rax), %dl
+	movb	424(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	425(%rax), %dl
+	movb	425(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	426(%rax), %dl
+	movb	426(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	427(%rax), %dl
+	movb	427(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	428(%rax), %dl
+	movb	428(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	429(%rax), %dl
+	movb	429(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	430(%rax), %dl
+	movb	430(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	431(%rax), %dl
+	movb	431(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	432(%rax), %dl
+	movb	432(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	433(%rax), %dl
+	movb	433(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	434(%rax), %dl
+	movb	434(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	435(%rax), %dl
+	movb	435(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	436(%rax), %dl
+	movb	436(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	437(%rax), %dl
+	movb	437(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	438(%rax), %dl
+	movb	438(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	439(%rax), %dl
+	movb	439(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	440(%rax), %dl
+	movb	440(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	441(%rax), %dl
+	movb	441(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	442(%rax), %dl
+	movb	442(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	443(%rax), %dl
+	movb	443(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	444(%rax), %dl
+	movb	444(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	445(%rax), %dl
+	movb	445(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	446(%rax), %dl
+	movb	446(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	447(%rax), %dl
+	movb	447(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	448(%rax), %dl
+	movb	448(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	449(%rax), %dl
+	movb	449(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	450(%rax), %dl
+	movb	450(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	451(%rax), %dl
+	movb	451(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	452(%rax), %dl
+	movb	452(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	453(%rax), %dl
+	movb	453(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	454(%rax), %dl
+	movb	454(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	455(%rax), %dl
+	movb	455(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	456(%rax), %dl
+	movb	456(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	457(%rax), %dl
+	movb	457(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	458(%rax), %dl
+	movb	458(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	459(%rax), %dl
+	movb	459(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	460(%rax), %dl
+	movb	460(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	461(%rax), %dl
+	movb	461(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	462(%rax), %dl
+	movb	462(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	463(%rax), %dl
+	movb	463(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	464(%rax), %dl
+	movb	464(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	465(%rax), %dl
+	movb	465(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	466(%rax), %dl
+	movb	466(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	467(%rax), %dl
+	movb	467(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	468(%rax), %dl
+	movb	468(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	469(%rax), %dl
+	movb	469(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	470(%rax), %dl
+	movb	470(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	471(%rax), %dl
+	movb	471(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	472(%rax), %dl
+	movb	472(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	473(%rax), %dl
+	movb	473(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	474(%rax), %dl
+	movb	474(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	475(%rax), %dl
+	movb	475(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	476(%rax), %dl
+	movb	476(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	477(%rax), %dl
+	movb	477(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	478(%rax), %dl
+	movb	478(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	479(%rax), %dl
+	movb	479(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	480(%rax), %dl
+	movb	480(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	481(%rax), %dl
+	movb	481(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	482(%rax), %dl
+	movb	482(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	483(%rax), %dl
+	movb	483(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	484(%rax), %dl
+	movb	484(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	485(%rax), %dl
+	movb	485(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	486(%rax), %dl
+	movb	486(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	487(%rax), %dl
+	movb	487(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	488(%rax), %dl
+	movb	488(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	489(%rax), %dl
+	movb	489(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	490(%rax), %dl
+	movb	490(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	491(%rax), %dl
+	movb	491(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	492(%rax), %dl
+	movb	492(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	493(%rax), %dl
+	movb	493(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	494(%rax), %dl
+	movb	494(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	495(%rax), %dl
+	movb	495(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	496(%rax), %dl
+	movb	496(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	497(%rax), %dl
+	movb	497(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	498(%rax), %dl
+	movb	498(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	499(%rax), %dl
+	movb	499(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	500(%rax), %dl
+	movb	500(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	501(%rax), %dl
+	movb	501(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	502(%rax), %dl
+	movb	502(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	503(%rax), %dl
+	movb	503(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	504(%rax), %dl
+	movb	504(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	505(%rax), %dl
+	movb	505(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	506(%rax), %dl
+	movb	506(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	507(%rax), %dl
+	movb	507(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	508(%rax), %dl
+	movb	508(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	509(%rax), %dl
+	movb	509(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	510(%rax), %dl
+	movb	510(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	511(%rax), %dl
+	movb	511(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	512(%rax), %dl
+	movb	512(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	513(%rax), %dl
+	movb	513(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	514(%rax), %dl
+	movb	514(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	515(%rax), %dl
+	movb	515(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	516(%rax), %dl
+	movb	516(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	517(%rax), %dl
+	movb	517(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	518(%rax), %dl
+	movb	518(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	519(%rax), %dl
+	movb	519(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	520(%rax), %dl
+	movb	520(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	521(%rax), %dl
+	movb	521(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	522(%rax), %dl
+	movb	522(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	523(%rax), %dl
+	movb	523(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	524(%rax), %dl
+	movb	524(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	525(%rax), %dl
+	movb	525(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	526(%rax), %dl
+	movb	526(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	527(%rax), %dl
+	movb	527(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	528(%rax), %dl
+	movb	528(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	529(%rax), %dl
+	movb	529(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	530(%rax), %dl
+	movb	530(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	531(%rax), %dl
+	movb	531(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	532(%rax), %dl
+	movb	532(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	533(%rax), %dl
+	movb	533(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	534(%rax), %dl
+	movb	534(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	535(%rax), %dl
+	movb	535(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	536(%rax), %dl
+	movb	536(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	537(%rax), %dl
+	movb	537(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	538(%rax), %dl
+	movb	538(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	539(%rax), %dl
+	movb	539(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	540(%rax), %dl
+	movb	540(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	541(%rax), %dl
+	movb	541(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	542(%rax), %dl
+	movb	542(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	543(%rax), %dl
+	movb	543(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	544(%rax), %dl
+	movb	544(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	545(%rax), %dl
+	movb	545(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	546(%rax), %dl
+	movb	546(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	547(%rax), %dl
+	movb	547(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	548(%rax), %dl
+	movb	548(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	549(%rax), %dl
+	movb	549(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	550(%rax), %dl
+	movb	550(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	551(%rax), %dl
+	movb	551(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	552(%rax), %dl
+	movb	552(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	553(%rax), %dl
+	movb	553(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	554(%rax), %dl
+	movb	554(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	555(%rax), %dl
+	movb	555(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	556(%rax), %dl
+	movb	556(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	557(%rax), %dl
+	movb	557(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	558(%rax), %dl
+	movb	558(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	559(%rax), %dl
+	movb	559(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	560(%rax), %dl
+	movb	560(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	561(%rax), %dl
+	movb	561(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	562(%rax), %dl
+	movb	562(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	563(%rax), %dl
+	movb	563(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	564(%rax), %dl
+	movb	564(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	565(%rax), %dl
+	movb	565(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	566(%rax), %dl
+	movb	566(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	567(%rax), %dl
+	movb	567(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	568(%rax), %dl
+	movb	568(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	569(%rax), %dl
+	movb	569(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	570(%rax), %dl
+	movb	570(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	571(%rax), %dl
+	movb	571(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	572(%rax), %dl
+	movb	572(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	573(%rax), %dl
+	movb	573(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	574(%rax), %dl
+	movb	574(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	575(%rax), %dl
+	movb	575(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	576(%rax), %dl
+	movb	576(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	577(%rax), %dl
+	movb	577(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	578(%rax), %dl
+	movb	578(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	579(%rax), %dl
+	movb	579(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	580(%rax), %dl
+	movb	580(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	581(%rax), %dl
+	movb	581(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	582(%rax), %dl
+	movb	582(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	583(%rax), %dl
+	movb	583(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	584(%rax), %dl
+	movb	584(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	585(%rax), %dl
+	movb	585(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	586(%rax), %dl
+	movb	586(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	587(%rax), %dl
+	movb	587(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	588(%rax), %dl
+	movb	588(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	589(%rax), %dl
+	movb	589(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	590(%rax), %dl
+	movb	590(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	591(%rax), %dl
+	movb	591(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	592(%rax), %dl
+	movb	592(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	593(%rax), %dl
+	movb	593(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	594(%rax), %dl
+	movb	594(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	595(%rax), %dl
+	movb	595(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	596(%rax), %dl
+	movb	596(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	597(%rax), %dl
+	movb	597(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	598(%rax), %dl
+	movb	598(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	599(%rax), %dl
+	movb	599(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	600(%rax), %dl
+	movb	600(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	601(%rax), %dl
+	movb	601(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	602(%rax), %dl
+	movb	602(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	603(%rax), %dl
+	movb	603(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	604(%rax), %dl
+	movb	604(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	605(%rax), %dl
+	movb	605(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	606(%rax), %dl
+	movb	606(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	607(%rax), %dl
+	movb	607(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	608(%rax), %dl
+	movb	608(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	609(%rax), %dl
+	movb	609(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	610(%rax), %dl
+	movb	610(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	611(%rax), %dl
+	movb	611(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	612(%rax), %dl
+	movb	612(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	613(%rax), %dl
+	movb	613(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	614(%rax), %dl
+	movb	614(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	615(%rax), %dl
+	movb	615(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	616(%rax), %dl
+	movb	616(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	617(%rax), %dl
+	movb	617(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	618(%rax), %dl
+	movb	618(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	619(%rax), %dl
+	movb	619(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	620(%rax), %dl
+	movb	620(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	621(%rax), %dl
+	movb	621(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	622(%rax), %dl
+	movb	622(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	623(%rax), %dl
+	movb	623(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	624(%rax), %dl
+	movb	624(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	625(%rax), %dl
+	movb	625(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	626(%rax), %dl
+	movb	626(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	627(%rax), %dl
+	movb	627(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	628(%rax), %dl
+	movb	628(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	629(%rax), %dl
+	movb	629(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	630(%rax), %dl
+	movb	630(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	631(%rax), %dl
+	movb	631(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	632(%rax), %dl
+	movb	632(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	633(%rax), %dl
+	movb	633(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	634(%rax), %dl
+	movb	634(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	635(%rax), %dl
+	movb	635(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	636(%rax), %dl
+	movb	636(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	637(%rax), %dl
+	movb	637(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	638(%rax), %dl
+	movb	638(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	639(%rax), %dl
+	movb	639(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	640(%rax), %dl
+	movb	640(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	641(%rax), %dl
+	movb	641(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	642(%rax), %dl
+	movb	642(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	643(%rax), %dl
+	movb	643(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	644(%rax), %dl
+	movb	644(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	645(%rax), %dl
+	movb	645(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	646(%rax), %dl
+	movb	646(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	647(%rax), %dl
+	movb	647(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	648(%rax), %dl
+	movb	648(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	649(%rax), %dl
+	movb	649(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	650(%rax), %dl
+	movb	650(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	651(%rax), %dl
+	movb	651(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	652(%rax), %dl
+	movb	652(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	653(%rax), %dl
+	movb	653(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	654(%rax), %dl
+	movb	654(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	655(%rax), %dl
+	movb	655(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	656(%rax), %dl
+	movb	656(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	657(%rax), %dl
+	movb	657(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	658(%rax), %dl
+	movb	658(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	659(%rax), %dl
+	movb	659(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	660(%rax), %dl
+	movb	660(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	661(%rax), %dl
+	movb	661(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	662(%rax), %dl
+	movb	662(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	663(%rax), %dl
+	movb	663(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	664(%rax), %dl
+	movb	664(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	665(%rax), %dl
+	movb	665(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	666(%rax), %dl
+	movb	666(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	667(%rax), %dl
+	movb	667(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	668(%rax), %dl
+	movb	668(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	669(%rax), %dl
+	movb	669(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	670(%rax), %dl
+	movb	670(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	671(%rax), %dl
+	movb	671(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	672(%rax), %dl
+	movb	672(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	673(%rax), %dl
+	movb	673(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	674(%rax), %dl
+	movb	674(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	675(%rax), %dl
+	movb	675(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	676(%rax), %dl
+	movb	676(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	677(%rax), %dl
+	movb	677(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	678(%rax), %dl
+	movb	678(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	679(%rax), %dl
+	movb	679(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	680(%rax), %dl
+	movb	680(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	681(%rax), %dl
+	movb	681(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	682(%rax), %dl
+	movb	682(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	683(%rax), %dl
+	movb	683(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	684(%rax), %dl
+	movb	684(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	685(%rax), %dl
+	movb	685(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	686(%rax), %dl
+	movb	686(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	687(%rax), %dl
+	movb	687(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	688(%rax), %dl
+	movb	688(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	689(%rax), %dl
+	movb	689(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	690(%rax), %dl
+	movb	690(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	691(%rax), %dl
+	movb	691(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	692(%rax), %dl
+	movb	692(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	693(%rax), %dl
+	movb	693(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	694(%rax), %dl
+	movb	694(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	695(%rax), %dl
+	movb	695(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	696(%rax), %dl
+	movb	696(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	697(%rax), %dl
+	movb	697(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	698(%rax), %dl
+	movb	698(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	699(%rax), %dl
+	movb	699(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	700(%rax), %dl
+	movb	700(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	701(%rax), %dl
+	movb	701(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	702(%rax), %dl
+	movb	702(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	703(%rax), %dl
+	movb	703(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	704(%rax), %dl
+	movb	704(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	705(%rax), %dl
+	movb	705(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	706(%rax), %dl
+	movb	706(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	707(%rax), %dl
+	movb	707(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	708(%rax), %dl
+	movb	708(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	709(%rax), %dl
+	movb	709(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	710(%rax), %dl
+	movb	710(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	711(%rax), %dl
+	movb	711(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	712(%rax), %dl
+	movb	712(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	713(%rax), %dl
+	movb	713(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	714(%rax), %dl
+	movb	714(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	715(%rax), %dl
+	movb	715(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	716(%rax), %dl
+	movb	716(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	717(%rax), %dl
+	movb	717(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	718(%rax), %dl
+	movb	718(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	719(%rax), %dl
+	movb	719(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	720(%rax), %dl
+	movb	720(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	721(%rax), %dl
+	movb	721(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	722(%rax), %dl
+	movb	722(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	723(%rax), %dl
+	movb	723(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	724(%rax), %dl
+	movb	724(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	725(%rax), %dl
+	movb	725(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	726(%rax), %dl
+	movb	726(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	727(%rax), %dl
+	movb	727(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	728(%rax), %dl
+	movb	728(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	729(%rax), %dl
+	movb	729(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	730(%rax), %dl
+	movb	730(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	731(%rax), %dl
+	movb	731(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	732(%rax), %dl
+	movb	732(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	733(%rax), %dl
+	movb	733(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	734(%rax), %dl
+	movb	734(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	735(%rax), %dl
+	movb	735(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	736(%rax), %dl
+	movb	736(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	737(%rax), %dl
+	movb	737(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	738(%rax), %dl
+	movb	738(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	739(%rax), %dl
+	movb	739(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	740(%rax), %dl
+	movb	740(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	741(%rax), %dl
+	movb	741(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	742(%rax), %dl
+	movb	742(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	743(%rax), %dl
+	movb	743(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	744(%rax), %dl
+	movb	744(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	745(%rax), %dl
+	movb	745(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	746(%rax), %dl
+	movb	746(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	747(%rax), %dl
+	movb	747(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	748(%rax), %dl
+	movb	748(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	749(%rax), %dl
+	movb	749(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	750(%rax), %dl
+	movb	750(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	751(%rax), %dl
+	movb	751(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	752(%rax), %dl
+	movb	752(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	753(%rax), %dl
+	movb	753(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	754(%rax), %dl
+	movb	754(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	755(%rax), %dl
+	movb	755(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	756(%rax), %dl
+	movb	756(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	757(%rax), %dl
+	movb	757(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	758(%rax), %dl
+	movb	758(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	759(%rax), %dl
+	movb	759(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	760(%rax), %dl
+	movb	760(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	761(%rax), %dl
+	movb	761(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	762(%rax), %dl
+	movb	762(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	763(%rax), %dl
+	movb	763(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	764(%rax), %dl
+	movb	764(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	765(%rax), %dl
+	movb	765(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	766(%rax), %dl
+	movb	766(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	767(%rax), %al
+	movb	767(%rsi), %dl
+	xorb	%dl, %al
+	movzbq	%al, %rax
+	orq 	%rax, %rcx
+	negq	%rcx
+	shrq	$63, %rcx
+	movq	16(%rsp), %rax
+	addq	$64, %rax
+	addq	$1536, %rax
+	leaq	152(%rsp), %rdx
+	negq	%rcx
+	movb	(%rdx), %dil
+	movb	(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, (%rdx)
+	movb	1(%rdx), %dil
+	movb	1(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 1(%rdx)
+	movb	2(%rdx), %dil
+	movb	2(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 2(%rdx)
+	movb	3(%rdx), %dil
+	movb	3(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 3(%rdx)
+	movb	4(%rdx), %dil
+	movb	4(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 4(%rdx)
+	movb	5(%rdx), %dil
+	movb	5(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 5(%rdx)
+	movb	6(%rdx), %dil
+	movb	6(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 6(%rdx)
+	movb	7(%rdx), %dil
+	movb	7(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 7(%rdx)
+	movb	8(%rdx), %dil
+	movb	8(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 8(%rdx)
+	movb	9(%rdx), %dil
+	movb	9(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 9(%rdx)
+	movb	10(%rdx), %dil
+	movb	10(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 10(%rdx)
+	movb	11(%rdx), %dil
+	movb	11(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 11(%rdx)
+	movb	12(%rdx), %dil
+	movb	12(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 12(%rdx)
+	movb	13(%rdx), %dil
+	movb	13(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 13(%rdx)
+	movb	14(%rdx), %dil
+	movb	14(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 14(%rdx)
+	movb	15(%rdx), %dil
+	movb	15(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 15(%rdx)
+	movb	16(%rdx), %dil
+	movb	16(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 16(%rdx)
+	movb	17(%rdx), %dil
+	movb	17(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 17(%rdx)
+	movb	18(%rdx), %dil
+	movb	18(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 18(%rdx)
+	movb	19(%rdx), %dil
+	movb	19(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 19(%rdx)
+	movb	20(%rdx), %dil
+	movb	20(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 20(%rdx)
+	movb	21(%rdx), %dil
+	movb	21(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 21(%rdx)
+	movb	22(%rdx), %dil
+	movb	22(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 22(%rdx)
+	movb	23(%rdx), %dil
+	movb	23(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 23(%rdx)
+	movb	24(%rdx), %dil
+	movb	24(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 24(%rdx)
+	movb	25(%rdx), %dil
+	movb	25(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 25(%rdx)
+	movb	26(%rdx), %dil
+	movb	26(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 26(%rdx)
+	movb	27(%rdx), %dil
+	movb	27(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 27(%rdx)
+	movb	28(%rdx), %dil
+	movb	28(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 28(%rdx)
+	movb	29(%rdx), %dil
+	movb	29(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 29(%rdx)
+	movb	30(%rdx), %dil
+	movb	30(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 30(%rdx)
+	movb	31(%rdx), %dil
+	movb	31(%rax), %al
+	xorb	%dil, %al
+	andb	%cl, %al
+	xorb	%al, %dil
+	movb	%dil, 31(%rdx)
+	movq	$768, %rcx
+	leaq	184(%rsp), %rax
+	leaq	-232(%rsp), %rsp
+	call	L_sha3_256$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$2:
+	leaq	232(%rsp), %rsp
+	movq	(%rsp), %rax
+	movq	$32, %rcx
+	leaq	152(%rsp), %rdx
+	leaq	-216(%rsp), %rsp
+	call	L_shake256_64$1
+Ljade_kem_kyber_kyber512_amd64_ref_dec$1:
+	leaq	216(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	9584(%rsp), %r14
+	movq	9592(%rsp), %r13
+	movq	9600(%rsp), %r12
+	movq	9608(%rsp), %rbp
+	movq	9616(%rsp), %rbx
+	movq	9624(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber512_amd64_ref_enc:
+jade_kem_kyber_kyber512_amd64_ref_enc:
+	movq	%rsp, %rax
+	leaq	-80(%rsp), %rsp
+	andq	$-16, %rsp
+	movq	%rax, 72(%rsp)
+	movq	%r14, 32(%rsp)
+	movq	%r13, 40(%rsp)
+	movq	%r12, 48(%rsp)
+	movq	%rbp, 56(%rsp)
+	movq	%rbx, 64(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %rbp
+	movq	%rdx, %r12
+	movq	%rsp, %rdi
+	movq	$32, %rsi
+	call	__jasmin_syscall_randombytes__
+	movq	%rsp, %rcx
+	leaq	-8800(%rsp), %rsp
+	call	L__crypto_kem_enc_derand_jazz$1
+Ljade_kem_kyber_kyber512_amd64_ref_enc$1:
+	leaq	8800(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	32(%rsp), %r14
+	movq	40(%rsp), %r13
+	movq	48(%rsp), %r12
+	movq	56(%rsp), %rbp
+	movq	64(%rsp), %rbx
+	movq	72(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber512_amd64_ref_enc_derand:
+jade_kem_kyber_kyber512_amd64_ref_enc_derand:
+	movq	%rsp, %rax
+	leaq	-80(%rsp), %rsp
+	andq	$-8, %rsp
+	movq	%rax, 72(%rsp)
+	movq	%r14, 32(%rsp)
+	movq	%r13, 40(%rsp)
+	movq	%r12, 48(%rsp)
+	movq	%rbp, 56(%rsp)
+	movq	%rbx, 64(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %rbp
+	movq	%rdx, %r12
+	movq	%rsp, %rax
+	movb	(%rcx), %dl
+	movb	%dl, (%rax)
+	movb	1(%rcx), %dl
+	movb	%dl, 1(%rax)
+	movb	2(%rcx), %dl
+	movb	%dl, 2(%rax)
+	movb	3(%rcx), %dl
+	movb	%dl, 3(%rax)
+	movb	4(%rcx), %dl
+	movb	%dl, 4(%rax)
+	movb	5(%rcx), %dl
+	movb	%dl, 5(%rax)
+	movb	6(%rcx), %dl
+	movb	%dl, 6(%rax)
+	movb	7(%rcx), %dl
+	movb	%dl, 7(%rax)
+	movb	8(%rcx), %dl
+	movb	%dl, 8(%rax)
+	movb	9(%rcx), %dl
+	movb	%dl, 9(%rax)
+	movb	10(%rcx), %dl
+	movb	%dl, 10(%rax)
+	movb	11(%rcx), %dl
+	movb	%dl, 11(%rax)
+	movb	12(%rcx), %dl
+	movb	%dl, 12(%rax)
+	movb	13(%rcx), %dl
+	movb	%dl, 13(%rax)
+	movb	14(%rcx), %dl
+	movb	%dl, 14(%rax)
+	movb	15(%rcx), %dl
+	movb	%dl, 15(%rax)
+	movb	16(%rcx), %dl
+	movb	%dl, 16(%rax)
+	movb	17(%rcx), %dl
+	movb	%dl, 17(%rax)
+	movb	18(%rcx), %dl
+	movb	%dl, 18(%rax)
+	movb	19(%rcx), %dl
+	movb	%dl, 19(%rax)
+	movb	20(%rcx), %dl
+	movb	%dl, 20(%rax)
+	movb	21(%rcx), %dl
+	movb	%dl, 21(%rax)
+	movb	22(%rcx), %dl
+	movb	%dl, 22(%rax)
+	movb	23(%rcx), %dl
+	movb	%dl, 23(%rax)
+	movb	24(%rcx), %dl
+	movb	%dl, 24(%rax)
+	movb	25(%rcx), %dl
+	movb	%dl, 25(%rax)
+	movb	26(%rcx), %dl
+	movb	%dl, 26(%rax)
+	movb	27(%rcx), %dl
+	movb	%dl, 27(%rax)
+	movb	28(%rcx), %dl
+	movb	%dl, 28(%rax)
+	movb	29(%rcx), %dl
+	movb	%dl, 29(%rax)
+	movb	30(%rcx), %dl
+	movb	%dl, 30(%rax)
+	movb	31(%rcx), %cl
+	movb	%cl, 31(%rax)
+	movq	%rsp, %rcx
+	leaq	-8800(%rsp), %rsp
+	call	L__crypto_kem_enc_derand_jazz$1
+Ljade_kem_kyber_kyber512_amd64_ref_enc_derand$1:
+	leaq	8800(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	32(%rsp), %r14
+	movq	40(%rsp), %r13
+	movq	48(%rsp), %r12
+	movq	56(%rsp), %rbp
+	movq	64(%rsp), %rbx
+	movq	72(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber512_amd64_ref_keypair:
+jade_kem_kyber_kyber512_amd64_ref_keypair:
+	movq	%rsp, %rax
+	leaq	-112(%rsp), %rsp
+	andq	$-16, %rsp
+	movq	%rax, 104(%rsp)
+	movq	%r14, 64(%rsp)
+	movq	%r13, 72(%rsp)
+	movq	%r12, 80(%rsp)
+	movq	%rbp, 88(%rsp)
+	movq	%rbx, 96(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %rbp
+	movq	%rsp, %rdi
+	movq	$64, %rsi
+	call	__jasmin_syscall_randombytes__
+	movq	%rsp, %rax
+	leaq	-6224(%rsp), %rsp
+	call	L__crypto_kem_keypair_derand_jazz$1
+Ljade_kem_kyber_kyber512_amd64_ref_keypair$1:
+	leaq	6224(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	64(%rsp), %r14
+	movq	72(%rsp), %r13
+	movq	80(%rsp), %r12
+	movq	88(%rsp), %rbp
+	movq	96(%rsp), %rbx
+	movq	104(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber512_amd64_ref_keypair_derand:
+jade_kem_kyber_kyber512_amd64_ref_keypair_derand:
+	movq	%rsp, %rax
+	leaq	-112(%rsp), %rsp
+	andq	$-8, %rsp
+	movq	%rax, 104(%rsp)
+	movq	%r14, 64(%rsp)
+	movq	%r13, 72(%rsp)
+	movq	%r12, 80(%rsp)
+	movq	%rbp, 88(%rsp)
+	movq	%rbx, 96(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %rbp
+	movq	%rsp, %rax
+	movb	(%rdx), %cl
+	movb	%cl, (%rax)
+	movb	1(%rdx), %cl
+	movb	%cl, 1(%rax)
+	movb	2(%rdx), %cl
+	movb	%cl, 2(%rax)
+	movb	3(%rdx), %cl
+	movb	%cl, 3(%rax)
+	movb	4(%rdx), %cl
+	movb	%cl, 4(%rax)
+	movb	5(%rdx), %cl
+	movb	%cl, 5(%rax)
+	movb	6(%rdx), %cl
+	movb	%cl, 6(%rax)
+	movb	7(%rdx), %cl
+	movb	%cl, 7(%rax)
+	movb	8(%rdx), %cl
+	movb	%cl, 8(%rax)
+	movb	9(%rdx), %cl
+	movb	%cl, 9(%rax)
+	movb	10(%rdx), %cl
+	movb	%cl, 10(%rax)
+	movb	11(%rdx), %cl
+	movb	%cl, 11(%rax)
+	movb	12(%rdx), %cl
+	movb	%cl, 12(%rax)
+	movb	13(%rdx), %cl
+	movb	%cl, 13(%rax)
+	movb	14(%rdx), %cl
+	movb	%cl, 14(%rax)
+	movb	15(%rdx), %cl
+	movb	%cl, 15(%rax)
+	movb	16(%rdx), %cl
+	movb	%cl, 16(%rax)
+	movb	17(%rdx), %cl
+	movb	%cl, 17(%rax)
+	movb	18(%rdx), %cl
+	movb	%cl, 18(%rax)
+	movb	19(%rdx), %cl
+	movb	%cl, 19(%rax)
+	movb	20(%rdx), %cl
+	movb	%cl, 20(%rax)
+	movb	21(%rdx), %cl
+	movb	%cl, 21(%rax)
+	movb	22(%rdx), %cl
+	movb	%cl, 22(%rax)
+	movb	23(%rdx), %cl
+	movb	%cl, 23(%rax)
+	movb	24(%rdx), %cl
+	movb	%cl, 24(%rax)
+	movb	25(%rdx), %cl
+	movb	%cl, 25(%rax)
+	movb	26(%rdx), %cl
+	movb	%cl, 26(%rax)
+	movb	27(%rdx), %cl
+	movb	%cl, 27(%rax)
+	movb	28(%rdx), %cl
+	movb	%cl, 28(%rax)
+	movb	29(%rdx), %cl
+	movb	%cl, 29(%rax)
+	movb	30(%rdx), %cl
+	movb	%cl, 30(%rax)
+	movb	31(%rdx), %cl
+	movb	%cl, 31(%rax)
+	movb	32(%rdx), %cl
+	movb	%cl, 32(%rax)
+	movb	33(%rdx), %cl
+	movb	%cl, 33(%rax)
+	movb	34(%rdx), %cl
+	movb	%cl, 34(%rax)
+	movb	35(%rdx), %cl
+	movb	%cl, 35(%rax)
+	movb	36(%rdx), %cl
+	movb	%cl, 36(%rax)
+	movb	37(%rdx), %cl
+	movb	%cl, 37(%rax)
+	movb	38(%rdx), %cl
+	movb	%cl, 38(%rax)
+	movb	39(%rdx), %cl
+	movb	%cl, 39(%rax)
+	movb	40(%rdx), %cl
+	movb	%cl, 40(%rax)
+	movb	41(%rdx), %cl
+	movb	%cl, 41(%rax)
+	movb	42(%rdx), %cl
+	movb	%cl, 42(%rax)
+	movb	43(%rdx), %cl
+	movb	%cl, 43(%rax)
+	movb	44(%rdx), %cl
+	movb	%cl, 44(%rax)
+	movb	45(%rdx), %cl
+	movb	%cl, 45(%rax)
+	movb	46(%rdx), %cl
+	movb	%cl, 46(%rax)
+	movb	47(%rdx), %cl
+	movb	%cl, 47(%rax)
+	movb	48(%rdx), %cl
+	movb	%cl, 48(%rax)
+	movb	49(%rdx), %cl
+	movb	%cl, 49(%rax)
+	movb	50(%rdx), %cl
+	movb	%cl, 50(%rax)
+	movb	51(%rdx), %cl
+	movb	%cl, 51(%rax)
+	movb	52(%rdx), %cl
+	movb	%cl, 52(%rax)
+	movb	53(%rdx), %cl
+	movb	%cl, 53(%rax)
+	movb	54(%rdx), %cl
+	movb	%cl, 54(%rax)
+	movb	55(%rdx), %cl
+	movb	%cl, 55(%rax)
+	movb	56(%rdx), %cl
+	movb	%cl, 56(%rax)
+	movb	57(%rdx), %cl
+	movb	%cl, 57(%rax)
+	movb	58(%rdx), %cl
+	movb	%cl, 58(%rax)
+	movb	59(%rdx), %cl
+	movb	%cl, 59(%rax)
+	movb	60(%rdx), %cl
+	movb	%cl, 60(%rax)
+	movb	61(%rdx), %cl
+	movb	%cl, 61(%rax)
+	movb	62(%rdx), %cl
+	movb	%cl, 62(%rax)
+	movb	63(%rdx), %cl
+	movb	%cl, 63(%rax)
+	movq	%rsp, %rax
+	leaq	-6224(%rsp), %rsp
+	call	L__crypto_kem_keypair_derand_jazz$1
+Ljade_kem_kyber_kyber512_amd64_ref_keypair_derand$1:
+	leaq	6224(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	64(%rsp), %r14
+	movq	72(%rsp), %r13
+	movq	80(%rsp), %r12
+	movq	88(%rsp), %rbp
+	movq	96(%rsp), %rbx
+	movq	104(%rsp), %rsp
+	ret
+L__crypto_kem_enc_derand_jazz$1:
+	movq	%r12, 8(%rsp)
+	movq	%rbx, 16(%rsp)
+	movq	%rbp, 24(%rsp)
+	leaq	80(%rsp), %rax
+	leaq	-208(%rsp), %rsp
+	call	L_sha3_256_32$1
+L__crypto_kem_enc_derand_jazz$111:
+	leaq	208(%rsp), %rsp
+	movq	8(%rsp), %rsi
+	movq	$800, %rcx
+	leaq	112(%rsp), %rax
+	leaq	-232(%rsp), %rsp
+	call	L_sha3_256$1
+L__crypto_kem_enc_derand_jazz$110:
+	leaq	232(%rsp), %rsp
+	leaq	144(%rsp), %rax
+	leaq	80(%rsp), %rcx
+	leaq	-208(%rsp), %rsp
+	call	L_sha3_512_64$1
+L__crypto_kem_enc_derand_jazz$109:
+	leaq	208(%rsp), %rsp
+	movq	8(%rsp), %rdx
+	leaq	80(%rsp), %rcx
+	leaq	176(%rsp), %rax
+	movq	%rdx, %rsi
+	leaq	2456(%rsp), %rdi
+	call	L_poly_frombytes$1
+L__crypto_kem_enc_derand_jazz$108:
+	addq	$384, %rsi
+	leaq	2968(%rsp), %rdi
+	call	L_poly_frombytes$1
+L__crypto_kem_enc_derand_jazz$107:
+	movq	$0, %rsi
+	addq	$768, %rdx
+	jmp 	L__crypto_kem_enc_derand_jazz$105
+L__crypto_kem_enc_derand_jazz$106:
+	movq	(%rdx), %rdi
+	movq	%rdi, 48(%rsp,%rsi,8)
+	addq	$8, %rdx
+	incq	%rsi
+L__crypto_kem_enc_derand_jazz$105:
+	cmpq	$4, %rsi
+	jb  	L__crypto_kem_enc_derand_jazz$106
+	leaq	920(%rsp), %rdx
+	call	L_i_poly_frommsg$1
+L__crypto_kem_enc_derand_jazz$104:
+	movq	%rax, 8(%rsp)
+	movq	$1, %rax
+	movq	%rax, 32(%rsp)
+	movb	48(%rsp), %al
+	movb	%al, 8600(%rsp)
+	movb	49(%rsp), %al
+	movb	%al, 8601(%rsp)
+	movb	50(%rsp), %al
+	movb	%al, 8602(%rsp)
+	movb	51(%rsp), %al
+	movb	%al, 8603(%rsp)
+	movb	52(%rsp), %al
+	movb	%al, 8604(%rsp)
+	movb	53(%rsp), %al
+	movb	%al, 8605(%rsp)
+	movb	54(%rsp), %al
+	movb	%al, 8606(%rsp)
+	movb	55(%rsp), %al
+	movb	%al, 8607(%rsp)
+	movb	56(%rsp), %al
+	movb	%al, 8608(%rsp)
+	movb	57(%rsp), %al
+	movb	%al, 8609(%rsp)
+	movb	58(%rsp), %al
+	movb	%al, 8610(%rsp)
+	movb	59(%rsp), %al
+	movb	%al, 8611(%rsp)
+	movb	60(%rsp), %al
+	movb	%al, 8612(%rsp)
+	movb	61(%rsp), %al
+	movb	%al, 8613(%rsp)
+	movb	62(%rsp), %al
+	movb	%al, 8614(%rsp)
+	movb	63(%rsp), %al
+	movb	%al, 8615(%rsp)
+	movb	64(%rsp), %al
+	movb	%al, 8616(%rsp)
+	movb	65(%rsp), %al
+	movb	%al, 8617(%rsp)
+	movb	66(%rsp), %al
+	movb	%al, 8618(%rsp)
+	movb	67(%rsp), %al
+	movb	%al, 8619(%rsp)
+	movb	68(%rsp), %al
+	movb	%al, 8620(%rsp)
+	movb	69(%rsp), %al
+	movb	%al, 8621(%rsp)
+	movb	70(%rsp), %al
+	movb	%al, 8622(%rsp)
+	movb	71(%rsp), %al
+	movb	%al, 8623(%rsp)
+	movb	72(%rsp), %al
+	movb	%al, 8624(%rsp)
+	movb	73(%rsp), %al
+	movb	%al, 8625(%rsp)
+	movb	74(%rsp), %al
+	movb	%al, 8626(%rsp)
+	movb	75(%rsp), %al
+	movb	%al, 8627(%rsp)
+	movb	76(%rsp), %al
+	movb	%al, 8628(%rsp)
+	movb	77(%rsp), %al
+	movb	%al, 8629(%rsp)
+	movb	78(%rsp), %al
+	movb	%al, 8630(%rsp)
+	movb	79(%rsp), %al
+	movb	%al, 8631(%rsp)
+	movq	32(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L__crypto_kem_enc_derand_jazz$102
+	movb	$0, 8632(%rsp)
+	movb	$0, 8633(%rsp)
+	jmp 	L__crypto_kem_enc_derand_jazz$103
+L__crypto_kem_enc_derand_jazz$102:
+	movb	$0, 8632(%rsp)
+	movb	$0, 8633(%rsp)
+L__crypto_kem_enc_derand_jazz$103:
+	leaq	208(%rsp), %rax
+	leaq	8600(%rsp), %rcx
+	call	L_shake128_absorb34$1
+L__crypto_kem_enc_derand_jazz$101:
+	movq	$0, %rax
+	jmp 	L__crypto_kem_enc_derand_jazz$99
+L__crypto_kem_enc_derand_jazz$100:
+	movq	%rax, 408(%rsp,%rax,8)
+	incq	%rax
+L__crypto_kem_enc_derand_jazz$99:
+	cmpq	$64, %rax
+	jb  	L__crypto_kem_enc_derand_jazz$100
+	movq	$0, %rax
+	jmp 	L__crypto_kem_enc_derand_jazz$91
+L__crypto_kem_enc_derand_jazz$92:
+	movq	%rax, 40(%rsp)
+	leaq	208(%rsp), %rax
+	leaq	8634(%rsp), %rcx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L__crypto_kem_enc_derand_jazz$98:
+	leaq	8(%rsp), %rsp
+	movq	40(%rsp), %rax
+	movq	$0, %rcx
+L__crypto_kem_enc_derand_jazz$93:
+	movzbw	8634(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	8634(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	8634(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L__crypto_kem_enc_derand_jazz$96
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_enc_derand_jazz$96
+	movw	%dx, 408(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_enc_derand_jazz$97:
+L__crypto_kem_enc_derand_jazz$96:
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_enc_derand_jazz$94
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_enc_derand_jazz$94
+	movw	%di, 408(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_enc_derand_jazz$95:
+L__crypto_kem_enc_derand_jazz$94:
+	cmpq	$166, %rcx
+	jb  	L__crypto_kem_enc_derand_jazz$93
+L__crypto_kem_enc_derand_jazz$91:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_enc_derand_jazz$92
+	movq	$0, %rax
+	movq	$0, %rcx
+	jmp 	L__crypto_kem_enc_derand_jazz$89
+L__crypto_kem_enc_derand_jazz$90:
+	movw	408(%rsp,%rax,2), %dx
+	movw	%dx, 6552(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L__crypto_kem_enc_derand_jazz$89:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_enc_derand_jazz$90
+	movq	32(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L__crypto_kem_enc_derand_jazz$87
+	movb	$0, 8632(%rsp)
+	movb	$1, 8633(%rsp)
+	jmp 	L__crypto_kem_enc_derand_jazz$88
+L__crypto_kem_enc_derand_jazz$87:
+	movb	$1, 8632(%rsp)
+	movb	$0, 8633(%rsp)
+L__crypto_kem_enc_derand_jazz$88:
+	leaq	208(%rsp), %rax
+	leaq	8600(%rsp), %rcx
+	call	L_shake128_absorb34$1
+L__crypto_kem_enc_derand_jazz$86:
+	movq	$0, %rax
+	jmp 	L__crypto_kem_enc_derand_jazz$84
+L__crypto_kem_enc_derand_jazz$85:
+	movq	%rax, 408(%rsp,%rax,8)
+	incq	%rax
+L__crypto_kem_enc_derand_jazz$84:
+	cmpq	$64, %rax
+	jb  	L__crypto_kem_enc_derand_jazz$85
+	movq	$0, %rax
+	jmp 	L__crypto_kem_enc_derand_jazz$76
+L__crypto_kem_enc_derand_jazz$77:
+	movq	%rax, 40(%rsp)
+	leaq	208(%rsp), %rax
+	leaq	8634(%rsp), %rcx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L__crypto_kem_enc_derand_jazz$83:
+	leaq	8(%rsp), %rsp
+	movq	40(%rsp), %rax
+	movq	$0, %rcx
+L__crypto_kem_enc_derand_jazz$78:
+	movzbw	8634(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	8634(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	8634(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L__crypto_kem_enc_derand_jazz$81
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_enc_derand_jazz$81
+	movw	%dx, 408(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_enc_derand_jazz$82:
+L__crypto_kem_enc_derand_jazz$81:
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_enc_derand_jazz$79
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_enc_derand_jazz$79
+	movw	%di, 408(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_enc_derand_jazz$80:
+L__crypto_kem_enc_derand_jazz$79:
+	cmpq	$166, %rcx
+	jb  	L__crypto_kem_enc_derand_jazz$78
+L__crypto_kem_enc_derand_jazz$76:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_enc_derand_jazz$77
+	movq	$0, %rax
+	movq	$256, %rcx
+	jmp 	L__crypto_kem_enc_derand_jazz$74
+L__crypto_kem_enc_derand_jazz$75:
+	movw	408(%rsp,%rax,2), %dx
+	movw	%dx, 6552(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L__crypto_kem_enc_derand_jazz$74:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_enc_derand_jazz$75
+	movq	32(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L__crypto_kem_enc_derand_jazz$72
+	movb	$1, 8632(%rsp)
+	movb	$0, 8633(%rsp)
+	jmp 	L__crypto_kem_enc_derand_jazz$73
+L__crypto_kem_enc_derand_jazz$72:
+	movb	$0, 8632(%rsp)
+	movb	$1, 8633(%rsp)
+L__crypto_kem_enc_derand_jazz$73:
+	leaq	208(%rsp), %rax
+	leaq	8600(%rsp), %rcx
+	call	L_shake128_absorb34$1
+L__crypto_kem_enc_derand_jazz$71:
+	movq	$0, %rax
+	jmp 	L__crypto_kem_enc_derand_jazz$69
+L__crypto_kem_enc_derand_jazz$70:
+	movq	%rax, 408(%rsp,%rax,8)
+	incq	%rax
+L__crypto_kem_enc_derand_jazz$69:
+	cmpq	$64, %rax
+	jb  	L__crypto_kem_enc_derand_jazz$70
+	movq	$0, %rax
+	jmp 	L__crypto_kem_enc_derand_jazz$61
+L__crypto_kem_enc_derand_jazz$62:
+	movq	%rax, 40(%rsp)
+	leaq	208(%rsp), %rax
+	leaq	8634(%rsp), %rcx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L__crypto_kem_enc_derand_jazz$68:
+	leaq	8(%rsp), %rsp
+	movq	40(%rsp), %rax
+	movq	$0, %rcx
+L__crypto_kem_enc_derand_jazz$63:
+	movzbw	8634(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	8634(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	8634(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L__crypto_kem_enc_derand_jazz$66
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_enc_derand_jazz$66
+	movw	%dx, 408(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_enc_derand_jazz$67:
+L__crypto_kem_enc_derand_jazz$66:
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_enc_derand_jazz$64
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_enc_derand_jazz$64
+	movw	%di, 408(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_enc_derand_jazz$65:
+L__crypto_kem_enc_derand_jazz$64:
+	cmpq	$166, %rcx
+	jb  	L__crypto_kem_enc_derand_jazz$63
+L__crypto_kem_enc_derand_jazz$61:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_enc_derand_jazz$62
+	movq	$0, %rax
+	movq	$512, %rcx
+	jmp 	L__crypto_kem_enc_derand_jazz$59
+L__crypto_kem_enc_derand_jazz$60:
+	movw	408(%rsp,%rax,2), %dx
+	movw	%dx, 6552(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L__crypto_kem_enc_derand_jazz$59:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_enc_derand_jazz$60
+	movq	32(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L__crypto_kem_enc_derand_jazz$57
+	movb	$1, 8632(%rsp)
+	movb	$1, 8633(%rsp)
+	jmp 	L__crypto_kem_enc_derand_jazz$58
+L__crypto_kem_enc_derand_jazz$57:
+	movb	$1, 8632(%rsp)
+	movb	$1, 8633(%rsp)
+L__crypto_kem_enc_derand_jazz$58:
+	leaq	208(%rsp), %rax
+	leaq	8600(%rsp), %rcx
+	call	L_shake128_absorb34$1
+L__crypto_kem_enc_derand_jazz$56:
+	movq	$0, %rax
+	jmp 	L__crypto_kem_enc_derand_jazz$54
+L__crypto_kem_enc_derand_jazz$55:
+	movq	%rax, 408(%rsp,%rax,8)
+	incq	%rax
+L__crypto_kem_enc_derand_jazz$54:
+	cmpq	$64, %rax
+	jb  	L__crypto_kem_enc_derand_jazz$55
+	movq	$0, %rax
+	jmp 	L__crypto_kem_enc_derand_jazz$46
+L__crypto_kem_enc_derand_jazz$47:
+	movq	%rax, 32(%rsp)
+	leaq	208(%rsp), %rax
+	leaq	8634(%rsp), %rcx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L__crypto_kem_enc_derand_jazz$53:
+	leaq	8(%rsp), %rsp
+	movq	32(%rsp), %rax
+	movq	$0, %rcx
+L__crypto_kem_enc_derand_jazz$48:
+	movzbw	8634(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	8634(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	8634(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L__crypto_kem_enc_derand_jazz$51
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_enc_derand_jazz$51
+	movw	%dx, 408(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_enc_derand_jazz$52:
+L__crypto_kem_enc_derand_jazz$51:
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_enc_derand_jazz$49
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_enc_derand_jazz$49
+	movw	%di, 408(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_enc_derand_jazz$50:
+L__crypto_kem_enc_derand_jazz$49:
+	cmpq	$166, %rcx
+	jb  	L__crypto_kem_enc_derand_jazz$48
+L__crypto_kem_enc_derand_jazz$46:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_enc_derand_jazz$47
+	movq	$0, %rax
+	movq	$768, %rcx
+	jmp 	L__crypto_kem_enc_derand_jazz$44
+L__crypto_kem_enc_derand_jazz$45:
+	movw	408(%rsp,%rax,2), %dx
+	movw	%dx, 6552(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L__crypto_kem_enc_derand_jazz$44:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_enc_derand_jazz$45
+	movq	8(%rsp), %rcx
+	movb	$0, %al
+	leaq	3480(%rsp), %rdx
+	leaq	-240(%rsp), %rsp
+	call	L_poly_getnoise_eta1$1
+L__crypto_kem_enc_derand_jazz$43:
+	leaq	240(%rsp), %rsp
+	movq	8(%rsp), %rcx
+	movb	$1, %al
+	leaq	3992(%rsp), %rdx
+	leaq	-240(%rsp), %rsp
+	call	L_poly_getnoise_eta1$1
+L__crypto_kem_enc_derand_jazz$42:
+	leaq	240(%rsp), %rsp
+	movq	8(%rsp), %rax
+	movb	$2, %cl
+	leaq	4504(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise_eta2$1
+L__crypto_kem_enc_derand_jazz$41:
+	leaq	176(%rsp), %rsp
+	movq	8(%rsp), %rax
+	movb	$3, %cl
+	leaq	5016(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise_eta2$1
+L__crypto_kem_enc_derand_jazz$40:
+	leaq	176(%rsp), %rsp
+	movq	8(%rsp), %rax
+	movb	$4, %cl
+	leaq	408(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise_eta2$1
+L__crypto_kem_enc_derand_jazz$39:
+	leaq	176(%rsp), %rsp
+	leaq	3480(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_enc_derand_jazz$38:
+	leaq	3992(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_enc_derand_jazz$37:
+	leaq	5528(%rsp), %rdi
+	leaq	6552(%rsp), %rcx
+	leaq	3480(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$36:
+	leaq	16(%rsp), %rsp
+	leaq	1432(%rsp), %rdi
+	leaq	7064(%rsp), %rcx
+	leaq	3992(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$35:
+	leaq	16(%rsp), %rsp
+	leaq	5528(%rsp), %rcx
+	leaq	1432(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$34:
+	leaq	5528(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L__crypto_kem_enc_derand_jazz$32
+L__crypto_kem_enc_derand_jazz$33:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_enc_derand_jazz$32:
+	cmpq	$256, %rcx
+	jb  	L__crypto_kem_enc_derand_jazz$33
+	leaq	6040(%rsp), %rdi
+	leaq	7576(%rsp), %rcx
+	leaq	3480(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$31:
+	leaq	16(%rsp), %rsp
+	leaq	1432(%rsp), %rdi
+	leaq	8088(%rsp), %rcx
+	leaq	3992(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$30:
+	leaq	16(%rsp), %rsp
+	leaq	6040(%rsp), %rcx
+	leaq	1432(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$29:
+	leaq	6040(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L__crypto_kem_enc_derand_jazz$27
+L__crypto_kem_enc_derand_jazz$28:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_enc_derand_jazz$27:
+	cmpq	$256, %rcx
+	jb  	L__crypto_kem_enc_derand_jazz$28
+	leaq	1432(%rsp), %rdi
+	leaq	2456(%rsp), %rcx
+	leaq	3480(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$26:
+	leaq	16(%rsp), %rsp
+	leaq	1944(%rsp), %rdi
+	leaq	2968(%rsp), %rcx
+	leaq	3992(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$25:
+	leaq	16(%rsp), %rsp
+	leaq	1432(%rsp), %rcx
+	leaq	1944(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$24:
+	leaq	1432(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L__crypto_kem_enc_derand_jazz$22
+L__crypto_kem_enc_derand_jazz$23:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_enc_derand_jazz$22:
+	cmpq	$256, %rcx
+	jb  	L__crypto_kem_enc_derand_jazz$23
+	leaq	5528(%rsp), %rcx
+	call	L_poly_invntt$1
+L__crypto_kem_enc_derand_jazz$21:
+	leaq	6040(%rsp), %rcx
+	call	L_poly_invntt$1
+L__crypto_kem_enc_derand_jazz$20:
+	leaq	1432(%rsp), %rcx
+	call	L_poly_invntt$1
+L__crypto_kem_enc_derand_jazz$19:
+	leaq	5528(%rsp), %rcx
+	leaq	4504(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$18:
+	leaq	6040(%rsp), %rcx
+	leaq	5016(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$17:
+	leaq	1432(%rsp), %rcx
+	leaq	408(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$16:
+	leaq	1432(%rsp), %rcx
+	leaq	920(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$15:
+	leaq	5528(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L__crypto_kem_enc_derand_jazz$13
+L__crypto_kem_enc_derand_jazz$14:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_enc_derand_jazz$13:
+	cmpq	$256, %rcx
+	jb  	L__crypto_kem_enc_derand_jazz$14
+	leaq	6040(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L__crypto_kem_enc_derand_jazz$11
+L__crypto_kem_enc_derand_jazz$12:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_enc_derand_jazz$11:
+	cmpq	$256, %rcx
+	jb  	L__crypto_kem_enc_derand_jazz$12
+	leaq	1432(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L__crypto_kem_enc_derand_jazz$9
+L__crypto_kem_enc_derand_jazz$10:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_enc_derand_jazz$9:
+	cmpq	$256, %rcx
+	jb  	L__crypto_kem_enc_derand_jazz$10
+	movq	16(%rsp), %rax
+	movq	$0, %rdx
+	movq	$0, %rsi
+	leaq	5528(%rsp), %rcx
+	call	L_poly_csubq$1
+L__crypto_kem_enc_derand_jazz$8:
+	leaq	6040(%rsp), %rcx
+	call	L_poly_csubq$1
+L__crypto_kem_enc_derand_jazz$7:
+	jmp 	L__crypto_kem_enc_derand_jazz$5
+L__crypto_kem_enc_derand_jazz$6:
+	movzwq	5528(%rsp,%rdx,2), %rcx
+	incq	%rdx
+	shlq	$10, %rcx
+	addq	$1665, %rcx
+	imulq	$1290167, %rcx, %rcx
+	shrq	$32, %rcx
+	andq	$1023, %rcx
+	movzwq	5528(%rsp,%rdx,2), %rdi
+	incq	%rdx
+	shlq	$10, %rdi
+	addq	$1665, %rdi
+	imulq	$1290167, %rdi, %rdi
+	shrq	$32, %rdi
+	andq	$1023, %rdi
+	movzwq	5528(%rsp,%rdx,2), %r8
+	incq	%rdx
+	shlq	$10, %r8
+	addq	$1665, %r8
+	imulq	$1290167, %r8, %r8
+	shrq	$32, %r8
+	andq	$1023, %r8
+	movzwq	5528(%rsp,%rdx,2), %r9
+	incq	%rdx
+	shlq	$10, %r9
+	addq	$1665, %r9
+	imulq	$1290167, %r9, %r9
+	shrq	$32, %r9
+	andq	$1023, %r9
+	movw	%cx, %r10w
+	andw	$255, %r10w
+	movb	%r10b, (%rax,%rsi)
+	incq	%rsi
+	shrw	$8, %cx
+	movw	%di, %r10w
+	shlw	$2, %r10w
+	orw 	%cx, %r10w
+	movb	%r10b, (%rax,%rsi)
+	incq	%rsi
+	shrw	$6, %di
+	movw	%r8w, %cx
+	shlw	$4, %cx
+	orw 	%di, %cx
+	movb	%cl, (%rax,%rsi)
+	incq	%rsi
+	shrw	$4, %r8w
+	movw	%r9w, %cx
+	shlw	$6, %cx
+	orw 	%r8w, %cx
+	movb	%cl, (%rax,%rsi)
+	incq	%rsi
+	shrq	$2, %r9
+	movb	%r9b, (%rax,%rsi)
+	incq	%rsi
+L__crypto_kem_enc_derand_jazz$5:
+	cmpq	$512, %rdx
+	jb  	L__crypto_kem_enc_derand_jazz$6
+	addq	$640, %rax
+	leaq	1432(%rsp), %rcx
+	call	L_poly_compress$1
+L__crypto_kem_enc_derand_jazz$4:
+	movq	16(%rsp), %rsi
+	movq	$768, %rcx
+	leaq	176(%rsp), %rax
+	leaq	-232(%rsp), %rsp
+	call	L_sha3_256$1
+L__crypto_kem_enc_derand_jazz$3:
+	leaq	232(%rsp), %rsp
+	movq	24(%rsp), %rax
+	movq	$32, %rcx
+	leaq	144(%rsp), %rdx
+	leaq	-216(%rsp), %rsp
+	call	L_shake256_64$1
+L__crypto_kem_enc_derand_jazz$2:
+	leaq	216(%rsp), %rsp
+	ret
+L__crypto_kem_keypair_derand_jazz$1:
+	movq	%rax, 8(%rsp)
+	movq	%rbx, 16(%rsp)
+	movq	%rbp, 24(%rsp)
+	movq	%rax, %rcx
+	movq	%rbx, 32(%rsp)
+	movq	%rbp, 40(%rsp)
+	leaq	128(%rsp), %rax
+	leaq	-208(%rsp), %rsp
+	call	L_sha3_512_32$1
+L__crypto_kem_keypair_derand_jazz$93:
+	leaq	208(%rsp), %rsp
+	movq	128(%rsp), %rax
+	movq	%rax, 96(%rsp)
+	movq	160(%rsp), %rax
+	movq	%rax, 64(%rsp)
+	movq	136(%rsp), %rax
+	movq	%rax, 104(%rsp)
+	movq	168(%rsp), %rax
+	movq	%rax, 72(%rsp)
+	movq	144(%rsp), %rax
+	movq	%rax, 112(%rsp)
+	movq	176(%rsp), %rax
+	movq	%rax, 80(%rsp)
+	movq	152(%rsp), %rax
+	movq	%rax, 120(%rsp)
+	movq	184(%rsp), %rax
+	movq	%rax, 88(%rsp)
+	movq	$0, %rax
+	movq	%rax, 48(%rsp)
+	movb	96(%rsp), %al
+	movb	%al, 6024(%rsp)
+	movb	97(%rsp), %al
+	movb	%al, 6025(%rsp)
+	movb	98(%rsp), %al
+	movb	%al, 6026(%rsp)
+	movb	99(%rsp), %al
+	movb	%al, 6027(%rsp)
+	movb	100(%rsp), %al
+	movb	%al, 6028(%rsp)
+	movb	101(%rsp), %al
+	movb	%al, 6029(%rsp)
+	movb	102(%rsp), %al
+	movb	%al, 6030(%rsp)
+	movb	103(%rsp), %al
+	movb	%al, 6031(%rsp)
+	movb	104(%rsp), %al
+	movb	%al, 6032(%rsp)
+	movb	105(%rsp), %al
+	movb	%al, 6033(%rsp)
+	movb	106(%rsp), %al
+	movb	%al, 6034(%rsp)
+	movb	107(%rsp), %al
+	movb	%al, 6035(%rsp)
+	movb	108(%rsp), %al
+	movb	%al, 6036(%rsp)
+	movb	109(%rsp), %al
+	movb	%al, 6037(%rsp)
+	movb	110(%rsp), %al
+	movb	%al, 6038(%rsp)
+	movb	111(%rsp), %al
+	movb	%al, 6039(%rsp)
+	movb	112(%rsp), %al
+	movb	%al, 6040(%rsp)
+	movb	113(%rsp), %al
+	movb	%al, 6041(%rsp)
+	movb	114(%rsp), %al
+	movb	%al, 6042(%rsp)
+	movb	115(%rsp), %al
+	movb	%al, 6043(%rsp)
+	movb	116(%rsp), %al
+	movb	%al, 6044(%rsp)
+	movb	117(%rsp), %al
+	movb	%al, 6045(%rsp)
+	movb	118(%rsp), %al
+	movb	%al, 6046(%rsp)
+	movb	119(%rsp), %al
+	movb	%al, 6047(%rsp)
+	movb	120(%rsp), %al
+	movb	%al, 6048(%rsp)
+	movb	121(%rsp), %al
+	movb	%al, 6049(%rsp)
+	movb	122(%rsp), %al
+	movb	%al, 6050(%rsp)
+	movb	123(%rsp), %al
+	movb	%al, 6051(%rsp)
+	movb	124(%rsp), %al
+	movb	%al, 6052(%rsp)
+	movb	125(%rsp), %al
+	movb	%al, 6053(%rsp)
+	movb	126(%rsp), %al
+	movb	%al, 6054(%rsp)
+	movb	127(%rsp), %al
+	movb	%al, 6055(%rsp)
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L__crypto_kem_keypair_derand_jazz$91
+	movb	$0, 6056(%rsp)
+	movb	$0, 6057(%rsp)
+	jmp 	L__crypto_kem_keypair_derand_jazz$92
+L__crypto_kem_keypair_derand_jazz$91:
+	movb	$0, 6056(%rsp)
+	movb	$0, 6057(%rsp)
+L__crypto_kem_keypair_derand_jazz$92:
+	leaq	192(%rsp), %rax
+	leaq	6024(%rsp), %rcx
+	call	L_shake128_absorb34$1
+L__crypto_kem_keypair_derand_jazz$90:
+	movq	$0, %rax
+	jmp 	L__crypto_kem_keypair_derand_jazz$88
+L__crypto_kem_keypair_derand_jazz$89:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L__crypto_kem_keypair_derand_jazz$88:
+	cmpq	$64, %rax
+	jb  	L__crypto_kem_keypair_derand_jazz$89
+	movq	$0, %rax
+	jmp 	L__crypto_kem_keypair_derand_jazz$80
+L__crypto_kem_keypair_derand_jazz$81:
+	movq	%rax, 56(%rsp)
+	leaq	192(%rsp), %rax
+	leaq	6058(%rsp), %rcx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L__crypto_kem_keypair_derand_jazz$87:
+	leaq	8(%rsp), %rsp
+	movq	56(%rsp), %rax
+	movq	$0, %rcx
+L__crypto_kem_keypair_derand_jazz$82:
+	movzbw	6058(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	6058(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	6058(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L__crypto_kem_keypair_derand_jazz$85
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_keypair_derand_jazz$85
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_keypair_derand_jazz$86:
+L__crypto_kem_keypair_derand_jazz$85:
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_keypair_derand_jazz$83
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_keypair_derand_jazz$83
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_keypair_derand_jazz$84:
+L__crypto_kem_keypair_derand_jazz$83:
+	cmpq	$166, %rcx
+	jb  	L__crypto_kem_keypair_derand_jazz$82
+L__crypto_kem_keypair_derand_jazz$80:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_keypair_derand_jazz$81
+	movq	$0, %rax
+	movq	$0, %rcx
+	jmp 	L__crypto_kem_keypair_derand_jazz$78
+L__crypto_kem_keypair_derand_jazz$79:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 3976(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L__crypto_kem_keypair_derand_jazz$78:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_keypair_derand_jazz$79
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L__crypto_kem_keypair_derand_jazz$76
+	movb	$0, 6056(%rsp)
+	movb	$1, 6057(%rsp)
+	jmp 	L__crypto_kem_keypair_derand_jazz$77
+L__crypto_kem_keypair_derand_jazz$76:
+	movb	$1, 6056(%rsp)
+	movb	$0, 6057(%rsp)
+L__crypto_kem_keypair_derand_jazz$77:
+	leaq	192(%rsp), %rax
+	leaq	6024(%rsp), %rcx
+	call	L_shake128_absorb34$1
+L__crypto_kem_keypair_derand_jazz$75:
+	movq	$0, %rax
+	jmp 	L__crypto_kem_keypair_derand_jazz$73
+L__crypto_kem_keypair_derand_jazz$74:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L__crypto_kem_keypair_derand_jazz$73:
+	cmpq	$64, %rax
+	jb  	L__crypto_kem_keypair_derand_jazz$74
+	movq	$0, %rax
+	jmp 	L__crypto_kem_keypair_derand_jazz$65
+L__crypto_kem_keypair_derand_jazz$66:
+	movq	%rax, 56(%rsp)
+	leaq	192(%rsp), %rax
+	leaq	6058(%rsp), %rcx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L__crypto_kem_keypair_derand_jazz$72:
+	leaq	8(%rsp), %rsp
+	movq	56(%rsp), %rax
+	movq	$0, %rcx
+L__crypto_kem_keypair_derand_jazz$67:
+	movzbw	6058(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	6058(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	6058(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L__crypto_kem_keypair_derand_jazz$70
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_keypair_derand_jazz$70
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_keypair_derand_jazz$71:
+L__crypto_kem_keypair_derand_jazz$70:
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_keypair_derand_jazz$68
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_keypair_derand_jazz$68
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_keypair_derand_jazz$69:
+L__crypto_kem_keypair_derand_jazz$68:
+	cmpq	$166, %rcx
+	jb  	L__crypto_kem_keypair_derand_jazz$67
+L__crypto_kem_keypair_derand_jazz$65:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_keypair_derand_jazz$66
+	movq	$0, %rax
+	movq	$256, %rcx
+	jmp 	L__crypto_kem_keypair_derand_jazz$63
+L__crypto_kem_keypair_derand_jazz$64:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 3976(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L__crypto_kem_keypair_derand_jazz$63:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_keypair_derand_jazz$64
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L__crypto_kem_keypair_derand_jazz$61
+	movb	$1, 6056(%rsp)
+	movb	$0, 6057(%rsp)
+	jmp 	L__crypto_kem_keypair_derand_jazz$62
+L__crypto_kem_keypair_derand_jazz$61:
+	movb	$0, 6056(%rsp)
+	movb	$1, 6057(%rsp)
+L__crypto_kem_keypair_derand_jazz$62:
+	leaq	192(%rsp), %rax
+	leaq	6024(%rsp), %rcx
+	call	L_shake128_absorb34$1
+L__crypto_kem_keypair_derand_jazz$60:
+	movq	$0, %rax
+	jmp 	L__crypto_kem_keypair_derand_jazz$58
+L__crypto_kem_keypair_derand_jazz$59:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L__crypto_kem_keypair_derand_jazz$58:
+	cmpq	$64, %rax
+	jb  	L__crypto_kem_keypair_derand_jazz$59
+	movq	$0, %rax
+	jmp 	L__crypto_kem_keypair_derand_jazz$50
+L__crypto_kem_keypair_derand_jazz$51:
+	movq	%rax, 56(%rsp)
+	leaq	192(%rsp), %rax
+	leaq	6058(%rsp), %rcx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L__crypto_kem_keypair_derand_jazz$57:
+	leaq	8(%rsp), %rsp
+	movq	56(%rsp), %rax
+	movq	$0, %rcx
+L__crypto_kem_keypair_derand_jazz$52:
+	movzbw	6058(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	6058(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	6058(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L__crypto_kem_keypair_derand_jazz$55
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_keypair_derand_jazz$55
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_keypair_derand_jazz$56:
+L__crypto_kem_keypair_derand_jazz$55:
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_keypair_derand_jazz$53
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_keypair_derand_jazz$53
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_keypair_derand_jazz$54:
+L__crypto_kem_keypair_derand_jazz$53:
+	cmpq	$166, %rcx
+	jb  	L__crypto_kem_keypair_derand_jazz$52
+L__crypto_kem_keypair_derand_jazz$50:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_keypair_derand_jazz$51
+	movq	$0, %rax
+	movq	$512, %rcx
+	jmp 	L__crypto_kem_keypair_derand_jazz$48
+L__crypto_kem_keypair_derand_jazz$49:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 3976(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L__crypto_kem_keypair_derand_jazz$48:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_keypair_derand_jazz$49
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L__crypto_kem_keypair_derand_jazz$46
+	movb	$1, 6056(%rsp)
+	movb	$1, 6057(%rsp)
+	jmp 	L__crypto_kem_keypair_derand_jazz$47
+L__crypto_kem_keypair_derand_jazz$46:
+	movb	$1, 6056(%rsp)
+	movb	$1, 6057(%rsp)
+L__crypto_kem_keypair_derand_jazz$47:
+	leaq	192(%rsp), %rax
+	leaq	6024(%rsp), %rcx
+	call	L_shake128_absorb34$1
+L__crypto_kem_keypair_derand_jazz$45:
+	movq	$0, %rax
+	jmp 	L__crypto_kem_keypair_derand_jazz$43
+L__crypto_kem_keypair_derand_jazz$44:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L__crypto_kem_keypair_derand_jazz$43:
+	cmpq	$64, %rax
+	jb  	L__crypto_kem_keypair_derand_jazz$44
+	movq	$0, %rax
+	jmp 	L__crypto_kem_keypair_derand_jazz$35
+L__crypto_kem_keypair_derand_jazz$36:
+	movq	%rax, 48(%rsp)
+	leaq	192(%rsp), %rax
+	leaq	6058(%rsp), %rcx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L__crypto_kem_keypair_derand_jazz$42:
+	leaq	8(%rsp), %rsp
+	movq	48(%rsp), %rax
+	movq	$0, %rcx
+L__crypto_kem_keypair_derand_jazz$37:
+	movzbw	6058(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	6058(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	6058(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L__crypto_kem_keypair_derand_jazz$40
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_keypair_derand_jazz$40
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_keypair_derand_jazz$41:
+L__crypto_kem_keypair_derand_jazz$40:
+	cmpw	$3329, %di
+	jnb 	L__crypto_kem_keypair_derand_jazz$38
+	cmpq	$256, %rax
+	jnb 	L__crypto_kem_keypair_derand_jazz$38
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L__crypto_kem_keypair_derand_jazz$39:
+L__crypto_kem_keypair_derand_jazz$38:
+	cmpq	$166, %rcx
+	jb  	L__crypto_kem_keypair_derand_jazz$37
+L__crypto_kem_keypair_derand_jazz$35:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_keypair_derand_jazz$36
+	movq	$0, %rax
+	movq	$768, %rcx
+	jmp 	L__crypto_kem_keypair_derand_jazz$33
+L__crypto_kem_keypair_derand_jazz$34:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 3976(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L__crypto_kem_keypair_derand_jazz$33:
+	cmpq	$256, %rax
+	jb  	L__crypto_kem_keypair_derand_jazz$34
+	movb	$0, %al
+	leaq	904(%rsp), %rdx
+	leaq	64(%rsp), %rcx
+	leaq	-240(%rsp), %rsp
+	call	L_poly_getnoise_eta1$1
+L__crypto_kem_keypair_derand_jazz$32:
+	leaq	240(%rsp), %rsp
+	movb	$1, %al
+	leaq	1416(%rsp), %rdx
+	leaq	64(%rsp), %rcx
+	leaq	-240(%rsp), %rsp
+	call	L_poly_getnoise_eta1$1
+L__crypto_kem_keypair_derand_jazz$31:
+	leaq	240(%rsp), %rsp
+	movb	$2, %al
+	leaq	1928(%rsp), %rdx
+	leaq	64(%rsp), %rcx
+	leaq	-240(%rsp), %rsp
+	call	L_poly_getnoise_eta1$1
+L__crypto_kem_keypair_derand_jazz$30:
+	leaq	240(%rsp), %rsp
+	movb	$3, %al
+	leaq	2440(%rsp), %rdx
+	leaq	64(%rsp), %rcx
+	leaq	-240(%rsp), %rsp
+	call	L_poly_getnoise_eta1$1
+L__crypto_kem_keypair_derand_jazz$29:
+	leaq	240(%rsp), %rsp
+	leaq	904(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$28:
+	leaq	1416(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$27:
+	leaq	1928(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$26:
+	leaq	2440(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$25:
+	leaq	2952(%rsp), %rdi
+	leaq	3976(%rsp), %rcx
+	leaq	904(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$24:
+	leaq	16(%rsp), %rsp
+	leaq	392(%rsp), %rdi
+	leaq	4488(%rsp), %rcx
+	leaq	1416(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$23:
+	leaq	16(%rsp), %rsp
+	leaq	2952(%rsp), %rcx
+	leaq	392(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$22:
+	leaq	2952(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L__crypto_kem_keypair_derand_jazz$20
+L__crypto_kem_keypair_derand_jazz$21:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_keypair_derand_jazz$20:
+	cmpq	$256, %rcx
+	jb  	L__crypto_kem_keypair_derand_jazz$21
+	leaq	2952(%rsp), %rax
+	call	L_poly_frommont$1
+L__crypto_kem_keypair_derand_jazz$19:
+	leaq	3464(%rsp), %rdi
+	leaq	5000(%rsp), %rcx
+	leaq	904(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$18:
+	leaq	16(%rsp), %rsp
+	leaq	392(%rsp), %rdi
+	leaq	5512(%rsp), %rcx
+	leaq	1416(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$17:
+	leaq	16(%rsp), %rsp
+	leaq	3464(%rsp), %rcx
+	leaq	392(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$16:
+	leaq	3464(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L__crypto_kem_keypair_derand_jazz$14
+L__crypto_kem_keypair_derand_jazz$15:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_keypair_derand_jazz$14:
+	cmpq	$256, %rcx
+	jb  	L__crypto_kem_keypair_derand_jazz$15
+	leaq	3464(%rsp), %rax
+	call	L_poly_frommont$1
+L__crypto_kem_keypair_derand_jazz$13:
+	leaq	2952(%rsp), %rcx
+	leaq	1928(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$12:
+	leaq	3464(%rsp), %rcx
+	leaq	2440(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$11:
+	leaq	2952(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L__crypto_kem_keypair_derand_jazz$9
+L__crypto_kem_keypair_derand_jazz$10:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_keypair_derand_jazz$9:
+	cmpq	$256, %rcx
+	jb  	L__crypto_kem_keypair_derand_jazz$10
+	leaq	3464(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L__crypto_kem_keypair_derand_jazz$7
+L__crypto_kem_keypair_derand_jazz$8:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L__crypto_kem_keypair_derand_jazz$7:
+	cmpq	$256, %rcx
+	jb  	L__crypto_kem_keypair_derand_jazz$8
+	movq	32(%rsp), %rax
+	movq	40(%rsp), %rcx
+	movq	%rcx, %rdx
+	leaq	904(%rsp), %rcx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$6:
+	addq	$384, %rdx
+	leaq	1416(%rsp), %rcx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$5:
+	movq	%rax, %rdx
+	leaq	2952(%rsp), %rcx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$4:
+	addq	$384, %rdx
+	leaq	3464(%rsp), %rcx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$3:
+	addq	$768, %rax
+	movq	96(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	104(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	112(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	120(%rsp), %rcx
+	movq	%rcx, (%rax)
+	movq	24(%rsp), %rax
+	addq	$768, %rax
+	movq	16(%rsp), %rcx
+	movq	(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	8(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	16(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	24(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	32(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	40(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	48(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	56(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	64(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	72(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	80(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	88(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	96(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	104(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	112(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	120(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	128(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	136(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	144(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	152(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	160(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	168(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	176(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	184(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	192(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	200(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	208(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	216(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	224(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	232(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	240(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	248(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	256(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	264(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	272(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	280(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	288(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	296(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	304(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	312(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	320(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	328(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	336(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	344(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	352(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	360(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	368(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	376(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	384(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	392(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	400(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	408(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	416(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	424(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	432(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	440(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	448(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	456(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	464(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	472(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	480(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	488(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	496(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	504(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	512(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	520(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	528(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	536(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	544(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	552(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	560(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	568(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	576(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	584(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	592(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	600(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	608(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	616(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	624(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	632(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	640(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	648(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	656(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	664(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	672(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	680(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	688(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	696(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	704(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	712(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	720(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	728(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	736(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	744(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	752(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	760(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	768(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	776(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	784(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	792(%rcx), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	%rax, 24(%rsp)
+	movq	16(%rsp), %rsi
+	movq	$800, %rcx
+	leaq	96(%rsp), %rax
+	leaq	-232(%rsp), %rsp
+	call	L_sha3_256$1
+L__crypto_kem_keypair_derand_jazz$2:
+	leaq	232(%rsp), %rsp
+	movq	24(%rsp), %rax
+	movq	8(%rsp), %rcx
+	leaq	96(%rsp), %rdx
+	movb	(%rdx), %sil
+	movb	%sil, (%rax)
+	movb	1(%rdx), %sil
+	movb	%sil, 1(%rax)
+	movb	2(%rdx), %sil
+	movb	%sil, 2(%rax)
+	movb	3(%rdx), %sil
+	movb	%sil, 3(%rax)
+	movb	4(%rdx), %sil
+	movb	%sil, 4(%rax)
+	movb	5(%rdx), %sil
+	movb	%sil, 5(%rax)
+	movb	6(%rdx), %sil
+	movb	%sil, 6(%rax)
+	movb	7(%rdx), %sil
+	movb	%sil, 7(%rax)
+	movb	8(%rdx), %sil
+	movb	%sil, 8(%rax)
+	movb	9(%rdx), %sil
+	movb	%sil, 9(%rax)
+	movb	10(%rdx), %sil
+	movb	%sil, 10(%rax)
+	movb	11(%rdx), %sil
+	movb	%sil, 11(%rax)
+	movb	12(%rdx), %sil
+	movb	%sil, 12(%rax)
+	movb	13(%rdx), %sil
+	movb	%sil, 13(%rax)
+	movb	14(%rdx), %sil
+	movb	%sil, 14(%rax)
+	movb	15(%rdx), %sil
+	movb	%sil, 15(%rax)
+	movb	16(%rdx), %sil
+	movb	%sil, 16(%rax)
+	movb	17(%rdx), %sil
+	movb	%sil, 17(%rax)
+	movb	18(%rdx), %sil
+	movb	%sil, 18(%rax)
+	movb	19(%rdx), %sil
+	movb	%sil, 19(%rax)
+	movb	20(%rdx), %sil
+	movb	%sil, 20(%rax)
+	movb	21(%rdx), %sil
+	movb	%sil, 21(%rax)
+	movb	22(%rdx), %sil
+	movb	%sil, 22(%rax)
+	movb	23(%rdx), %sil
+	movb	%sil, 23(%rax)
+	movb	24(%rdx), %sil
+	movb	%sil, 24(%rax)
+	movb	25(%rdx), %sil
+	movb	%sil, 25(%rax)
+	movb	26(%rdx), %sil
+	movb	%sil, 26(%rax)
+	movb	27(%rdx), %sil
+	movb	%sil, 27(%rax)
+	movb	28(%rdx), %sil
+	movb	%sil, 28(%rax)
+	movb	29(%rdx), %sil
+	movb	%sil, 29(%rax)
+	movb	30(%rdx), %sil
+	movb	%sil, 30(%rax)
+	movb	31(%rdx), %dl
+	movb	%dl, 31(%rax)
+	addq	$32, %rax
+	leaq	32(%rcx), %rcx
+	movb	(%rcx), %dl
+	movb	%dl, (%rax)
+	movb	1(%rcx), %dl
+	movb	%dl, 1(%rax)
+	movb	2(%rcx), %dl
+	movb	%dl, 2(%rax)
+	movb	3(%rcx), %dl
+	movb	%dl, 3(%rax)
+	movb	4(%rcx), %dl
+	movb	%dl, 4(%rax)
+	movb	5(%rcx), %dl
+	movb	%dl, 5(%rax)
+	movb	6(%rcx), %dl
+	movb	%dl, 6(%rax)
+	movb	7(%rcx), %dl
+	movb	%dl, 7(%rax)
+	movb	8(%rcx), %dl
+	movb	%dl, 8(%rax)
+	movb	9(%rcx), %dl
+	movb	%dl, 9(%rax)
+	movb	10(%rcx), %dl
+	movb	%dl, 10(%rax)
+	movb	11(%rcx), %dl
+	movb	%dl, 11(%rax)
+	movb	12(%rcx), %dl
+	movb	%dl, 12(%rax)
+	movb	13(%rcx), %dl
+	movb	%dl, 13(%rax)
+	movb	14(%rcx), %dl
+	movb	%dl, 14(%rax)
+	movb	15(%rcx), %dl
+	movb	%dl, 15(%rax)
+	movb	16(%rcx), %dl
+	movb	%dl, 16(%rax)
+	movb	17(%rcx), %dl
+	movb	%dl, 17(%rax)
+	movb	18(%rcx), %dl
+	movb	%dl, 18(%rax)
+	movb	19(%rcx), %dl
+	movb	%dl, 19(%rax)
+	movb	20(%rcx), %dl
+	movb	%dl, 20(%rax)
+	movb	21(%rcx), %dl
+	movb	%dl, 21(%rax)
+	movb	22(%rcx), %dl
+	movb	%dl, 22(%rax)
+	movb	23(%rcx), %dl
+	movb	%dl, 23(%rax)
+	movb	24(%rcx), %dl
+	movb	%dl, 24(%rax)
+	movb	25(%rcx), %dl
+	movb	%dl, 25(%rax)
+	movb	26(%rcx), %dl
+	movb	%dl, 26(%rax)
+	movb	27(%rcx), %dl
+	movb	%dl, 27(%rax)
+	movb	28(%rcx), %dl
+	movb	%dl, 28(%rax)
+	movb	29(%rcx), %dl
+	movb	%dl, 29(%rax)
+	movb	30(%rcx), %dl
+	movb	%dl, 30(%rax)
+	movb	31(%rcx), %cl
+	movb	%cl, 31(%rax)
+	ret
+L_i_poly_tomsg$1:
+	call	L_poly_csubq$1
+L_i_poly_tomsg$2:
+	movb	$0, %sil
+	movw	(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	2(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	4(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	6(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	8(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	10(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	12(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	14(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, (%rax)
+	movb	$0, %sil
+	movw	16(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	18(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	20(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	22(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	24(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	26(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	28(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	30(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 1(%rax)
+	movb	$0, %sil
+	movw	32(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	34(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	36(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	38(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	40(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	42(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	44(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	46(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 2(%rax)
+	movb	$0, %sil
+	movw	48(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	50(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	52(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	54(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	56(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	58(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	60(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	62(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 3(%rax)
+	movb	$0, %sil
+	movw	64(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	66(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	68(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	70(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	72(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	74(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	76(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	78(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 4(%rax)
+	movb	$0, %sil
+	movw	80(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	82(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	84(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	86(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	88(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	90(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	92(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	94(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 5(%rax)
+	movb	$0, %sil
+	movw	96(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	98(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	100(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	102(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	104(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	106(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	108(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	110(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 6(%rax)
+	movb	$0, %sil
+	movw	112(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	114(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	116(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	118(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	120(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	122(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	124(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	126(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 7(%rax)
+	movb	$0, %sil
+	movw	128(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	130(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	132(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	134(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	136(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	138(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	140(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	142(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 8(%rax)
+	movb	$0, %sil
+	movw	144(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	146(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	148(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	150(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	152(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	154(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	156(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	158(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 9(%rax)
+	movb	$0, %sil
+	movw	160(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	162(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	164(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	166(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	168(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	170(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	172(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	174(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 10(%rax)
+	movb	$0, %sil
+	movw	176(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	178(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	180(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	182(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	184(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	186(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	188(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	190(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 11(%rax)
+	movb	$0, %sil
+	movw	192(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	194(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	196(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	198(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	200(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	202(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	204(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	206(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 12(%rax)
+	movb	$0, %sil
+	movw	208(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	210(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	212(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	214(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	216(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	218(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	220(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	222(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 13(%rax)
+	movb	$0, %sil
+	movw	224(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	226(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	228(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	230(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	232(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	234(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	236(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	238(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 14(%rax)
+	movb	$0, %sil
+	movw	240(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	242(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	244(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	246(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	248(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	250(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	252(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	254(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 15(%rax)
+	movb	$0, %sil
+	movw	256(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	258(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	260(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	262(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	264(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	266(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	268(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	270(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 16(%rax)
+	movb	$0, %sil
+	movw	272(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	274(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	276(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	278(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	280(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	282(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	284(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	286(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 17(%rax)
+	movb	$0, %sil
+	movw	288(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	290(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	292(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	294(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	296(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	298(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	300(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	302(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 18(%rax)
+	movb	$0, %sil
+	movw	304(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	306(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	308(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	310(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	312(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	314(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	316(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	318(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 19(%rax)
+	movb	$0, %sil
+	movw	320(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	322(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	324(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	326(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	328(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	330(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	332(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	334(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 20(%rax)
+	movb	$0, %sil
+	movw	336(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	338(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	340(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	342(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	344(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	346(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	348(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	350(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 21(%rax)
+	movb	$0, %sil
+	movw	352(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	354(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	356(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	358(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	360(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	362(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	364(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	366(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 22(%rax)
+	movb	$0, %sil
+	movw	368(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	370(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	372(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	374(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	376(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	378(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	380(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	382(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 23(%rax)
+	movb	$0, %sil
+	movw	384(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	386(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	388(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	390(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	392(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	394(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	396(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	398(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 24(%rax)
+	movb	$0, %sil
+	movw	400(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	402(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	404(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	406(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	408(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	410(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	412(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	414(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 25(%rax)
+	movb	$0, %sil
+	movw	416(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	418(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	420(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	422(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	424(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	426(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	428(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	430(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 26(%rax)
+	movb	$0, %sil
+	movw	432(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	434(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	436(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	438(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	440(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	442(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	444(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	446(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 27(%rax)
+	movb	$0, %sil
+	movw	448(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	450(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	452(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	454(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	456(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	458(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	460(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	462(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 28(%rax)
+	movb	$0, %sil
+	movw	464(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	466(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	468(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	470(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	472(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	474(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	476(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	478(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 29(%rax)
+	movb	$0, %sil
+	movw	480(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	482(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	484(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	486(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	488(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	490(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	492(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	494(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 30(%rax)
+	movb	$0, %sil
+	movw	496(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	498(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	500(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	502(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	504(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	506(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	508(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	510(%rcx), %cx
+	movzwl	%cx, %ecx
+	shll	$1, %ecx
+	addl	$1665, %ecx
+	imull	$80635, %ecx, %ecx
+	shrl	$28, %ecx
+	andl	$1, %ecx
+	shll	$7, %ecx
+	orb 	%cl, %sil
+	movb	%sil, 31(%rax)
+	ret
+L_poly_tobytes$1:
+	call	L_poly_csubq$1
+L_poly_tobytes$4:
+	movq	$0, %rsi
+	movq	$0, %rdi
+	jmp 	L_poly_tobytes$2
+L_poly_tobytes$3:
+	movw	(%rcx,%rsi,2), %r8w
+	incq	%rsi
+	movw	(%rcx,%rsi,2), %r9w
+	incq	%rsi
+	movw	%r8w, %r10w
+	andw	$255, %r10w
+	movb	%r10b, (%rdx,%rdi)
+	incq	%rdi
+	shrw	$8, %r8w
+	movw	%r9w, %r10w
+	andw	$15, %r10w
+	shlw	$4, %r10w
+	orw 	%r8w, %r10w
+	movb	%r10b, (%rdx,%rdi)
+	incq	%rdi
+	shrw	$4, %r9w
+	movb	%r9b, (%rdx,%rdi)
+	incq	%rdi
+L_poly_tobytes$2:
+	cmpq	$256, %rsi
+	jb  	L_poly_tobytes$3
+	ret
+L_poly_sub$1:
+	movq	$0, %r8
+	jmp 	L_poly_sub$2
+L_poly_sub$3:
+	movw	(%rsi,%r8,2), %r9w
+	movw	(%rdi,%r8,2), %r10w
+	subw	%r10w, %r9w
+	movw	%r9w, (%rcx,%r8,2)
+	incq	%r8
+L_poly_sub$2:
+	cmpq	$256, %r8
+	jb  	L_poly_sub$3
+	ret
+L_poly_ntt$1:
+	leaq	glob_data + 448(%rip), %rsi
+	movq	$0, %rdi
+	movq	$128, %r8
+	jmp 	L_poly_ntt$4
+L_poly_ntt$5:
+	movq	$0, %r11
+	jmp 	L_poly_ntt$6
+L_poly_ntt$7:
+	incq	%rdi
+	movw	(%rsi,%rdi,2), %r9w
+	movq	%r11, %r10
+	leaq	(%r11,%r8), %r11
+	jmp 	L_poly_ntt$8
+L_poly_ntt$9:
+	leaq	(%r10,%r8), %rbx
+	movw	(%rcx,%rbx,2), %bp
+	movswl	%bp, %ebp
+	movswl	%r9w, %r12d
+	imull	%r12d, %ebp
+	imull	$62209, %ebp, %r12d
+	shll	$16, %r12d
+	sarl	$16, %r12d
+	imull	$3329, %r12d, %r12d
+	subl	%r12d, %ebp
+	sarl	$16, %ebp
+	movw	(%rcx,%r10,2), %r12w
+	movw	%r12w, %r13w
+	subw	%bp, %r13w
+	movw	%r13w, (%rcx,%rbx,2)
+	addw	%r12w, %bp
+	movw	%bp, (%rcx,%r10,2)
+	incq	%r10
+L_poly_ntt$8:
+	cmpq	%r11, %r10
+	jb  	L_poly_ntt$9
+	leaq	(%r10,%r8), %r11
+L_poly_ntt$6:
+	cmpq	$256, %r11
+	jb  	L_poly_ntt$7
+	shrq	$1, %r8
+L_poly_ntt$4:
+	cmpq	$2, %r8
+	jnb 	L_poly_ntt$5
+	movq	$0, %rsi
+	jmp 	L_poly_ntt$2
+L_poly_ntt$3:
+	movw	(%rcx,%rsi,2), %di
+	movswl	%di, %r8d
+	imull	$20159, %r8d, %r8d
+	sarl	$26, %r8d
+	imull	$3329, %r8d, %r8d
+	subw	%r8w, %di
+	movw	%di, (%rcx,%rsi,2)
+	incq	%rsi
+L_poly_ntt$2:
+	cmpq	$256, %rsi
+	jb  	L_poly_ntt$3
+	ret
+L_poly_invntt$1:
+	leaq	glob_data + 192(%rip), %rsi
+	movq	$0, %rdi
+	movq	$2, %r8
+	jmp 	L_poly_invntt$4
+L_poly_invntt$5:
+	movq	$0, %r11
+	jmp 	L_poly_invntt$6
+L_poly_invntt$7:
+	movw	(%rsi,%rdi,2), %r9w
+	incq	%rdi
+	movq	%r11, %r10
+	leaq	(%r11,%r8), %r11
+	jmp 	L_poly_invntt$8
+L_poly_invntt$9:
+	leaq	(%r10,%r8), %rbx
+	movw	(%rcx,%rbx,2), %bp
+	movw	(%rcx,%r10,2), %r12w
+	movw	%bp, %r13w
+	addw	%r12w, %r13w
+	movswl	%r13w, %r14d
+	imull	$20159, %r14d, %r14d
+	sarl	$26, %r14d
+	imull	$3329, %r14d, %r14d
+	subw	%r14w, %r13w
+	movw	%r13w, (%rcx,%r10,2)
+	subw	%bp, %r12w
+	movswl	%r12w, %ebp
+	movswl	%r9w, %r12d
+	imull	%r12d, %ebp
+	imull	$62209, %ebp, %r12d
+	shll	$16, %r12d
+	sarl	$16, %r12d
+	imull	$3329, %r12d, %r12d
+	subl	%r12d, %ebp
+	sarl	$16, %ebp
+	movw	%bp, (%rcx,%rbx,2)
+	incq	%r10
+L_poly_invntt$8:
+	cmpq	%r11, %r10
+	jb  	L_poly_invntt$9
+	leaq	(%r10,%r8), %r11
+L_poly_invntt$6:
+	cmpq	$256, %r11
+	jb  	L_poly_invntt$7
+	shlq	$1, %r8
+L_poly_invntt$4:
+	cmpq	$128, %r8
+	jbe 	L_poly_invntt$5
+	movw	254(%rsi), %si
+	movq	$0, %rdi
+	jmp 	L_poly_invntt$2
+L_poly_invntt$3:
+	movw	(%rcx,%rdi,2), %r8w
+	movswl	%r8w, %r8d
+	movswl	%si, %r9d
+	imull	%r9d, %r8d
+	imull	$62209, %r8d, %r9d
+	shll	$16, %r9d
+	sarl	$16, %r9d
+	imull	$3329, %r9d, %r9d
+	subl	%r9d, %r8d
+	sarl	$16, %r8d
+	movw	%r8w, (%rcx,%rdi,2)
+	incq	%rdi
+L_poly_invntt$2:
+	cmpq	$256, %rdi
+	jb  	L_poly_invntt$3
+	ret
+L_poly_getnoise_eta2$1:
+	movq	%rdx, 8(%rsp)
+	movb	(%rax), %dl
+	movb	%dl, 16(%rsp)
+	movb	1(%rax), %dl
+	movb	%dl, 17(%rsp)
+	movb	2(%rax), %dl
+	movb	%dl, 18(%rsp)
+	movb	3(%rax), %dl
+	movb	%dl, 19(%rsp)
+	movb	4(%rax), %dl
+	movb	%dl, 20(%rsp)
+	movb	5(%rax), %dl
+	movb	%dl, 21(%rsp)
+	movb	6(%rax), %dl
+	movb	%dl, 22(%rsp)
+	movb	7(%rax), %dl
+	movb	%dl, 23(%rsp)
+	movb	8(%rax), %dl
+	movb	%dl, 24(%rsp)
+	movb	9(%rax), %dl
+	movb	%dl, 25(%rsp)
+	movb	10(%rax), %dl
+	movb	%dl, 26(%rsp)
+	movb	11(%rax), %dl
+	movb	%dl, 27(%rsp)
+	movb	12(%rax), %dl
+	movb	%dl, 28(%rsp)
+	movb	13(%rax), %dl
+	movb	%dl, 29(%rsp)
+	movb	14(%rax), %dl
+	movb	%dl, 30(%rsp)
+	movb	15(%rax), %dl
+	movb	%dl, 31(%rsp)
+	movb	16(%rax), %dl
+	movb	%dl, 32(%rsp)
+	movb	17(%rax), %dl
+	movb	%dl, 33(%rsp)
+	movb	18(%rax), %dl
+	movb	%dl, 34(%rsp)
+	movb	19(%rax), %dl
+	movb	%dl, 35(%rsp)
+	movb	20(%rax), %dl
+	movb	%dl, 36(%rsp)
+	movb	21(%rax), %dl
+	movb	%dl, 37(%rsp)
+	movb	22(%rax), %dl
+	movb	%dl, 38(%rsp)
+	movb	23(%rax), %dl
+	movb	%dl, 39(%rsp)
+	movb	24(%rax), %dl
+	movb	%dl, 40(%rsp)
+	movb	25(%rax), %dl
+	movb	%dl, 41(%rsp)
+	movb	26(%rax), %dl
+	movb	%dl, 42(%rsp)
+	movb	27(%rax), %dl
+	movb	%dl, 43(%rsp)
+	movb	28(%rax), %dl
+	movb	%dl, 44(%rsp)
+	movb	29(%rax), %dl
+	movb	%dl, 45(%rsp)
+	movb	30(%rax), %dl
+	movb	%dl, 46(%rsp)
+	movb	31(%rax), %al
+	movb	%al, 47(%rsp)
+	movb	%cl, 48(%rsp)
+	leaq	49(%rsp), %rax
+	leaq	16(%rsp), %rcx
+	leaq	-208(%rsp), %rsp
+	call	L_shake256_128_33$1
+L_poly_getnoise_eta2$4:
+	leaq	208(%rsp), %rsp
+	movq	8(%rsp), %rax
+	leaq	49(%rsp), %rcx
+	movq	$0, %rdx
+	movq	$0, %rsi
+	jmp 	L_poly_getnoise_eta2$2
+L_poly_getnoise_eta2$3:
+	movb	(%rcx,%rdx), %dil
+	movb	%dil, %r8b
+	andb	$85, %r8b
+	shrb	$1, %dil
+	andb	$85, %dil
+	addb	%r8b, %dil
+	movb	%dil, %r8b
+	andb	$3, %r8b
+	movb	%dil, %r9b
+	shrb	$2, %r9b
+	andb	$3, %r9b
+	subb	%r9b, %r8b
+	movsbw	%r8b, %r8w
+	movw	%r8w, (%rax,%rsi,2)
+	movb	%dil, %r8b
+	shrb	$4, %r8b
+	andb	$3, %r8b
+	shrb	$6, %dil
+	andb	$3, %dil
+	subb	%dil, %r8b
+	movsbw	%r8b, %di
+	incq	%rsi
+	movw	%di, (%rax,%rsi,2)
+	incq	%rdx
+	incq	%rsi
+L_poly_getnoise_eta2$2:
+	cmpq	$128, %rdx
+	jb  	L_poly_getnoise_eta2$3
+	ret
+L_poly_getnoise_eta1$1:
+	movq	%rdx, 8(%rsp)
+	movb	(%rcx), %dl
+	movb	%dl, 16(%rsp)
+	movb	1(%rcx), %dl
+	movb	%dl, 17(%rsp)
+	movb	2(%rcx), %dl
+	movb	%dl, 18(%rsp)
+	movb	3(%rcx), %dl
+	movb	%dl, 19(%rsp)
+	movb	4(%rcx), %dl
+	movb	%dl, 20(%rsp)
+	movb	5(%rcx), %dl
+	movb	%dl, 21(%rsp)
+	movb	6(%rcx), %dl
+	movb	%dl, 22(%rsp)
+	movb	7(%rcx), %dl
+	movb	%dl, 23(%rsp)
+	movb	8(%rcx), %dl
+	movb	%dl, 24(%rsp)
+	movb	9(%rcx), %dl
+	movb	%dl, 25(%rsp)
+	movb	10(%rcx), %dl
+	movb	%dl, 26(%rsp)
+	movb	11(%rcx), %dl
+	movb	%dl, 27(%rsp)
+	movb	12(%rcx), %dl
+	movb	%dl, 28(%rsp)
+	movb	13(%rcx), %dl
+	movb	%dl, 29(%rsp)
+	movb	14(%rcx), %dl
+	movb	%dl, 30(%rsp)
+	movb	15(%rcx), %dl
+	movb	%dl, 31(%rsp)
+	movb	16(%rcx), %dl
+	movb	%dl, 32(%rsp)
+	movb	17(%rcx), %dl
+	movb	%dl, 33(%rsp)
+	movb	18(%rcx), %dl
+	movb	%dl, 34(%rsp)
+	movb	19(%rcx), %dl
+	movb	%dl, 35(%rsp)
+	movb	20(%rcx), %dl
+	movb	%dl, 36(%rsp)
+	movb	21(%rcx), %dl
+	movb	%dl, 37(%rsp)
+	movb	22(%rcx), %dl
+	movb	%dl, 38(%rsp)
+	movb	23(%rcx), %dl
+	movb	%dl, 39(%rsp)
+	movb	24(%rcx), %dl
+	movb	%dl, 40(%rsp)
+	movb	25(%rcx), %dl
+	movb	%dl, 41(%rsp)
+	movb	26(%rcx), %dl
+	movb	%dl, 42(%rsp)
+	movb	27(%rcx), %dl
+	movb	%dl, 43(%rsp)
+	movb	28(%rcx), %dl
+	movb	%dl, 44(%rsp)
+	movb	29(%rcx), %dl
+	movb	%dl, 45(%rsp)
+	movb	30(%rcx), %dl
+	movb	%dl, 46(%rsp)
+	movb	31(%rcx), %cl
+	movb	%cl, 47(%rsp)
+	movb	%al, 48(%rsp)
+	leaq	49(%rsp), %rax
+	leaq	16(%rsp), %rcx
+	leaq	-208(%rsp), %rsp
+	call	L_shake256_192_33$1
+L_poly_getnoise_eta1$4:
+	leaq	208(%rsp), %rsp
+	movq	8(%rsp), %rax
+	leaq	49(%rsp), %rcx
+	movq	$0, %rdx
+	movq	$0, %rsi
+	jmp 	L_poly_getnoise_eta1$2
+L_poly_getnoise_eta1$3:
+	imulq	$3, %rdx, %r8
+	movzbl	(%rcx,%r8), %edi
+	movzbl	1(%rcx,%r8), %r9d
+	shll	$8, %r9d
+	orl 	%r9d, %edi
+	movzbl	2(%rcx,%r8), %r8d
+	shll	$16, %r8d
+	orl 	%r8d, %edi
+	movl	%edi, %r8d
+	andl	$2396745, %r8d
+	shrl	$1, %edi
+	movl	%edi, %r9d
+	andl	$2396745, %r9d
+	addl	%r9d, %r8d
+	shrl	$1, %edi
+	andl	$2396745, %edi
+	addl	%r8d, %edi
+	movb	%dil, %r8b
+	andb	$7, %r8b
+	movb	%dil, %r9b
+	shrb	$3, %r9b
+	andb	$7, %r9b
+	subb	%r9b, %r8b
+	movsbw	%r8b, %r8w
+	movw	%r8w, (%rax,%rsi,2)
+	shrl	$6, %edi
+	incq	%rsi
+	movb	%dil, %r8b
+	andb	$7, %r8b
+	movb	%dil, %r9b
+	shrb	$3, %r9b
+	andb	$7, %r9b
+	subb	%r9b, %r8b
+	movsbw	%r8b, %r8w
+	movw	%r8w, (%rax,%rsi,2)
+	shrl	$6, %edi
+	incq	%rsi
+	movb	%dil, %r8b
+	andb	$7, %r8b
+	movb	%dil, %r9b
+	shrb	$3, %r9b
+	andb	$7, %r9b
+	subb	%r9b, %r8b
+	movsbw	%r8b, %r8w
+	movw	%r8w, (%rax,%rsi,2)
+	shrl	$6, %edi
+	incq	%rsi
+	movb	%dil, %r8b
+	andb	$7, %r8b
+	shrb	$3, %dil
+	andb	$7, %dil
+	subb	%dil, %r8b
+	movsbw	%r8b, %di
+	movw	%di, (%rax,%rsi,2)
+	incq	%rsi
+	incq	%rdx
+L_poly_getnoise_eta1$2:
+	cmpq	$64, %rdx
+	jb  	L_poly_getnoise_eta1$3
+	ret
+L_i_poly_frommsg$1:
+	movb	(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, (%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 2(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 4(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 6(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 8(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 10(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 12(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 14(%rdx)
+	movb	1(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 16(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 18(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 20(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 22(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 24(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 26(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 28(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 30(%rdx)
+	movb	2(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 32(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 34(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 36(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 38(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 40(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 42(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 44(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 46(%rdx)
+	movb	3(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 48(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 50(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 52(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 54(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 56(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 58(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 60(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 62(%rdx)
+	movb	4(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 64(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 66(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 68(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 70(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 72(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 74(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 76(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 78(%rdx)
+	movb	5(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 80(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 82(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 84(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 86(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 88(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 90(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 92(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 94(%rdx)
+	movb	6(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 96(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 98(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 100(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 102(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 104(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 106(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 108(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 110(%rdx)
+	movb	7(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 112(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 114(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 116(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 118(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 120(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 122(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 124(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 126(%rdx)
+	movb	8(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 128(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 130(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 132(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 134(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 136(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 138(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 140(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 142(%rdx)
+	movb	9(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 144(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 146(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 148(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 150(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 152(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 154(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 156(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 158(%rdx)
+	movb	10(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 160(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 162(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 164(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 166(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 168(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 170(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 172(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 174(%rdx)
+	movb	11(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 176(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 178(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 180(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 182(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 184(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 186(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 188(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 190(%rdx)
+	movb	12(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 192(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 194(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 196(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 198(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 200(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 202(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 204(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 206(%rdx)
+	movb	13(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 208(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 210(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 212(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 214(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 216(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 218(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 220(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 222(%rdx)
+	movb	14(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 224(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 226(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 228(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 230(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 232(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 234(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 236(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 238(%rdx)
+	movb	15(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 240(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 242(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 244(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 246(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 248(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 250(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 252(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 254(%rdx)
+	movb	16(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 256(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 258(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 260(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 262(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 264(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 266(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 268(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 270(%rdx)
+	movb	17(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 272(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 274(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 276(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 278(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 280(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 282(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 284(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 286(%rdx)
+	movb	18(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 288(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 290(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 292(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 294(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 296(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 298(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 300(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 302(%rdx)
+	movb	19(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 304(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 306(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 308(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 310(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 312(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 314(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 316(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 318(%rdx)
+	movb	20(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 320(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 322(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 324(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 326(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 328(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 330(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 332(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 334(%rdx)
+	movb	21(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 336(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 338(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 340(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 342(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 344(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 346(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 348(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 350(%rdx)
+	movb	22(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 352(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 354(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 356(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 358(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 360(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 362(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 364(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 366(%rdx)
+	movb	23(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 368(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 370(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 372(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 374(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 376(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 378(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 380(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 382(%rdx)
+	movb	24(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 384(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 386(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 388(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 390(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 392(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 394(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 396(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 398(%rdx)
+	movb	25(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 400(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 402(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 404(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 406(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 408(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 410(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 412(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 414(%rdx)
+	movb	26(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 416(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 418(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 420(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 422(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 424(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 426(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 428(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 430(%rdx)
+	movb	27(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 432(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 434(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 436(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 438(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 440(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 442(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 444(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 446(%rdx)
+	movb	28(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 448(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 450(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 452(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 454(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 456(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 458(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 460(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 462(%rdx)
+	movb	29(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 464(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 466(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 468(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 470(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 472(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 474(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 476(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 478(%rdx)
+	movb	30(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 480(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 482(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 484(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 486(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 488(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 490(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 492(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 494(%rdx)
+	movb	31(%rcx), %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 496(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 498(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 500(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 502(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 504(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 506(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 508(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %cx
+	andw	$1, %cx
+	imulw	$1665, %cx, %cx
+	movw	%cx, 510(%rdx)
+	ret
+L_poly_frommont$1:
+	movw	$1353, %cx
+	movq	$0, %rdx
+	jmp 	L_poly_frommont$2
+L_poly_frommont$3:
+	movw	(%rax,%rdx,2), %si
+	movswl	%si, %esi
+	movswl	%cx, %edi
+	imull	%edi, %esi
+	imull	$62209, %esi, %edi
+	shll	$16, %edi
+	sarl	$16, %edi
+	imull	$3329, %edi, %edi
+	subl	%edi, %esi
+	sarl	$16, %esi
+	movw	%si, (%rax,%rdx,2)
+	incq	%rdx
+L_poly_frommont$2:
+	cmpq	$256, %rdx
+	jb  	L_poly_frommont$3
+	ret
+L_poly_frombytes$1:
+	movb	(%rsi), %r8b
+	movb	1(%rsi), %r9b
+	movb	2(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, (%rdi)
+	movw	%r10w, 2(%rdi)
+	movb	3(%rsi), %r8b
+	movb	4(%rsi), %r9b
+	movb	5(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 4(%rdi)
+	movw	%r10w, 6(%rdi)
+	movb	6(%rsi), %r8b
+	movb	7(%rsi), %r9b
+	movb	8(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 8(%rdi)
+	movw	%r10w, 10(%rdi)
+	movb	9(%rsi), %r8b
+	movb	10(%rsi), %r9b
+	movb	11(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 12(%rdi)
+	movw	%r10w, 14(%rdi)
+	movb	12(%rsi), %r8b
+	movb	13(%rsi), %r9b
+	movb	14(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 16(%rdi)
+	movw	%r10w, 18(%rdi)
+	movb	15(%rsi), %r8b
+	movb	16(%rsi), %r9b
+	movb	17(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 20(%rdi)
+	movw	%r10w, 22(%rdi)
+	movb	18(%rsi), %r8b
+	movb	19(%rsi), %r9b
+	movb	20(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 24(%rdi)
+	movw	%r10w, 26(%rdi)
+	movb	21(%rsi), %r8b
+	movb	22(%rsi), %r9b
+	movb	23(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 28(%rdi)
+	movw	%r10w, 30(%rdi)
+	movb	24(%rsi), %r8b
+	movb	25(%rsi), %r9b
+	movb	26(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 32(%rdi)
+	movw	%r10w, 34(%rdi)
+	movb	27(%rsi), %r8b
+	movb	28(%rsi), %r9b
+	movb	29(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 36(%rdi)
+	movw	%r10w, 38(%rdi)
+	movb	30(%rsi), %r8b
+	movb	31(%rsi), %r9b
+	movb	32(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 40(%rdi)
+	movw	%r10w, 42(%rdi)
+	movb	33(%rsi), %r8b
+	movb	34(%rsi), %r9b
+	movb	35(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 44(%rdi)
+	movw	%r10w, 46(%rdi)
+	movb	36(%rsi), %r8b
+	movb	37(%rsi), %r9b
+	movb	38(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 48(%rdi)
+	movw	%r10w, 50(%rdi)
+	movb	39(%rsi), %r8b
+	movb	40(%rsi), %r9b
+	movb	41(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 52(%rdi)
+	movw	%r10w, 54(%rdi)
+	movb	42(%rsi), %r8b
+	movb	43(%rsi), %r9b
+	movb	44(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 56(%rdi)
+	movw	%r10w, 58(%rdi)
+	movb	45(%rsi), %r8b
+	movb	46(%rsi), %r9b
+	movb	47(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 60(%rdi)
+	movw	%r10w, 62(%rdi)
+	movb	48(%rsi), %r8b
+	movb	49(%rsi), %r9b
+	movb	50(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 64(%rdi)
+	movw	%r10w, 66(%rdi)
+	movb	51(%rsi), %r8b
+	movb	52(%rsi), %r9b
+	movb	53(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 68(%rdi)
+	movw	%r10w, 70(%rdi)
+	movb	54(%rsi), %r8b
+	movb	55(%rsi), %r9b
+	movb	56(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 72(%rdi)
+	movw	%r10w, 74(%rdi)
+	movb	57(%rsi), %r8b
+	movb	58(%rsi), %r9b
+	movb	59(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 76(%rdi)
+	movw	%r10w, 78(%rdi)
+	movb	60(%rsi), %r8b
+	movb	61(%rsi), %r9b
+	movb	62(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 80(%rdi)
+	movw	%r10w, 82(%rdi)
+	movb	63(%rsi), %r8b
+	movb	64(%rsi), %r9b
+	movb	65(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 84(%rdi)
+	movw	%r10w, 86(%rdi)
+	movb	66(%rsi), %r8b
+	movb	67(%rsi), %r9b
+	movb	68(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 88(%rdi)
+	movw	%r10w, 90(%rdi)
+	movb	69(%rsi), %r8b
+	movb	70(%rsi), %r9b
+	movb	71(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 92(%rdi)
+	movw	%r10w, 94(%rdi)
+	movb	72(%rsi), %r8b
+	movb	73(%rsi), %r9b
+	movb	74(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 96(%rdi)
+	movw	%r10w, 98(%rdi)
+	movb	75(%rsi), %r8b
+	movb	76(%rsi), %r9b
+	movb	77(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 100(%rdi)
+	movw	%r10w, 102(%rdi)
+	movb	78(%rsi), %r8b
+	movb	79(%rsi), %r9b
+	movb	80(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 104(%rdi)
+	movw	%r10w, 106(%rdi)
+	movb	81(%rsi), %r8b
+	movb	82(%rsi), %r9b
+	movb	83(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 108(%rdi)
+	movw	%r10w, 110(%rdi)
+	movb	84(%rsi), %r8b
+	movb	85(%rsi), %r9b
+	movb	86(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 112(%rdi)
+	movw	%r10w, 114(%rdi)
+	movb	87(%rsi), %r8b
+	movb	88(%rsi), %r9b
+	movb	89(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 116(%rdi)
+	movw	%r10w, 118(%rdi)
+	movb	90(%rsi), %r8b
+	movb	91(%rsi), %r9b
+	movb	92(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 120(%rdi)
+	movw	%r10w, 122(%rdi)
+	movb	93(%rsi), %r8b
+	movb	94(%rsi), %r9b
+	movb	95(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 124(%rdi)
+	movw	%r10w, 126(%rdi)
+	movb	96(%rsi), %r8b
+	movb	97(%rsi), %r9b
+	movb	98(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 128(%rdi)
+	movw	%r10w, 130(%rdi)
+	movb	99(%rsi), %r8b
+	movb	100(%rsi), %r9b
+	movb	101(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 132(%rdi)
+	movw	%r10w, 134(%rdi)
+	movb	102(%rsi), %r8b
+	movb	103(%rsi), %r9b
+	movb	104(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 136(%rdi)
+	movw	%r10w, 138(%rdi)
+	movb	105(%rsi), %r8b
+	movb	106(%rsi), %r9b
+	movb	107(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 140(%rdi)
+	movw	%r10w, 142(%rdi)
+	movb	108(%rsi), %r8b
+	movb	109(%rsi), %r9b
+	movb	110(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 144(%rdi)
+	movw	%r10w, 146(%rdi)
+	movb	111(%rsi), %r8b
+	movb	112(%rsi), %r9b
+	movb	113(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 148(%rdi)
+	movw	%r10w, 150(%rdi)
+	movb	114(%rsi), %r8b
+	movb	115(%rsi), %r9b
+	movb	116(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 152(%rdi)
+	movw	%r10w, 154(%rdi)
+	movb	117(%rsi), %r8b
+	movb	118(%rsi), %r9b
+	movb	119(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 156(%rdi)
+	movw	%r10w, 158(%rdi)
+	movb	120(%rsi), %r8b
+	movb	121(%rsi), %r9b
+	movb	122(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 160(%rdi)
+	movw	%r10w, 162(%rdi)
+	movb	123(%rsi), %r8b
+	movb	124(%rsi), %r9b
+	movb	125(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 164(%rdi)
+	movw	%r10w, 166(%rdi)
+	movb	126(%rsi), %r8b
+	movb	127(%rsi), %r9b
+	movb	128(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 168(%rdi)
+	movw	%r10w, 170(%rdi)
+	movb	129(%rsi), %r8b
+	movb	130(%rsi), %r9b
+	movb	131(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 172(%rdi)
+	movw	%r10w, 174(%rdi)
+	movb	132(%rsi), %r8b
+	movb	133(%rsi), %r9b
+	movb	134(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 176(%rdi)
+	movw	%r10w, 178(%rdi)
+	movb	135(%rsi), %r8b
+	movb	136(%rsi), %r9b
+	movb	137(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 180(%rdi)
+	movw	%r10w, 182(%rdi)
+	movb	138(%rsi), %r8b
+	movb	139(%rsi), %r9b
+	movb	140(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 184(%rdi)
+	movw	%r10w, 186(%rdi)
+	movb	141(%rsi), %r8b
+	movb	142(%rsi), %r9b
+	movb	143(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 188(%rdi)
+	movw	%r10w, 190(%rdi)
+	movb	144(%rsi), %r8b
+	movb	145(%rsi), %r9b
+	movb	146(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 192(%rdi)
+	movw	%r10w, 194(%rdi)
+	movb	147(%rsi), %r8b
+	movb	148(%rsi), %r9b
+	movb	149(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 196(%rdi)
+	movw	%r10w, 198(%rdi)
+	movb	150(%rsi), %r8b
+	movb	151(%rsi), %r9b
+	movb	152(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 200(%rdi)
+	movw	%r10w, 202(%rdi)
+	movb	153(%rsi), %r8b
+	movb	154(%rsi), %r9b
+	movb	155(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 204(%rdi)
+	movw	%r10w, 206(%rdi)
+	movb	156(%rsi), %r8b
+	movb	157(%rsi), %r9b
+	movb	158(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 208(%rdi)
+	movw	%r10w, 210(%rdi)
+	movb	159(%rsi), %r8b
+	movb	160(%rsi), %r9b
+	movb	161(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 212(%rdi)
+	movw	%r10w, 214(%rdi)
+	movb	162(%rsi), %r8b
+	movb	163(%rsi), %r9b
+	movb	164(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 216(%rdi)
+	movw	%r10w, 218(%rdi)
+	movb	165(%rsi), %r8b
+	movb	166(%rsi), %r9b
+	movb	167(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 220(%rdi)
+	movw	%r10w, 222(%rdi)
+	movb	168(%rsi), %r8b
+	movb	169(%rsi), %r9b
+	movb	170(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 224(%rdi)
+	movw	%r10w, 226(%rdi)
+	movb	171(%rsi), %r8b
+	movb	172(%rsi), %r9b
+	movb	173(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 228(%rdi)
+	movw	%r10w, 230(%rdi)
+	movb	174(%rsi), %r8b
+	movb	175(%rsi), %r9b
+	movb	176(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 232(%rdi)
+	movw	%r10w, 234(%rdi)
+	movb	177(%rsi), %r8b
+	movb	178(%rsi), %r9b
+	movb	179(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 236(%rdi)
+	movw	%r10w, 238(%rdi)
+	movb	180(%rsi), %r8b
+	movb	181(%rsi), %r9b
+	movb	182(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 240(%rdi)
+	movw	%r10w, 242(%rdi)
+	movb	183(%rsi), %r8b
+	movb	184(%rsi), %r9b
+	movb	185(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 244(%rdi)
+	movw	%r10w, 246(%rdi)
+	movb	186(%rsi), %r8b
+	movb	187(%rsi), %r9b
+	movb	188(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 248(%rdi)
+	movw	%r10w, 250(%rdi)
+	movb	189(%rsi), %r8b
+	movb	190(%rsi), %r9b
+	movb	191(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 252(%rdi)
+	movw	%r10w, 254(%rdi)
+	movb	192(%rsi), %r8b
+	movb	193(%rsi), %r9b
+	movb	194(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 256(%rdi)
+	movw	%r10w, 258(%rdi)
+	movb	195(%rsi), %r8b
+	movb	196(%rsi), %r9b
+	movb	197(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 260(%rdi)
+	movw	%r10w, 262(%rdi)
+	movb	198(%rsi), %r8b
+	movb	199(%rsi), %r9b
+	movb	200(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 264(%rdi)
+	movw	%r10w, 266(%rdi)
+	movb	201(%rsi), %r8b
+	movb	202(%rsi), %r9b
+	movb	203(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 268(%rdi)
+	movw	%r10w, 270(%rdi)
+	movb	204(%rsi), %r8b
+	movb	205(%rsi), %r9b
+	movb	206(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 272(%rdi)
+	movw	%r10w, 274(%rdi)
+	movb	207(%rsi), %r8b
+	movb	208(%rsi), %r9b
+	movb	209(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 276(%rdi)
+	movw	%r10w, 278(%rdi)
+	movb	210(%rsi), %r8b
+	movb	211(%rsi), %r9b
+	movb	212(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 280(%rdi)
+	movw	%r10w, 282(%rdi)
+	movb	213(%rsi), %r8b
+	movb	214(%rsi), %r9b
+	movb	215(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 284(%rdi)
+	movw	%r10w, 286(%rdi)
+	movb	216(%rsi), %r8b
+	movb	217(%rsi), %r9b
+	movb	218(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 288(%rdi)
+	movw	%r10w, 290(%rdi)
+	movb	219(%rsi), %r8b
+	movb	220(%rsi), %r9b
+	movb	221(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 292(%rdi)
+	movw	%r10w, 294(%rdi)
+	movb	222(%rsi), %r8b
+	movb	223(%rsi), %r9b
+	movb	224(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 296(%rdi)
+	movw	%r10w, 298(%rdi)
+	movb	225(%rsi), %r8b
+	movb	226(%rsi), %r9b
+	movb	227(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 300(%rdi)
+	movw	%r10w, 302(%rdi)
+	movb	228(%rsi), %r8b
+	movb	229(%rsi), %r9b
+	movb	230(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 304(%rdi)
+	movw	%r10w, 306(%rdi)
+	movb	231(%rsi), %r8b
+	movb	232(%rsi), %r9b
+	movb	233(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 308(%rdi)
+	movw	%r10w, 310(%rdi)
+	movb	234(%rsi), %r8b
+	movb	235(%rsi), %r9b
+	movb	236(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 312(%rdi)
+	movw	%r10w, 314(%rdi)
+	movb	237(%rsi), %r8b
+	movb	238(%rsi), %r9b
+	movb	239(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 316(%rdi)
+	movw	%r10w, 318(%rdi)
+	movb	240(%rsi), %r8b
+	movb	241(%rsi), %r9b
+	movb	242(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 320(%rdi)
+	movw	%r10w, 322(%rdi)
+	movb	243(%rsi), %r8b
+	movb	244(%rsi), %r9b
+	movb	245(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 324(%rdi)
+	movw	%r10w, 326(%rdi)
+	movb	246(%rsi), %r8b
+	movb	247(%rsi), %r9b
+	movb	248(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 328(%rdi)
+	movw	%r10w, 330(%rdi)
+	movb	249(%rsi), %r8b
+	movb	250(%rsi), %r9b
+	movb	251(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 332(%rdi)
+	movw	%r10w, 334(%rdi)
+	movb	252(%rsi), %r8b
+	movb	253(%rsi), %r9b
+	movb	254(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 336(%rdi)
+	movw	%r10w, 338(%rdi)
+	movb	255(%rsi), %r8b
+	movb	256(%rsi), %r9b
+	movb	257(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 340(%rdi)
+	movw	%r10w, 342(%rdi)
+	movb	258(%rsi), %r8b
+	movb	259(%rsi), %r9b
+	movb	260(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 344(%rdi)
+	movw	%r10w, 346(%rdi)
+	movb	261(%rsi), %r8b
+	movb	262(%rsi), %r9b
+	movb	263(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 348(%rdi)
+	movw	%r10w, 350(%rdi)
+	movb	264(%rsi), %r8b
+	movb	265(%rsi), %r9b
+	movb	266(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 352(%rdi)
+	movw	%r10w, 354(%rdi)
+	movb	267(%rsi), %r8b
+	movb	268(%rsi), %r9b
+	movb	269(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 356(%rdi)
+	movw	%r10w, 358(%rdi)
+	movb	270(%rsi), %r8b
+	movb	271(%rsi), %r9b
+	movb	272(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 360(%rdi)
+	movw	%r10w, 362(%rdi)
+	movb	273(%rsi), %r8b
+	movb	274(%rsi), %r9b
+	movb	275(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 364(%rdi)
+	movw	%r10w, 366(%rdi)
+	movb	276(%rsi), %r8b
+	movb	277(%rsi), %r9b
+	movb	278(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 368(%rdi)
+	movw	%r10w, 370(%rdi)
+	movb	279(%rsi), %r8b
+	movb	280(%rsi), %r9b
+	movb	281(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 372(%rdi)
+	movw	%r10w, 374(%rdi)
+	movb	282(%rsi), %r8b
+	movb	283(%rsi), %r9b
+	movb	284(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 376(%rdi)
+	movw	%r10w, 378(%rdi)
+	movb	285(%rsi), %r8b
+	movb	286(%rsi), %r9b
+	movb	287(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 380(%rdi)
+	movw	%r10w, 382(%rdi)
+	movb	288(%rsi), %r8b
+	movb	289(%rsi), %r9b
+	movb	290(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 384(%rdi)
+	movw	%r10w, 386(%rdi)
+	movb	291(%rsi), %r8b
+	movb	292(%rsi), %r9b
+	movb	293(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 388(%rdi)
+	movw	%r10w, 390(%rdi)
+	movb	294(%rsi), %r8b
+	movb	295(%rsi), %r9b
+	movb	296(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 392(%rdi)
+	movw	%r10w, 394(%rdi)
+	movb	297(%rsi), %r8b
+	movb	298(%rsi), %r9b
+	movb	299(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 396(%rdi)
+	movw	%r10w, 398(%rdi)
+	movb	300(%rsi), %r8b
+	movb	301(%rsi), %r9b
+	movb	302(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 400(%rdi)
+	movw	%r10w, 402(%rdi)
+	movb	303(%rsi), %r8b
+	movb	304(%rsi), %r9b
+	movb	305(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 404(%rdi)
+	movw	%r10w, 406(%rdi)
+	movb	306(%rsi), %r8b
+	movb	307(%rsi), %r9b
+	movb	308(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 408(%rdi)
+	movw	%r10w, 410(%rdi)
+	movb	309(%rsi), %r8b
+	movb	310(%rsi), %r9b
+	movb	311(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 412(%rdi)
+	movw	%r10w, 414(%rdi)
+	movb	312(%rsi), %r8b
+	movb	313(%rsi), %r9b
+	movb	314(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 416(%rdi)
+	movw	%r10w, 418(%rdi)
+	movb	315(%rsi), %r8b
+	movb	316(%rsi), %r9b
+	movb	317(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 420(%rdi)
+	movw	%r10w, 422(%rdi)
+	movb	318(%rsi), %r8b
+	movb	319(%rsi), %r9b
+	movb	320(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 424(%rdi)
+	movw	%r10w, 426(%rdi)
+	movb	321(%rsi), %r8b
+	movb	322(%rsi), %r9b
+	movb	323(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 428(%rdi)
+	movw	%r10w, 430(%rdi)
+	movb	324(%rsi), %r8b
+	movb	325(%rsi), %r9b
+	movb	326(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 432(%rdi)
+	movw	%r10w, 434(%rdi)
+	movb	327(%rsi), %r8b
+	movb	328(%rsi), %r9b
+	movb	329(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 436(%rdi)
+	movw	%r10w, 438(%rdi)
+	movb	330(%rsi), %r8b
+	movb	331(%rsi), %r9b
+	movb	332(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 440(%rdi)
+	movw	%r10w, 442(%rdi)
+	movb	333(%rsi), %r8b
+	movb	334(%rsi), %r9b
+	movb	335(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 444(%rdi)
+	movw	%r10w, 446(%rdi)
+	movb	336(%rsi), %r8b
+	movb	337(%rsi), %r9b
+	movb	338(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 448(%rdi)
+	movw	%r10w, 450(%rdi)
+	movb	339(%rsi), %r8b
+	movb	340(%rsi), %r9b
+	movb	341(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 452(%rdi)
+	movw	%r10w, 454(%rdi)
+	movb	342(%rsi), %r8b
+	movb	343(%rsi), %r9b
+	movb	344(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 456(%rdi)
+	movw	%r10w, 458(%rdi)
+	movb	345(%rsi), %r8b
+	movb	346(%rsi), %r9b
+	movb	347(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 460(%rdi)
+	movw	%r10w, 462(%rdi)
+	movb	348(%rsi), %r8b
+	movb	349(%rsi), %r9b
+	movb	350(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 464(%rdi)
+	movw	%r10w, 466(%rdi)
+	movb	351(%rsi), %r8b
+	movb	352(%rsi), %r9b
+	movb	353(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 468(%rdi)
+	movw	%r10w, 470(%rdi)
+	movb	354(%rsi), %r8b
+	movb	355(%rsi), %r9b
+	movb	356(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 472(%rdi)
+	movw	%r10w, 474(%rdi)
+	movb	357(%rsi), %r8b
+	movb	358(%rsi), %r9b
+	movb	359(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 476(%rdi)
+	movw	%r10w, 478(%rdi)
+	movb	360(%rsi), %r8b
+	movb	361(%rsi), %r9b
+	movb	362(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 480(%rdi)
+	movw	%r10w, 482(%rdi)
+	movb	363(%rsi), %r8b
+	movb	364(%rsi), %r9b
+	movb	365(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 484(%rdi)
+	movw	%r10w, 486(%rdi)
+	movb	366(%rsi), %r8b
+	movb	367(%rsi), %r9b
+	movb	368(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 488(%rdi)
+	movw	%r10w, 490(%rdi)
+	movb	369(%rsi), %r8b
+	movb	370(%rsi), %r9b
+	movb	371(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 492(%rdi)
+	movw	%r10w, 494(%rdi)
+	movb	372(%rsi), %r8b
+	movb	373(%rsi), %r9b
+	movb	374(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 496(%rdi)
+	movw	%r10w, 498(%rdi)
+	movb	375(%rsi), %r8b
+	movb	376(%rsi), %r9b
+	movb	377(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 500(%rdi)
+	movw	%r10w, 502(%rdi)
+	movb	378(%rsi), %r8b
+	movb	379(%rsi), %r9b
+	movb	380(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 504(%rdi)
+	movw	%r10w, 506(%rdi)
+	movb	381(%rsi), %r8b
+	movb	382(%rsi), %r9b
+	movb	383(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 508(%rdi)
+	movw	%r10w, 510(%rdi)
+	ret
+L_poly_decompress$1:
+	movq	$0, %rdi
+	movq	$0, %r8
+	jmp 	L_poly_decompress$2
+L_poly_decompress$3:
+	movb	(%rsi,%rdi), %r9b
+	movzbw	%r9b, %r10w
+	movzbw	%r9b, %r9w
+	andw	$15, %r10w
+	shrw	$4, %r9w
+	imulw	$3329, %r10w, %r10w
+	imulw	$3329, %r9w, %r9w
+	addw	$8, %r10w
+	addw	$8, %r9w
+	shrw	$4, %r10w
+	shrw	$4, %r9w
+	movw	%r10w, (%rcx,%r8,2)
+	incq	%r8
+	movw	%r9w, (%rcx,%r8,2)
+	incq	%r8
+	incq	%rdi
+L_poly_decompress$2:
+	cmpq	$128, %rdi
+	jb  	L_poly_decompress$3
+	ret
+L_i_poly_compress$1:
+	call	L_poly_csubq$1
+L_i_poly_compress$4:
+	movq	$0, %rdx
+	movq	$0, %rsi
+	jmp 	L_i_poly_compress$2
+L_i_poly_compress$3:
+	movw	(%rcx,%rsi,2), %di
+	movzwl	%di, %edi
+	shll	$4, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$15, %edi
+	incq	%rsi
+	movw	(%rcx,%rsi,2), %r8w
+	movzwl	%r8w, %r8d
+	shll	$4, %r8d
+	addl	$1665, %r8d
+	imull	$80635, %r8d, %r8d
+	shrl	$28, %r8d
+	andl	$15, %r8d
+	shll	$4, %r8d
+	orl 	%r8d, %edi
+	movb	%dil, (%rax,%rdx)
+	incq	%rdx
+	incq	%rsi
+L_i_poly_compress$2:
+	cmpq	$128, %rdx
+	jb  	L_i_poly_compress$3
+	ret
+L_poly_compress$1:
+	call	L_poly_csubq$1
+L_poly_compress$4:
+	movq	$0, %rdx
+	movq	$0, %rsi
+	jmp 	L_poly_compress$2
+L_poly_compress$3:
+	movw	(%rcx,%rsi,2), %di
+	movzwl	%di, %edi
+	shll	$4, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$15, %edi
+	incq	%rsi
+	movw	(%rcx,%rsi,2), %r8w
+	movzwl	%r8w, %r8d
+	shll	$4, %r8d
+	addl	$1665, %r8d
+	imull	$80635, %r8d, %r8d
+	shrl	$28, %r8d
+	andl	$15, %r8d
+	shll	$4, %r8d
+	orl 	%r8d, %edi
+	movb	%dil, (%rax,%rdx)
+	incq	%rdx
+	incq	%rsi
+L_poly_compress$2:
+	cmpq	$128, %rdx
+	jb  	L_poly_compress$3
+	ret
+L_poly_basemul$1:
+	movq	%rdi, 8(%rsp)
+	movq	$64, %rdi
+	movq	$0, %r8
+	jmp 	L_poly_basemul$2
+L_poly_basemul$3:
+	leaq	glob_data + 448(%rip), %r9
+	movw	(%r9,%rdi,2), %r9w
+	incq	%rdi
+	movw	(%rcx,%r8,2), %r10w
+	movw	(%rsi,%r8,2), %r11w
+	incq	%r8
+	movw	(%rcx,%r8,2), %bx
+	movw	(%rsi,%r8,2), %bp
+	addq	$-1, %r8
+	movswl	%bx, %r12d
+	movswl	%bp, %r13d
+	imull	%r13d, %r12d
+	imull	$62209, %r12d, %r13d
+	shll	$16, %r13d
+	sarl	$16, %r13d
+	imull	$3329, %r13d, %r13d
+	subl	%r13d, %r12d
+	sarl	$16, %r12d
+	movswl	%r12w, %r12d
+	movswl	%r9w, %r13d
+	imull	%r13d, %r12d
+	imull	$62209, %r12d, %r13d
+	shll	$16, %r13d
+	sarl	$16, %r13d
+	imull	$3329, %r13d, %r13d
+	subl	%r13d, %r12d
+	sarl	$16, %r12d
+	movswl	%r10w, %r13d
+	movswl	%r11w, %r14d
+	imull	%r14d, %r13d
+	imull	$62209, %r13d, %r14d
+	shll	$16, %r14d
+	sarl	$16, %r14d
+	imull	$3329, %r14d, %r14d
+	subl	%r14d, %r13d
+	sarl	$16, %r13d
+	addw	%r13w, %r12w
+	movswl	%r10w, %r10d
+	movswl	%bp, %ebp
+	imull	%ebp, %r10d
+	imull	$62209, %r10d, %ebp
+	shll	$16, %ebp
+	sarl	$16, %ebp
+	imull	$3329, %ebp, %ebp
+	subl	%ebp, %r10d
+	sarl	$16, %r10d
+	movswl	%bx, %ebx
+	movswl	%r11w, %r11d
+	imull	%r11d, %ebx
+	imull	$62209, %ebx, %r11d
+	shll	$16, %r11d
+	sarl	$16, %r11d
+	imull	$3329, %r11d, %r11d
+	subl	%r11d, %ebx
+	sarl	$16, %ebx
+	addw	%bx, %r10w
+	movq	8(%rsp), %r11
+	movw	%r12w, (%r11,%r8,2)
+	incq	%r8
+	movw	%r10w, (%r11,%r8,2)
+	movq	%r11, 16(%rsp)
+	negw	%r9w
+	incq	%r8
+	movw	(%rcx,%r8,2), %r10w
+	movw	(%rsi,%r8,2), %r11w
+	incq	%r8
+	movw	(%rcx,%r8,2), %bx
+	movw	(%rsi,%r8,2), %bp
+	addq	$-1, %r8
+	movswl	%bx, %r12d
+	movswl	%bp, %r13d
+	imull	%r13d, %r12d
+	imull	$62209, %r12d, %r13d
+	shll	$16, %r13d
+	sarl	$16, %r13d
+	imull	$3329, %r13d, %r13d
+	subl	%r13d, %r12d
+	sarl	$16, %r12d
+	movswl	%r12w, %r12d
+	movswl	%r9w, %r9d
+	imull	%r9d, %r12d
+	imull	$62209, %r12d, %r9d
+	shll	$16, %r9d
+	sarl	$16, %r9d
+	imull	$3329, %r9d, %r9d
+	subl	%r9d, %r12d
+	sarl	$16, %r12d
+	movw	%r12w, %r9w
+	movswl	%r10w, %r12d
+	movswl	%r11w, %r13d
+	imull	%r13d, %r12d
+	imull	$62209, %r12d, %r13d
+	shll	$16, %r13d
+	sarl	$16, %r13d
+	imull	$3329, %r13d, %r13d
+	subl	%r13d, %r12d
+	sarl	$16, %r12d
+	addw	%r12w, %r9w
+	movswl	%r10w, %r10d
+	movswl	%bp, %ebp
+	imull	%ebp, %r10d
+	imull	$62209, %r10d, %ebp
+	shll	$16, %ebp
+	sarl	$16, %ebp
+	imull	$3329, %ebp, %ebp
+	subl	%ebp, %r10d
+	sarl	$16, %r10d
+	movswl	%bx, %ebx
+	movswl	%r11w, %r11d
+	imull	%r11d, %ebx
+	imull	$62209, %ebx, %r11d
+	shll	$16, %r11d
+	sarl	$16, %r11d
+	imull	$3329, %r11d, %r11d
+	subl	%r11d, %ebx
+	sarl	$16, %ebx
+	addw	%bx, %r10w
+	movq	16(%rsp), %r11
+	movw	%r9w, (%r11,%r8,2)
+	incq	%r8
+	movw	%r10w, (%r11,%r8,2)
+	incq	%r8
+L_poly_basemul$2:
+	cmpq	$256, %r8
+	jb  	L_poly_basemul$3
+	ret
+L_poly_csubq$1:
+	movq	$0, %r8
+	jmp 	L_poly_csubq$2
+L_poly_csubq$3:
+	movw	(%rcx,%r8,2), %r9w
+	addw	$-3329, %r9w
+	movw	%r9w, %r10w
+	sarw	$15, %r10w
+	andw	$3329, %r10w
+	addw	%r10w, %r9w
+	movw	%r9w, (%rcx,%r8,2)
+	incq	%r8
+L_poly_csubq$2:
+	cmpq	$256, %r8
+	jb  	L_poly_csubq$3
+	ret
+L_poly_add2$1:
+	movq	$0, %rdi
+	jmp 	L_poly_add2$2
+L_poly_add2$3:
+	movw	(%rcx,%rdi,2), %r8w
+	movw	(%rsi,%rdi,2), %r9w
+	addw	%r9w, %r8w
+	movw	%r8w, (%rcx,%rdi,2)
+	incq	%rdi
+L_poly_add2$2:
+	cmpq	$256, %rdi
+	jb  	L_poly_add2$3
+	ret
+L_shake256_64$1:
+	movq	%rax, 8(%rsp)
+	movq	%rcx, 16(%rsp)
+	leaq	24(%rsp), %rax
+	xorq	%rcx, %rcx
+	movq	%rcx, (%rax)
+	movq	%rcx, 8(%rax)
+	movq	%rcx, 16(%rax)
+	movq	%rcx, 24(%rax)
+	movq	%rcx, 32(%rax)
+	movq	%rcx, 40(%rax)
+	movq	%rcx, 48(%rax)
+	movq	%rcx, 56(%rax)
+	movq	%rcx, 64(%rax)
+	movq	%rcx, 72(%rax)
+	movq	%rcx, 80(%rax)
+	movq	%rcx, 88(%rax)
+	movq	%rcx, 96(%rax)
+	movq	%rcx, 104(%rax)
+	movq	%rcx, 112(%rax)
+	movq	%rcx, 120(%rax)
+	movq	%rcx, 128(%rax)
+	movq	%rcx, 136(%rax)
+	movq	%rcx, 144(%rax)
+	movq	%rcx, 152(%rax)
+	movq	%rcx, 160(%rax)
+	movq	%rcx, 168(%rax)
+	movq	%rcx, 176(%rax)
+	movq	%rcx, 184(%rax)
+	movq	%rcx, 192(%rax)
+	movq	(%rdx), %rcx
+	xorq	%rcx, (%rax)
+	movq	8(%rdx), %rcx
+	xorq	%rcx, 8(%rax)
+	movq	16(%rdx), %rcx
+	xorq	%rcx, 16(%rax)
+	movq	24(%rdx), %rcx
+	xorq	%rcx, 24(%rax)
+	movq	32(%rdx), %rcx
+	xorq	%rcx, 32(%rax)
+	movq	40(%rdx), %rcx
+	xorq	%rcx, 40(%rax)
+	movq	48(%rdx), %rcx
+	xorq	%rcx, 48(%rax)
+	movq	56(%rdx), %rcx
+	xorq	%rcx, 56(%rax)
+	xorb	$31, 64(%rax)
+	xorb	$-128, 135(%rax)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_shake256_64$9:
+	leaq	216(%rsp), %rsp
+	movq	16(%rsp), %rcx
+	movq	8(%rsp), %rdx
+	jmp 	L_shake256_64$6
+L_shake256_64$7:
+	movq	(%rax), %rsi
+	movq	%rsi, (%rdx)
+	movq	8(%rax), %rsi
+	movq	%rsi, 8(%rdx)
+	movq	16(%rax), %rsi
+	movq	%rsi, 16(%rdx)
+	movq	24(%rax), %rsi
+	movq	%rsi, 24(%rdx)
+	movq	32(%rax), %rsi
+	movq	%rsi, 32(%rdx)
+	movq	40(%rax), %rsi
+	movq	%rsi, 40(%rdx)
+	movq	48(%rax), %rsi
+	movq	%rsi, 48(%rdx)
+	movq	56(%rax), %rsi
+	movq	%rsi, 56(%rdx)
+	movq	64(%rax), %rsi
+	movq	%rsi, 64(%rdx)
+	movq	72(%rax), %rsi
+	movq	%rsi, 72(%rdx)
+	movq	80(%rax), %rsi
+	movq	%rsi, 80(%rdx)
+	movq	88(%rax), %rsi
+	movq	%rsi, 88(%rdx)
+	movq	96(%rax), %rsi
+	movq	%rsi, 96(%rdx)
+	movq	104(%rax), %rsi
+	movq	%rsi, 104(%rdx)
+	movq	112(%rax), %rsi
+	movq	%rsi, 112(%rdx)
+	movq	120(%rax), %rsi
+	movq	%rsi, 120(%rdx)
+	movq	128(%rax), %rsi
+	movq	%rsi, 128(%rdx)
+	addq	$136, %rdx
+	addq	$-136, %rcx
+	movq	%rdx, 8(%rsp)
+	movq	%rcx, 16(%rsp)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_shake256_64$8:
+	leaq	216(%rsp), %rsp
+	movq	16(%rsp), %rcx
+	movq	8(%rsp), %rdx
+L_shake256_64$6:
+	cmpq	$136, %rcx
+	jnbe	L_shake256_64$7
+	movq	%rcx, 8(%rsp)
+	shrq	$3, %rcx
+	movq	$0, %rsi
+	jmp 	L_shake256_64$4
+L_shake256_64$5:
+	movq	(%rax,%rsi,8), %rdi
+	movq	%rdi, (%rdx,%rsi,8)
+	incq	%rsi
+L_shake256_64$4:
+	cmpq	%rcx, %rsi
+	jb  	L_shake256_64$5
+	shlq	$3, %rsi
+	movq	8(%rsp), %rcx
+	jmp 	L_shake256_64$2
+L_shake256_64$3:
+	movb	(%rax,%rsi), %dil
+	movb	%dil, (%rdx,%rsi)
+	incq	%rsi
+L_shake256_64$2:
+	cmpq	%rcx, %rsi
+	jb  	L_shake256_64$3
+	ret
+L_sha3_512_64$1:
+	movq	%rax, 8(%rsp)
+	leaq	16(%rsp), %rax
+	xorq	%rdx, %rdx
+	movq	%rdx, (%rax)
+	movq	%rdx, 8(%rax)
+	movq	%rdx, 16(%rax)
+	movq	%rdx, 24(%rax)
+	movq	%rdx, 32(%rax)
+	movq	%rdx, 40(%rax)
+	movq	%rdx, 48(%rax)
+	movq	%rdx, 56(%rax)
+	movq	%rdx, 64(%rax)
+	movq	%rdx, 72(%rax)
+	movq	%rdx, 80(%rax)
+	movq	%rdx, 88(%rax)
+	movq	%rdx, 96(%rax)
+	movq	%rdx, 104(%rax)
+	movq	%rdx, 112(%rax)
+	movq	%rdx, 120(%rax)
+	movq	%rdx, 128(%rax)
+	movq	%rdx, 136(%rax)
+	movq	%rdx, 144(%rax)
+	movq	%rdx, 152(%rax)
+	movq	%rdx, 160(%rax)
+	movq	%rdx, 168(%rax)
+	movq	%rdx, 176(%rax)
+	movq	%rdx, 184(%rax)
+	movq	%rdx, 192(%rax)
+	movq	(%rcx), %rdx
+	xorq	%rdx, (%rax)
+	movq	8(%rcx), %rdx
+	xorq	%rdx, 8(%rax)
+	movq	16(%rcx), %rdx
+	xorq	%rdx, 16(%rax)
+	movq	24(%rcx), %rdx
+	xorq	%rdx, 24(%rax)
+	movq	32(%rcx), %rdx
+	xorq	%rdx, 32(%rax)
+	movq	40(%rcx), %rdx
+	xorq	%rdx, 40(%rax)
+	movq	48(%rcx), %rdx
+	xorq	%rdx, 48(%rax)
+	movq	56(%rcx), %rcx
+	xorq	%rcx, 56(%rax)
+	xorb	$6, 64(%rax)
+	xorb	$-128, 71(%rax)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_sha3_512_64$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rcx
+	movq	(%rax), %rdx
+	movq	%rdx, (%rcx)
+	movq	8(%rax), %rdx
+	movq	%rdx, 8(%rcx)
+	movq	16(%rax), %rdx
+	movq	%rdx, 16(%rcx)
+	movq	24(%rax), %rdx
+	movq	%rdx, 24(%rcx)
+	movq	32(%rax), %rdx
+	movq	%rdx, 32(%rcx)
+	movq	40(%rax), %rdx
+	movq	%rdx, 40(%rcx)
+	movq	48(%rax), %rdx
+	movq	%rdx, 48(%rcx)
+	movq	56(%rax), %rax
+	movq	%rax, 56(%rcx)
+	ret
+L_sha3_256_32$1:
+	movq	%rax, 8(%rsp)
+	leaq	16(%rsp), %rax
+	xorq	%rdx, %rdx
+	movq	%rdx, (%rax)
+	movq	%rdx, 8(%rax)
+	movq	%rdx, 16(%rax)
+	movq	%rdx, 24(%rax)
+	movq	%rdx, 32(%rax)
+	movq	%rdx, 40(%rax)
+	movq	%rdx, 48(%rax)
+	movq	%rdx, 56(%rax)
+	movq	%rdx, 64(%rax)
+	movq	%rdx, 72(%rax)
+	movq	%rdx, 80(%rax)
+	movq	%rdx, 88(%rax)
+	movq	%rdx, 96(%rax)
+	movq	%rdx, 104(%rax)
+	movq	%rdx, 112(%rax)
+	movq	%rdx, 120(%rax)
+	movq	%rdx, 128(%rax)
+	movq	%rdx, 136(%rax)
+	movq	%rdx, 144(%rax)
+	movq	%rdx, 152(%rax)
+	movq	%rdx, 160(%rax)
+	movq	%rdx, 168(%rax)
+	movq	%rdx, 176(%rax)
+	movq	%rdx, 184(%rax)
+	movq	%rdx, 192(%rax)
+	movq	(%rcx), %rdx
+	movq	%rdx, (%rax)
+	movq	8(%rcx), %rdx
+	movq	%rdx, 8(%rax)
+	movq	16(%rcx), %rdx
+	movq	%rdx, 16(%rax)
+	movq	24(%rcx), %rcx
+	movq	%rcx, 24(%rax)
+	xorb	$6, 32(%rax)
+	movb	$-128, 135(%rax)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_sha3_256_32$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rcx
+	movq	(%rax), %rdx
+	movq	%rdx, (%rcx)
+	movq	8(%rax), %rdx
+	movq	%rdx, 8(%rcx)
+	movq	16(%rax), %rdx
+	movq	%rdx, 16(%rcx)
+	movq	24(%rax), %rax
+	movq	%rax, 24(%rcx)
+	ret
+L_sha3_256$1:
+	movq	%rax, 8(%rsp)
+	leaq	40(%rsp), %rax
+	xorq	%rdx, %rdx
+	movq	%rdx, (%rax)
+	movq	%rdx, 8(%rax)
+	movq	%rdx, 16(%rax)
+	movq	%rdx, 24(%rax)
+	movq	%rdx, 32(%rax)
+	movq	%rdx, 40(%rax)
+	movq	%rdx, 48(%rax)
+	movq	%rdx, 56(%rax)
+	movq	%rdx, 64(%rax)
+	movq	%rdx, 72(%rax)
+	movq	%rdx, 80(%rax)
+	movq	%rdx, 88(%rax)
+	movq	%rdx, 96(%rax)
+	movq	%rdx, 104(%rax)
+	movq	%rdx, 112(%rax)
+	movq	%rdx, 120(%rax)
+	movq	%rdx, 128(%rax)
+	movq	%rdx, 136(%rax)
+	movq	%rdx, 144(%rax)
+	movq	%rdx, 152(%rax)
+	movq	%rdx, 160(%rax)
+	movq	%rdx, 168(%rax)
+	movq	%rdx, 176(%rax)
+	movq	%rdx, 184(%rax)
+	movq	%rdx, 192(%rax)
+	movq	$136, %rdx
+	jmp 	L_sha3_256$7
+L_sha3_256$8:
+	movq	%rdx, %rdi
+	shrq	$3, %rdi
+	movq	$0, %r8
+	jmp 	L_sha3_256$10
+L_sha3_256$11:
+	movq	(%rsi,%r8,8), %r9
+	xorq	%r9, (%rax,%r8,8)
+	incq	%r8
+L_sha3_256$10:
+	cmpq	%rdi, %r8
+	jb  	L_sha3_256$11
+	addq	%rdx, %rsi
+	subq	%rdx, %rcx
+	movq	%rsi, 16(%rsp)
+	movq	%rcx, 24(%rsp)
+	movq	%rdx, 32(%rsp)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_sha3_256$9:
+	leaq	216(%rsp), %rsp
+	movq	16(%rsp), %rsi
+	movq	24(%rsp), %rcx
+	movq	32(%rsp), %rdx
+L_sha3_256$7:
+	cmpq	%rdx, %rcx
+	jnb 	L_sha3_256$8
+	movb	$6, %dil
+	movq	%rcx, %r8
+	shrq	$3, %r8
+	movq	$0, %r9
+	jmp 	L_sha3_256$5
+L_sha3_256$6:
+	movq	(%rsi,%r9,8), %r10
+	xorq	%r10, (%rax,%r9,8)
+	incq	%r9
+L_sha3_256$5:
+	cmpq	%r8, %r9
+	jb  	L_sha3_256$6
+	shlq	$3, %r9
+	jmp 	L_sha3_256$3
+L_sha3_256$4:
+	movb	(%rsi,%r9), %r8b
+	xorb	%r8b, (%rax,%r9)
+	incq	%r9
+L_sha3_256$3:
+	cmpq	%rcx, %r9
+	jb  	L_sha3_256$4
+	xorb	%dil, (%rax,%r9)
+	addq	$-1, %rdx
+	xorb	$-128, (%rax,%rdx)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_sha3_256$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rcx
+	movq	(%rax), %rdx
+	movq	%rdx, (%rcx)
+	movq	8(%rax), %rdx
+	movq	%rdx, 8(%rcx)
+	movq	16(%rax), %rdx
+	movq	%rdx, 16(%rcx)
+	movq	24(%rax), %rax
+	movq	%rax, 24(%rcx)
+	ret
+L_shake128_squeezeblock$1:
+	movq	%rcx, 8(%rsp)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_shake128_squeezeblock$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rcx
+	movb	(%rax), %dl
+	movb	%dl, (%rcx)
+	movb	1(%rax), %dl
+	movb	%dl, 1(%rcx)
+	movb	2(%rax), %dl
+	movb	%dl, 2(%rcx)
+	movb	3(%rax), %dl
+	movb	%dl, 3(%rcx)
+	movb	4(%rax), %dl
+	movb	%dl, 4(%rcx)
+	movb	5(%rax), %dl
+	movb	%dl, 5(%rcx)
+	movb	6(%rax), %dl
+	movb	%dl, 6(%rcx)
+	movb	7(%rax), %dl
+	movb	%dl, 7(%rcx)
+	movb	8(%rax), %dl
+	movb	%dl, 8(%rcx)
+	movb	9(%rax), %dl
+	movb	%dl, 9(%rcx)
+	movb	10(%rax), %dl
+	movb	%dl, 10(%rcx)
+	movb	11(%rax), %dl
+	movb	%dl, 11(%rcx)
+	movb	12(%rax), %dl
+	movb	%dl, 12(%rcx)
+	movb	13(%rax), %dl
+	movb	%dl, 13(%rcx)
+	movb	14(%rax), %dl
+	movb	%dl, 14(%rcx)
+	movb	15(%rax), %dl
+	movb	%dl, 15(%rcx)
+	movb	16(%rax), %dl
+	movb	%dl, 16(%rcx)
+	movb	17(%rax), %dl
+	movb	%dl, 17(%rcx)
+	movb	18(%rax), %dl
+	movb	%dl, 18(%rcx)
+	movb	19(%rax), %dl
+	movb	%dl, 19(%rcx)
+	movb	20(%rax), %dl
+	movb	%dl, 20(%rcx)
+	movb	21(%rax), %dl
+	movb	%dl, 21(%rcx)
+	movb	22(%rax), %dl
+	movb	%dl, 22(%rcx)
+	movb	23(%rax), %dl
+	movb	%dl, 23(%rcx)
+	movb	24(%rax), %dl
+	movb	%dl, 24(%rcx)
+	movb	25(%rax), %dl
+	movb	%dl, 25(%rcx)
+	movb	26(%rax), %dl
+	movb	%dl, 26(%rcx)
+	movb	27(%rax), %dl
+	movb	%dl, 27(%rcx)
+	movb	28(%rax), %dl
+	movb	%dl, 28(%rcx)
+	movb	29(%rax), %dl
+	movb	%dl, 29(%rcx)
+	movb	30(%rax), %dl
+	movb	%dl, 30(%rcx)
+	movb	31(%rax), %dl
+	movb	%dl, 31(%rcx)
+	movb	32(%rax), %dl
+	movb	%dl, 32(%rcx)
+	movb	33(%rax), %dl
+	movb	%dl, 33(%rcx)
+	movb	34(%rax), %dl
+	movb	%dl, 34(%rcx)
+	movb	35(%rax), %dl
+	movb	%dl, 35(%rcx)
+	movb	36(%rax), %dl
+	movb	%dl, 36(%rcx)
+	movb	37(%rax), %dl
+	movb	%dl, 37(%rcx)
+	movb	38(%rax), %dl
+	movb	%dl, 38(%rcx)
+	movb	39(%rax), %dl
+	movb	%dl, 39(%rcx)
+	movb	40(%rax), %dl
+	movb	%dl, 40(%rcx)
+	movb	41(%rax), %dl
+	movb	%dl, 41(%rcx)
+	movb	42(%rax), %dl
+	movb	%dl, 42(%rcx)
+	movb	43(%rax), %dl
+	movb	%dl, 43(%rcx)
+	movb	44(%rax), %dl
+	movb	%dl, 44(%rcx)
+	movb	45(%rax), %dl
+	movb	%dl, 45(%rcx)
+	movb	46(%rax), %dl
+	movb	%dl, 46(%rcx)
+	movb	47(%rax), %dl
+	movb	%dl, 47(%rcx)
+	movb	48(%rax), %dl
+	movb	%dl, 48(%rcx)
+	movb	49(%rax), %dl
+	movb	%dl, 49(%rcx)
+	movb	50(%rax), %dl
+	movb	%dl, 50(%rcx)
+	movb	51(%rax), %dl
+	movb	%dl, 51(%rcx)
+	movb	52(%rax), %dl
+	movb	%dl, 52(%rcx)
+	movb	53(%rax), %dl
+	movb	%dl, 53(%rcx)
+	movb	54(%rax), %dl
+	movb	%dl, 54(%rcx)
+	movb	55(%rax), %dl
+	movb	%dl, 55(%rcx)
+	movb	56(%rax), %dl
+	movb	%dl, 56(%rcx)
+	movb	57(%rax), %dl
+	movb	%dl, 57(%rcx)
+	movb	58(%rax), %dl
+	movb	%dl, 58(%rcx)
+	movb	59(%rax), %dl
+	movb	%dl, 59(%rcx)
+	movb	60(%rax), %dl
+	movb	%dl, 60(%rcx)
+	movb	61(%rax), %dl
+	movb	%dl, 61(%rcx)
+	movb	62(%rax), %dl
+	movb	%dl, 62(%rcx)
+	movb	63(%rax), %dl
+	movb	%dl, 63(%rcx)
+	movb	64(%rax), %dl
+	movb	%dl, 64(%rcx)
+	movb	65(%rax), %dl
+	movb	%dl, 65(%rcx)
+	movb	66(%rax), %dl
+	movb	%dl, 66(%rcx)
+	movb	67(%rax), %dl
+	movb	%dl, 67(%rcx)
+	movb	68(%rax), %dl
+	movb	%dl, 68(%rcx)
+	movb	69(%rax), %dl
+	movb	%dl, 69(%rcx)
+	movb	70(%rax), %dl
+	movb	%dl, 70(%rcx)
+	movb	71(%rax), %dl
+	movb	%dl, 71(%rcx)
+	movb	72(%rax), %dl
+	movb	%dl, 72(%rcx)
+	movb	73(%rax), %dl
+	movb	%dl, 73(%rcx)
+	movb	74(%rax), %dl
+	movb	%dl, 74(%rcx)
+	movb	75(%rax), %dl
+	movb	%dl, 75(%rcx)
+	movb	76(%rax), %dl
+	movb	%dl, 76(%rcx)
+	movb	77(%rax), %dl
+	movb	%dl, 77(%rcx)
+	movb	78(%rax), %dl
+	movb	%dl, 78(%rcx)
+	movb	79(%rax), %dl
+	movb	%dl, 79(%rcx)
+	movb	80(%rax), %dl
+	movb	%dl, 80(%rcx)
+	movb	81(%rax), %dl
+	movb	%dl, 81(%rcx)
+	movb	82(%rax), %dl
+	movb	%dl, 82(%rcx)
+	movb	83(%rax), %dl
+	movb	%dl, 83(%rcx)
+	movb	84(%rax), %dl
+	movb	%dl, 84(%rcx)
+	movb	85(%rax), %dl
+	movb	%dl, 85(%rcx)
+	movb	86(%rax), %dl
+	movb	%dl, 86(%rcx)
+	movb	87(%rax), %dl
+	movb	%dl, 87(%rcx)
+	movb	88(%rax), %dl
+	movb	%dl, 88(%rcx)
+	movb	89(%rax), %dl
+	movb	%dl, 89(%rcx)
+	movb	90(%rax), %dl
+	movb	%dl, 90(%rcx)
+	movb	91(%rax), %dl
+	movb	%dl, 91(%rcx)
+	movb	92(%rax), %dl
+	movb	%dl, 92(%rcx)
+	movb	93(%rax), %dl
+	movb	%dl, 93(%rcx)
+	movb	94(%rax), %dl
+	movb	%dl, 94(%rcx)
+	movb	95(%rax), %dl
+	movb	%dl, 95(%rcx)
+	movb	96(%rax), %dl
+	movb	%dl, 96(%rcx)
+	movb	97(%rax), %dl
+	movb	%dl, 97(%rcx)
+	movb	98(%rax), %dl
+	movb	%dl, 98(%rcx)
+	movb	99(%rax), %dl
+	movb	%dl, 99(%rcx)
+	movb	100(%rax), %dl
+	movb	%dl, 100(%rcx)
+	movb	101(%rax), %dl
+	movb	%dl, 101(%rcx)
+	movb	102(%rax), %dl
+	movb	%dl, 102(%rcx)
+	movb	103(%rax), %dl
+	movb	%dl, 103(%rcx)
+	movb	104(%rax), %dl
+	movb	%dl, 104(%rcx)
+	movb	105(%rax), %dl
+	movb	%dl, 105(%rcx)
+	movb	106(%rax), %dl
+	movb	%dl, 106(%rcx)
+	movb	107(%rax), %dl
+	movb	%dl, 107(%rcx)
+	movb	108(%rax), %dl
+	movb	%dl, 108(%rcx)
+	movb	109(%rax), %dl
+	movb	%dl, 109(%rcx)
+	movb	110(%rax), %dl
+	movb	%dl, 110(%rcx)
+	movb	111(%rax), %dl
+	movb	%dl, 111(%rcx)
+	movb	112(%rax), %dl
+	movb	%dl, 112(%rcx)
+	movb	113(%rax), %dl
+	movb	%dl, 113(%rcx)
+	movb	114(%rax), %dl
+	movb	%dl, 114(%rcx)
+	movb	115(%rax), %dl
+	movb	%dl, 115(%rcx)
+	movb	116(%rax), %dl
+	movb	%dl, 116(%rcx)
+	movb	117(%rax), %dl
+	movb	%dl, 117(%rcx)
+	movb	118(%rax), %dl
+	movb	%dl, 118(%rcx)
+	movb	119(%rax), %dl
+	movb	%dl, 119(%rcx)
+	movb	120(%rax), %dl
+	movb	%dl, 120(%rcx)
+	movb	121(%rax), %dl
+	movb	%dl, 121(%rcx)
+	movb	122(%rax), %dl
+	movb	%dl, 122(%rcx)
+	movb	123(%rax), %dl
+	movb	%dl, 123(%rcx)
+	movb	124(%rax), %dl
+	movb	%dl, 124(%rcx)
+	movb	125(%rax), %dl
+	movb	%dl, 125(%rcx)
+	movb	126(%rax), %dl
+	movb	%dl, 126(%rcx)
+	movb	127(%rax), %dl
+	movb	%dl, 127(%rcx)
+	movb	128(%rax), %dl
+	movb	%dl, 128(%rcx)
+	movb	129(%rax), %dl
+	movb	%dl, 129(%rcx)
+	movb	130(%rax), %dl
+	movb	%dl, 130(%rcx)
+	movb	131(%rax), %dl
+	movb	%dl, 131(%rcx)
+	movb	132(%rax), %dl
+	movb	%dl, 132(%rcx)
+	movb	133(%rax), %dl
+	movb	%dl, 133(%rcx)
+	movb	134(%rax), %dl
+	movb	%dl, 134(%rcx)
+	movb	135(%rax), %dl
+	movb	%dl, 135(%rcx)
+	movb	136(%rax), %dl
+	movb	%dl, 136(%rcx)
+	movb	137(%rax), %dl
+	movb	%dl, 137(%rcx)
+	movb	138(%rax), %dl
+	movb	%dl, 138(%rcx)
+	movb	139(%rax), %dl
+	movb	%dl, 139(%rcx)
+	movb	140(%rax), %dl
+	movb	%dl, 140(%rcx)
+	movb	141(%rax), %dl
+	movb	%dl, 141(%rcx)
+	movb	142(%rax), %dl
+	movb	%dl, 142(%rcx)
+	movb	143(%rax), %dl
+	movb	%dl, 143(%rcx)
+	movb	144(%rax), %dl
+	movb	%dl, 144(%rcx)
+	movb	145(%rax), %dl
+	movb	%dl, 145(%rcx)
+	movb	146(%rax), %dl
+	movb	%dl, 146(%rcx)
+	movb	147(%rax), %dl
+	movb	%dl, 147(%rcx)
+	movb	148(%rax), %dl
+	movb	%dl, 148(%rcx)
+	movb	149(%rax), %dl
+	movb	%dl, 149(%rcx)
+	movb	150(%rax), %dl
+	movb	%dl, 150(%rcx)
+	movb	151(%rax), %dl
+	movb	%dl, 151(%rcx)
+	movb	152(%rax), %dl
+	movb	%dl, 152(%rcx)
+	movb	153(%rax), %dl
+	movb	%dl, 153(%rcx)
+	movb	154(%rax), %dl
+	movb	%dl, 154(%rcx)
+	movb	155(%rax), %dl
+	movb	%dl, 155(%rcx)
+	movb	156(%rax), %dl
+	movb	%dl, 156(%rcx)
+	movb	157(%rax), %dl
+	movb	%dl, 157(%rcx)
+	movb	158(%rax), %dl
+	movb	%dl, 158(%rcx)
+	movb	159(%rax), %dl
+	movb	%dl, 159(%rcx)
+	movb	160(%rax), %dl
+	movb	%dl, 160(%rcx)
+	movb	161(%rax), %dl
+	movb	%dl, 161(%rcx)
+	movb	162(%rax), %dl
+	movb	%dl, 162(%rcx)
+	movb	163(%rax), %dl
+	movb	%dl, 163(%rcx)
+	movb	164(%rax), %dl
+	movb	%dl, 164(%rcx)
+	movb	165(%rax), %dl
+	movb	%dl, 165(%rcx)
+	movb	166(%rax), %dl
+	movb	%dl, 166(%rcx)
+	movb	167(%rax), %al
+	movb	%al, 167(%rcx)
+	ret
+L_shake128_absorb34$1:
+	xorq	%rdx, %rdx
+	movq	%rdx, (%rax)
+	movq	%rdx, 8(%rax)
+	movq	%rdx, 16(%rax)
+	movq	%rdx, 24(%rax)
+	movq	%rdx, 32(%rax)
+	movq	%rdx, 40(%rax)
+	movq	%rdx, 48(%rax)
+	movq	%rdx, 56(%rax)
+	movq	%rdx, 64(%rax)
+	movq	%rdx, 72(%rax)
+	movq	%rdx, 80(%rax)
+	movq	%rdx, 88(%rax)
+	movq	%rdx, 96(%rax)
+	movq	%rdx, 104(%rax)
+	movq	%rdx, 112(%rax)
+	movq	%rdx, 120(%rax)
+	movq	%rdx, 128(%rax)
+	movq	%rdx, 136(%rax)
+	movq	%rdx, 144(%rax)
+	movq	%rdx, 152(%rax)
+	movq	%rdx, 160(%rax)
+	movq	%rdx, 168(%rax)
+	movq	%rdx, 176(%rax)
+	movq	%rdx, 184(%rax)
+	movq	%rdx, 192(%rax)
+	movb	(%rcx), %dl
+	xorb	%dl, (%rax)
+	movb	1(%rcx), %dl
+	xorb	%dl, 1(%rax)
+	movb	2(%rcx), %dl
+	xorb	%dl, 2(%rax)
+	movb	3(%rcx), %dl
+	xorb	%dl, 3(%rax)
+	movb	4(%rcx), %dl
+	xorb	%dl, 4(%rax)
+	movb	5(%rcx), %dl
+	xorb	%dl, 5(%rax)
+	movb	6(%rcx), %dl
+	xorb	%dl, 6(%rax)
+	movb	7(%rcx), %dl
+	xorb	%dl, 7(%rax)
+	movb	8(%rcx), %dl
+	xorb	%dl, 8(%rax)
+	movb	9(%rcx), %dl
+	xorb	%dl, 9(%rax)
+	movb	10(%rcx), %dl
+	xorb	%dl, 10(%rax)
+	movb	11(%rcx), %dl
+	xorb	%dl, 11(%rax)
+	movb	12(%rcx), %dl
+	xorb	%dl, 12(%rax)
+	movb	13(%rcx), %dl
+	xorb	%dl, 13(%rax)
+	movb	14(%rcx), %dl
+	xorb	%dl, 14(%rax)
+	movb	15(%rcx), %dl
+	xorb	%dl, 15(%rax)
+	movb	16(%rcx), %dl
+	xorb	%dl, 16(%rax)
+	movb	17(%rcx), %dl
+	xorb	%dl, 17(%rax)
+	movb	18(%rcx), %dl
+	xorb	%dl, 18(%rax)
+	movb	19(%rcx), %dl
+	xorb	%dl, 19(%rax)
+	movb	20(%rcx), %dl
+	xorb	%dl, 20(%rax)
+	movb	21(%rcx), %dl
+	xorb	%dl, 21(%rax)
+	movb	22(%rcx), %dl
+	xorb	%dl, 22(%rax)
+	movb	23(%rcx), %dl
+	xorb	%dl, 23(%rax)
+	movb	24(%rcx), %dl
+	xorb	%dl, 24(%rax)
+	movb	25(%rcx), %dl
+	xorb	%dl, 25(%rax)
+	movb	26(%rcx), %dl
+	xorb	%dl, 26(%rax)
+	movb	27(%rcx), %dl
+	xorb	%dl, 27(%rax)
+	movb	28(%rcx), %dl
+	xorb	%dl, 28(%rax)
+	movb	29(%rcx), %dl
+	xorb	%dl, 29(%rax)
+	movb	30(%rcx), %dl
+	xorb	%dl, 30(%rax)
+	movb	31(%rcx), %dl
+	xorb	%dl, 31(%rax)
+	movb	32(%rcx), %dl
+	xorb	%dl, 32(%rax)
+	movb	33(%rcx), %cl
+	xorb	%cl, 33(%rax)
+	xorb	$31, 34(%rax)
+	xorb	$-128, 167(%rax)
+	ret
+L_sha3_512_32$1:
+	movq	%rax, 8(%rsp)
+	leaq	16(%rsp), %rax
+	xorq	%rdx, %rdx
+	movq	%rdx, (%rax)
+	movq	%rdx, 8(%rax)
+	movq	%rdx, 16(%rax)
+	movq	%rdx, 24(%rax)
+	movq	%rdx, 32(%rax)
+	movq	%rdx, 40(%rax)
+	movq	%rdx, 48(%rax)
+	movq	%rdx, 56(%rax)
+	movq	%rdx, 64(%rax)
+	movq	%rdx, 72(%rax)
+	movq	%rdx, 80(%rax)
+	movq	%rdx, 88(%rax)
+	movq	%rdx, 96(%rax)
+	movq	%rdx, 104(%rax)
+	movq	%rdx, 112(%rax)
+	movq	%rdx, 120(%rax)
+	movq	%rdx, 128(%rax)
+	movq	%rdx, 136(%rax)
+	movq	%rdx, 144(%rax)
+	movq	%rdx, 152(%rax)
+	movq	%rdx, 160(%rax)
+	movq	%rdx, 168(%rax)
+	movq	%rdx, 176(%rax)
+	movq	%rdx, 184(%rax)
+	movq	%rdx, 192(%rax)
+	movb	(%rcx), %dl
+	xorb	%dl, (%rax)
+	movb	1(%rcx), %dl
+	xorb	%dl, 1(%rax)
+	movb	2(%rcx), %dl
+	xorb	%dl, 2(%rax)
+	movb	3(%rcx), %dl
+	xorb	%dl, 3(%rax)
+	movb	4(%rcx), %dl
+	xorb	%dl, 4(%rax)
+	movb	5(%rcx), %dl
+	xorb	%dl, 5(%rax)
+	movb	6(%rcx), %dl
+	xorb	%dl, 6(%rax)
+	movb	7(%rcx), %dl
+	xorb	%dl, 7(%rax)
+	movb	8(%rcx), %dl
+	xorb	%dl, 8(%rax)
+	movb	9(%rcx), %dl
+	xorb	%dl, 9(%rax)
+	movb	10(%rcx), %dl
+	xorb	%dl, 10(%rax)
+	movb	11(%rcx), %dl
+	xorb	%dl, 11(%rax)
+	movb	12(%rcx), %dl
+	xorb	%dl, 12(%rax)
+	movb	13(%rcx), %dl
+	xorb	%dl, 13(%rax)
+	movb	14(%rcx), %dl
+	xorb	%dl, 14(%rax)
+	movb	15(%rcx), %dl
+	xorb	%dl, 15(%rax)
+	movb	16(%rcx), %dl
+	xorb	%dl, 16(%rax)
+	movb	17(%rcx), %dl
+	xorb	%dl, 17(%rax)
+	movb	18(%rcx), %dl
+	xorb	%dl, 18(%rax)
+	movb	19(%rcx), %dl
+	xorb	%dl, 19(%rax)
+	movb	20(%rcx), %dl
+	xorb	%dl, 20(%rax)
+	movb	21(%rcx), %dl
+	xorb	%dl, 21(%rax)
+	movb	22(%rcx), %dl
+	xorb	%dl, 22(%rax)
+	movb	23(%rcx), %dl
+	xorb	%dl, 23(%rax)
+	movb	24(%rcx), %dl
+	xorb	%dl, 24(%rax)
+	movb	25(%rcx), %dl
+	xorb	%dl, 25(%rax)
+	movb	26(%rcx), %dl
+	xorb	%dl, 26(%rax)
+	movb	27(%rcx), %dl
+	xorb	%dl, 27(%rax)
+	movb	28(%rcx), %dl
+	xorb	%dl, 28(%rax)
+	movb	29(%rcx), %dl
+	xorb	%dl, 29(%rax)
+	movb	30(%rcx), %dl
+	xorb	%dl, 30(%rax)
+	movb	31(%rcx), %cl
+	xorb	%cl, 31(%rax)
+	xorb	$6, 32(%rax)
+	xorb	$-128, 71(%rax)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_sha3_512_32$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rcx
+	movb	(%rax), %dl
+	movb	%dl, (%rcx)
+	movb	1(%rax), %dl
+	movb	%dl, 1(%rcx)
+	movb	2(%rax), %dl
+	movb	%dl, 2(%rcx)
+	movb	3(%rax), %dl
+	movb	%dl, 3(%rcx)
+	movb	4(%rax), %dl
+	movb	%dl, 4(%rcx)
+	movb	5(%rax), %dl
+	movb	%dl, 5(%rcx)
+	movb	6(%rax), %dl
+	movb	%dl, 6(%rcx)
+	movb	7(%rax), %dl
+	movb	%dl, 7(%rcx)
+	movb	8(%rax), %dl
+	movb	%dl, 8(%rcx)
+	movb	9(%rax), %dl
+	movb	%dl, 9(%rcx)
+	movb	10(%rax), %dl
+	movb	%dl, 10(%rcx)
+	movb	11(%rax), %dl
+	movb	%dl, 11(%rcx)
+	movb	12(%rax), %dl
+	movb	%dl, 12(%rcx)
+	movb	13(%rax), %dl
+	movb	%dl, 13(%rcx)
+	movb	14(%rax), %dl
+	movb	%dl, 14(%rcx)
+	movb	15(%rax), %dl
+	movb	%dl, 15(%rcx)
+	movb	16(%rax), %dl
+	movb	%dl, 16(%rcx)
+	movb	17(%rax), %dl
+	movb	%dl, 17(%rcx)
+	movb	18(%rax), %dl
+	movb	%dl, 18(%rcx)
+	movb	19(%rax), %dl
+	movb	%dl, 19(%rcx)
+	movb	20(%rax), %dl
+	movb	%dl, 20(%rcx)
+	movb	21(%rax), %dl
+	movb	%dl, 21(%rcx)
+	movb	22(%rax), %dl
+	movb	%dl, 22(%rcx)
+	movb	23(%rax), %dl
+	movb	%dl, 23(%rcx)
+	movb	24(%rax), %dl
+	movb	%dl, 24(%rcx)
+	movb	25(%rax), %dl
+	movb	%dl, 25(%rcx)
+	movb	26(%rax), %dl
+	movb	%dl, 26(%rcx)
+	movb	27(%rax), %dl
+	movb	%dl, 27(%rcx)
+	movb	28(%rax), %dl
+	movb	%dl, 28(%rcx)
+	movb	29(%rax), %dl
+	movb	%dl, 29(%rcx)
+	movb	30(%rax), %dl
+	movb	%dl, 30(%rcx)
+	movb	31(%rax), %dl
+	movb	%dl, 31(%rcx)
+	movb	32(%rax), %dl
+	movb	%dl, 32(%rcx)
+	movb	33(%rax), %dl
+	movb	%dl, 33(%rcx)
+	movb	34(%rax), %dl
+	movb	%dl, 34(%rcx)
+	movb	35(%rax), %dl
+	movb	%dl, 35(%rcx)
+	movb	36(%rax), %dl
+	movb	%dl, 36(%rcx)
+	movb	37(%rax), %dl
+	movb	%dl, 37(%rcx)
+	movb	38(%rax), %dl
+	movb	%dl, 38(%rcx)
+	movb	39(%rax), %dl
+	movb	%dl, 39(%rcx)
+	movb	40(%rax), %dl
+	movb	%dl, 40(%rcx)
+	movb	41(%rax), %dl
+	movb	%dl, 41(%rcx)
+	movb	42(%rax), %dl
+	movb	%dl, 42(%rcx)
+	movb	43(%rax), %dl
+	movb	%dl, 43(%rcx)
+	movb	44(%rax), %dl
+	movb	%dl, 44(%rcx)
+	movb	45(%rax), %dl
+	movb	%dl, 45(%rcx)
+	movb	46(%rax), %dl
+	movb	%dl, 46(%rcx)
+	movb	47(%rax), %dl
+	movb	%dl, 47(%rcx)
+	movb	48(%rax), %dl
+	movb	%dl, 48(%rcx)
+	movb	49(%rax), %dl
+	movb	%dl, 49(%rcx)
+	movb	50(%rax), %dl
+	movb	%dl, 50(%rcx)
+	movb	51(%rax), %dl
+	movb	%dl, 51(%rcx)
+	movb	52(%rax), %dl
+	movb	%dl, 52(%rcx)
+	movb	53(%rax), %dl
+	movb	%dl, 53(%rcx)
+	movb	54(%rax), %dl
+	movb	%dl, 54(%rcx)
+	movb	55(%rax), %dl
+	movb	%dl, 55(%rcx)
+	movb	56(%rax), %dl
+	movb	%dl, 56(%rcx)
+	movb	57(%rax), %dl
+	movb	%dl, 57(%rcx)
+	movb	58(%rax), %dl
+	movb	%dl, 58(%rcx)
+	movb	59(%rax), %dl
+	movb	%dl, 59(%rcx)
+	movb	60(%rax), %dl
+	movb	%dl, 60(%rcx)
+	movb	61(%rax), %dl
+	movb	%dl, 61(%rcx)
+	movb	62(%rax), %dl
+	movb	%dl, 62(%rcx)
+	movb	63(%rax), %al
+	movb	%al, 63(%rcx)
+	ret
+L_shake256_192_33$1:
+	movq	%rax, 8(%rsp)
+	leaq	16(%rsp), %rax
+	xorq	%rdx, %rdx
+	movq	%rdx, (%rax)
+	movq	%rdx, 8(%rax)
+	movq	%rdx, 16(%rax)
+	movq	%rdx, 24(%rax)
+	movq	%rdx, 32(%rax)
+	movq	%rdx, 40(%rax)
+	movq	%rdx, 48(%rax)
+	movq	%rdx, 56(%rax)
+	movq	%rdx, 64(%rax)
+	movq	%rdx, 72(%rax)
+	movq	%rdx, 80(%rax)
+	movq	%rdx, 88(%rax)
+	movq	%rdx, 96(%rax)
+	movq	%rdx, 104(%rax)
+	movq	%rdx, 112(%rax)
+	movq	%rdx, 120(%rax)
+	movq	%rdx, 128(%rax)
+	movq	%rdx, 136(%rax)
+	movq	%rdx, 144(%rax)
+	movq	%rdx, 152(%rax)
+	movq	%rdx, 160(%rax)
+	movq	%rdx, 168(%rax)
+	movq	%rdx, 176(%rax)
+	movq	%rdx, 184(%rax)
+	movq	%rdx, 192(%rax)
+	movb	(%rcx), %dl
+	xorb	%dl, (%rax)
+	movb	1(%rcx), %dl
+	xorb	%dl, 1(%rax)
+	movb	2(%rcx), %dl
+	xorb	%dl, 2(%rax)
+	movb	3(%rcx), %dl
+	xorb	%dl, 3(%rax)
+	movb	4(%rcx), %dl
+	xorb	%dl, 4(%rax)
+	movb	5(%rcx), %dl
+	xorb	%dl, 5(%rax)
+	movb	6(%rcx), %dl
+	xorb	%dl, 6(%rax)
+	movb	7(%rcx), %dl
+	xorb	%dl, 7(%rax)
+	movb	8(%rcx), %dl
+	xorb	%dl, 8(%rax)
+	movb	9(%rcx), %dl
+	xorb	%dl, 9(%rax)
+	movb	10(%rcx), %dl
+	xorb	%dl, 10(%rax)
+	movb	11(%rcx), %dl
+	xorb	%dl, 11(%rax)
+	movb	12(%rcx), %dl
+	xorb	%dl, 12(%rax)
+	movb	13(%rcx), %dl
+	xorb	%dl, 13(%rax)
+	movb	14(%rcx), %dl
+	xorb	%dl, 14(%rax)
+	movb	15(%rcx), %dl
+	xorb	%dl, 15(%rax)
+	movb	16(%rcx), %dl
+	xorb	%dl, 16(%rax)
+	movb	17(%rcx), %dl
+	xorb	%dl, 17(%rax)
+	movb	18(%rcx), %dl
+	xorb	%dl, 18(%rax)
+	movb	19(%rcx), %dl
+	xorb	%dl, 19(%rax)
+	movb	20(%rcx), %dl
+	xorb	%dl, 20(%rax)
+	movb	21(%rcx), %dl
+	xorb	%dl, 21(%rax)
+	movb	22(%rcx), %dl
+	xorb	%dl, 22(%rax)
+	movb	23(%rcx), %dl
+	xorb	%dl, 23(%rax)
+	movb	24(%rcx), %dl
+	xorb	%dl, 24(%rax)
+	movb	25(%rcx), %dl
+	xorb	%dl, 25(%rax)
+	movb	26(%rcx), %dl
+	xorb	%dl, 26(%rax)
+	movb	27(%rcx), %dl
+	xorb	%dl, 27(%rax)
+	movb	28(%rcx), %dl
+	xorb	%dl, 28(%rax)
+	movb	29(%rcx), %dl
+	xorb	%dl, 29(%rax)
+	movb	30(%rcx), %dl
+	xorb	%dl, 30(%rax)
+	movb	31(%rcx), %dl
+	xorb	%dl, 31(%rax)
+	movb	32(%rcx), %cl
+	xorb	%cl, 32(%rax)
+	xorb	$31, 33(%rax)
+	xorb	$-128, 135(%rax)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_shake256_192_33$3:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rcx
+	movb	(%rax), %dl
+	movb	%dl, (%rcx)
+	movb	1(%rax), %dl
+	movb	%dl, 1(%rcx)
+	movb	2(%rax), %dl
+	movb	%dl, 2(%rcx)
+	movb	3(%rax), %dl
+	movb	%dl, 3(%rcx)
+	movb	4(%rax), %dl
+	movb	%dl, 4(%rcx)
+	movb	5(%rax), %dl
+	movb	%dl, 5(%rcx)
+	movb	6(%rax), %dl
+	movb	%dl, 6(%rcx)
+	movb	7(%rax), %dl
+	movb	%dl, 7(%rcx)
+	movb	8(%rax), %dl
+	movb	%dl, 8(%rcx)
+	movb	9(%rax), %dl
+	movb	%dl, 9(%rcx)
+	movb	10(%rax), %dl
+	movb	%dl, 10(%rcx)
+	movb	11(%rax), %dl
+	movb	%dl, 11(%rcx)
+	movb	12(%rax), %dl
+	movb	%dl, 12(%rcx)
+	movb	13(%rax), %dl
+	movb	%dl, 13(%rcx)
+	movb	14(%rax), %dl
+	movb	%dl, 14(%rcx)
+	movb	15(%rax), %dl
+	movb	%dl, 15(%rcx)
+	movb	16(%rax), %dl
+	movb	%dl, 16(%rcx)
+	movb	17(%rax), %dl
+	movb	%dl, 17(%rcx)
+	movb	18(%rax), %dl
+	movb	%dl, 18(%rcx)
+	movb	19(%rax), %dl
+	movb	%dl, 19(%rcx)
+	movb	20(%rax), %dl
+	movb	%dl, 20(%rcx)
+	movb	21(%rax), %dl
+	movb	%dl, 21(%rcx)
+	movb	22(%rax), %dl
+	movb	%dl, 22(%rcx)
+	movb	23(%rax), %dl
+	movb	%dl, 23(%rcx)
+	movb	24(%rax), %dl
+	movb	%dl, 24(%rcx)
+	movb	25(%rax), %dl
+	movb	%dl, 25(%rcx)
+	movb	26(%rax), %dl
+	movb	%dl, 26(%rcx)
+	movb	27(%rax), %dl
+	movb	%dl, 27(%rcx)
+	movb	28(%rax), %dl
+	movb	%dl, 28(%rcx)
+	movb	29(%rax), %dl
+	movb	%dl, 29(%rcx)
+	movb	30(%rax), %dl
+	movb	%dl, 30(%rcx)
+	movb	31(%rax), %dl
+	movb	%dl, 31(%rcx)
+	movb	32(%rax), %dl
+	movb	%dl, 32(%rcx)
+	movb	33(%rax), %dl
+	movb	%dl, 33(%rcx)
+	movb	34(%rax), %dl
+	movb	%dl, 34(%rcx)
+	movb	35(%rax), %dl
+	movb	%dl, 35(%rcx)
+	movb	36(%rax), %dl
+	movb	%dl, 36(%rcx)
+	movb	37(%rax), %dl
+	movb	%dl, 37(%rcx)
+	movb	38(%rax), %dl
+	movb	%dl, 38(%rcx)
+	movb	39(%rax), %dl
+	movb	%dl, 39(%rcx)
+	movb	40(%rax), %dl
+	movb	%dl, 40(%rcx)
+	movb	41(%rax), %dl
+	movb	%dl, 41(%rcx)
+	movb	42(%rax), %dl
+	movb	%dl, 42(%rcx)
+	movb	43(%rax), %dl
+	movb	%dl, 43(%rcx)
+	movb	44(%rax), %dl
+	movb	%dl, 44(%rcx)
+	movb	45(%rax), %dl
+	movb	%dl, 45(%rcx)
+	movb	46(%rax), %dl
+	movb	%dl, 46(%rcx)
+	movb	47(%rax), %dl
+	movb	%dl, 47(%rcx)
+	movb	48(%rax), %dl
+	movb	%dl, 48(%rcx)
+	movb	49(%rax), %dl
+	movb	%dl, 49(%rcx)
+	movb	50(%rax), %dl
+	movb	%dl, 50(%rcx)
+	movb	51(%rax), %dl
+	movb	%dl, 51(%rcx)
+	movb	52(%rax), %dl
+	movb	%dl, 52(%rcx)
+	movb	53(%rax), %dl
+	movb	%dl, 53(%rcx)
+	movb	54(%rax), %dl
+	movb	%dl, 54(%rcx)
+	movb	55(%rax), %dl
+	movb	%dl, 55(%rcx)
+	movb	56(%rax), %dl
+	movb	%dl, 56(%rcx)
+	movb	57(%rax), %dl
+	movb	%dl, 57(%rcx)
+	movb	58(%rax), %dl
+	movb	%dl, 58(%rcx)
+	movb	59(%rax), %dl
+	movb	%dl, 59(%rcx)
+	movb	60(%rax), %dl
+	movb	%dl, 60(%rcx)
+	movb	61(%rax), %dl
+	movb	%dl, 61(%rcx)
+	movb	62(%rax), %dl
+	movb	%dl, 62(%rcx)
+	movb	63(%rax), %dl
+	movb	%dl, 63(%rcx)
+	movb	64(%rax), %dl
+	movb	%dl, 64(%rcx)
+	movb	65(%rax), %dl
+	movb	%dl, 65(%rcx)
+	movb	66(%rax), %dl
+	movb	%dl, 66(%rcx)
+	movb	67(%rax), %dl
+	movb	%dl, 67(%rcx)
+	movb	68(%rax), %dl
+	movb	%dl, 68(%rcx)
+	movb	69(%rax), %dl
+	movb	%dl, 69(%rcx)
+	movb	70(%rax), %dl
+	movb	%dl, 70(%rcx)
+	movb	71(%rax), %dl
+	movb	%dl, 71(%rcx)
+	movb	72(%rax), %dl
+	movb	%dl, 72(%rcx)
+	movb	73(%rax), %dl
+	movb	%dl, 73(%rcx)
+	movb	74(%rax), %dl
+	movb	%dl, 74(%rcx)
+	movb	75(%rax), %dl
+	movb	%dl, 75(%rcx)
+	movb	76(%rax), %dl
+	movb	%dl, 76(%rcx)
+	movb	77(%rax), %dl
+	movb	%dl, 77(%rcx)
+	movb	78(%rax), %dl
+	movb	%dl, 78(%rcx)
+	movb	79(%rax), %dl
+	movb	%dl, 79(%rcx)
+	movb	80(%rax), %dl
+	movb	%dl, 80(%rcx)
+	movb	81(%rax), %dl
+	movb	%dl, 81(%rcx)
+	movb	82(%rax), %dl
+	movb	%dl, 82(%rcx)
+	movb	83(%rax), %dl
+	movb	%dl, 83(%rcx)
+	movb	84(%rax), %dl
+	movb	%dl, 84(%rcx)
+	movb	85(%rax), %dl
+	movb	%dl, 85(%rcx)
+	movb	86(%rax), %dl
+	movb	%dl, 86(%rcx)
+	movb	87(%rax), %dl
+	movb	%dl, 87(%rcx)
+	movb	88(%rax), %dl
+	movb	%dl, 88(%rcx)
+	movb	89(%rax), %dl
+	movb	%dl, 89(%rcx)
+	movb	90(%rax), %dl
+	movb	%dl, 90(%rcx)
+	movb	91(%rax), %dl
+	movb	%dl, 91(%rcx)
+	movb	92(%rax), %dl
+	movb	%dl, 92(%rcx)
+	movb	93(%rax), %dl
+	movb	%dl, 93(%rcx)
+	movb	94(%rax), %dl
+	movb	%dl, 94(%rcx)
+	movb	95(%rax), %dl
+	movb	%dl, 95(%rcx)
+	movb	96(%rax), %dl
+	movb	%dl, 96(%rcx)
+	movb	97(%rax), %dl
+	movb	%dl, 97(%rcx)
+	movb	98(%rax), %dl
+	movb	%dl, 98(%rcx)
+	movb	99(%rax), %dl
+	movb	%dl, 99(%rcx)
+	movb	100(%rax), %dl
+	movb	%dl, 100(%rcx)
+	movb	101(%rax), %dl
+	movb	%dl, 101(%rcx)
+	movb	102(%rax), %dl
+	movb	%dl, 102(%rcx)
+	movb	103(%rax), %dl
+	movb	%dl, 103(%rcx)
+	movb	104(%rax), %dl
+	movb	%dl, 104(%rcx)
+	movb	105(%rax), %dl
+	movb	%dl, 105(%rcx)
+	movb	106(%rax), %dl
+	movb	%dl, 106(%rcx)
+	movb	107(%rax), %dl
+	movb	%dl, 107(%rcx)
+	movb	108(%rax), %dl
+	movb	%dl, 108(%rcx)
+	movb	109(%rax), %dl
+	movb	%dl, 109(%rcx)
+	movb	110(%rax), %dl
+	movb	%dl, 110(%rcx)
+	movb	111(%rax), %dl
+	movb	%dl, 111(%rcx)
+	movb	112(%rax), %dl
+	movb	%dl, 112(%rcx)
+	movb	113(%rax), %dl
+	movb	%dl, 113(%rcx)
+	movb	114(%rax), %dl
+	movb	%dl, 114(%rcx)
+	movb	115(%rax), %dl
+	movb	%dl, 115(%rcx)
+	movb	116(%rax), %dl
+	movb	%dl, 116(%rcx)
+	movb	117(%rax), %dl
+	movb	%dl, 117(%rcx)
+	movb	118(%rax), %dl
+	movb	%dl, 118(%rcx)
+	movb	119(%rax), %dl
+	movb	%dl, 119(%rcx)
+	movb	120(%rax), %dl
+	movb	%dl, 120(%rcx)
+	movb	121(%rax), %dl
+	movb	%dl, 121(%rcx)
+	movb	122(%rax), %dl
+	movb	%dl, 122(%rcx)
+	movb	123(%rax), %dl
+	movb	%dl, 123(%rcx)
+	movb	124(%rax), %dl
+	movb	%dl, 124(%rcx)
+	movb	125(%rax), %dl
+	movb	%dl, 125(%rcx)
+	movb	126(%rax), %dl
+	movb	%dl, 126(%rcx)
+	movb	127(%rax), %dl
+	movb	%dl, 127(%rcx)
+	movb	128(%rax), %dl
+	movb	%dl, 128(%rcx)
+	movb	129(%rax), %dl
+	movb	%dl, 129(%rcx)
+	movb	130(%rax), %dl
+	movb	%dl, 130(%rcx)
+	movb	131(%rax), %dl
+	movb	%dl, 131(%rcx)
+	movb	132(%rax), %dl
+	movb	%dl, 132(%rcx)
+	movb	133(%rax), %dl
+	movb	%dl, 133(%rcx)
+	movb	134(%rax), %dl
+	movb	%dl, 134(%rcx)
+	movb	135(%rax), %dl
+	movb	%dl, 135(%rcx)
+	movq	%rcx, 8(%rsp)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_shake256_192_33$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rcx
+	movb	(%rax), %dl
+	movb	%dl, 136(%rcx)
+	movb	1(%rax), %dl
+	movb	%dl, 137(%rcx)
+	movb	2(%rax), %dl
+	movb	%dl, 138(%rcx)
+	movb	3(%rax), %dl
+	movb	%dl, 139(%rcx)
+	movb	4(%rax), %dl
+	movb	%dl, 140(%rcx)
+	movb	5(%rax), %dl
+	movb	%dl, 141(%rcx)
+	movb	6(%rax), %dl
+	movb	%dl, 142(%rcx)
+	movb	7(%rax), %dl
+	movb	%dl, 143(%rcx)
+	movb	8(%rax), %dl
+	movb	%dl, 144(%rcx)
+	movb	9(%rax), %dl
+	movb	%dl, 145(%rcx)
+	movb	10(%rax), %dl
+	movb	%dl, 146(%rcx)
+	movb	11(%rax), %dl
+	movb	%dl, 147(%rcx)
+	movb	12(%rax), %dl
+	movb	%dl, 148(%rcx)
+	movb	13(%rax), %dl
+	movb	%dl, 149(%rcx)
+	movb	14(%rax), %dl
+	movb	%dl, 150(%rcx)
+	movb	15(%rax), %dl
+	movb	%dl, 151(%rcx)
+	movb	16(%rax), %dl
+	movb	%dl, 152(%rcx)
+	movb	17(%rax), %dl
+	movb	%dl, 153(%rcx)
+	movb	18(%rax), %dl
+	movb	%dl, 154(%rcx)
+	movb	19(%rax), %dl
+	movb	%dl, 155(%rcx)
+	movb	20(%rax), %dl
+	movb	%dl, 156(%rcx)
+	movb	21(%rax), %dl
+	movb	%dl, 157(%rcx)
+	movb	22(%rax), %dl
+	movb	%dl, 158(%rcx)
+	movb	23(%rax), %dl
+	movb	%dl, 159(%rcx)
+	movb	24(%rax), %dl
+	movb	%dl, 160(%rcx)
+	movb	25(%rax), %dl
+	movb	%dl, 161(%rcx)
+	movb	26(%rax), %dl
+	movb	%dl, 162(%rcx)
+	movb	27(%rax), %dl
+	movb	%dl, 163(%rcx)
+	movb	28(%rax), %dl
+	movb	%dl, 164(%rcx)
+	movb	29(%rax), %dl
+	movb	%dl, 165(%rcx)
+	movb	30(%rax), %dl
+	movb	%dl, 166(%rcx)
+	movb	31(%rax), %dl
+	movb	%dl, 167(%rcx)
+	movb	32(%rax), %dl
+	movb	%dl, 168(%rcx)
+	movb	33(%rax), %dl
+	movb	%dl, 169(%rcx)
+	movb	34(%rax), %dl
+	movb	%dl, 170(%rcx)
+	movb	35(%rax), %dl
+	movb	%dl, 171(%rcx)
+	movb	36(%rax), %dl
+	movb	%dl, 172(%rcx)
+	movb	37(%rax), %dl
+	movb	%dl, 173(%rcx)
+	movb	38(%rax), %dl
+	movb	%dl, 174(%rcx)
+	movb	39(%rax), %dl
+	movb	%dl, 175(%rcx)
+	movb	40(%rax), %dl
+	movb	%dl, 176(%rcx)
+	movb	41(%rax), %dl
+	movb	%dl, 177(%rcx)
+	movb	42(%rax), %dl
+	movb	%dl, 178(%rcx)
+	movb	43(%rax), %dl
+	movb	%dl, 179(%rcx)
+	movb	44(%rax), %dl
+	movb	%dl, 180(%rcx)
+	movb	45(%rax), %dl
+	movb	%dl, 181(%rcx)
+	movb	46(%rax), %dl
+	movb	%dl, 182(%rcx)
+	movb	47(%rax), %dl
+	movb	%dl, 183(%rcx)
+	movb	48(%rax), %dl
+	movb	%dl, 184(%rcx)
+	movb	49(%rax), %dl
+	movb	%dl, 185(%rcx)
+	movb	50(%rax), %dl
+	movb	%dl, 186(%rcx)
+	movb	51(%rax), %dl
+	movb	%dl, 187(%rcx)
+	movb	52(%rax), %dl
+	movb	%dl, 188(%rcx)
+	movb	53(%rax), %dl
+	movb	%dl, 189(%rcx)
+	movb	54(%rax), %dl
+	movb	%dl, 190(%rcx)
+	movb	55(%rax), %al
+	movb	%al, 191(%rcx)
+	ret
+L_shake256_128_33$1:
+	movq	%rax, 8(%rsp)
+	leaq	16(%rsp), %rax
+	xorq	%rdx, %rdx
+	movq	%rdx, (%rax)
+	movq	%rdx, 8(%rax)
+	movq	%rdx, 16(%rax)
+	movq	%rdx, 24(%rax)
+	movq	%rdx, 32(%rax)
+	movq	%rdx, 40(%rax)
+	movq	%rdx, 48(%rax)
+	movq	%rdx, 56(%rax)
+	movq	%rdx, 64(%rax)
+	movq	%rdx, 72(%rax)
+	movq	%rdx, 80(%rax)
+	movq	%rdx, 88(%rax)
+	movq	%rdx, 96(%rax)
+	movq	%rdx, 104(%rax)
+	movq	%rdx, 112(%rax)
+	movq	%rdx, 120(%rax)
+	movq	%rdx, 128(%rax)
+	movq	%rdx, 136(%rax)
+	movq	%rdx, 144(%rax)
+	movq	%rdx, 152(%rax)
+	movq	%rdx, 160(%rax)
+	movq	%rdx, 168(%rax)
+	movq	%rdx, 176(%rax)
+	movq	%rdx, 184(%rax)
+	movq	%rdx, 192(%rax)
+	movb	(%rcx), %dl
+	xorb	%dl, (%rax)
+	movb	1(%rcx), %dl
+	xorb	%dl, 1(%rax)
+	movb	2(%rcx), %dl
+	xorb	%dl, 2(%rax)
+	movb	3(%rcx), %dl
+	xorb	%dl, 3(%rax)
+	movb	4(%rcx), %dl
+	xorb	%dl, 4(%rax)
+	movb	5(%rcx), %dl
+	xorb	%dl, 5(%rax)
+	movb	6(%rcx), %dl
+	xorb	%dl, 6(%rax)
+	movb	7(%rcx), %dl
+	xorb	%dl, 7(%rax)
+	movb	8(%rcx), %dl
+	xorb	%dl, 8(%rax)
+	movb	9(%rcx), %dl
+	xorb	%dl, 9(%rax)
+	movb	10(%rcx), %dl
+	xorb	%dl, 10(%rax)
+	movb	11(%rcx), %dl
+	xorb	%dl, 11(%rax)
+	movb	12(%rcx), %dl
+	xorb	%dl, 12(%rax)
+	movb	13(%rcx), %dl
+	xorb	%dl, 13(%rax)
+	movb	14(%rcx), %dl
+	xorb	%dl, 14(%rax)
+	movb	15(%rcx), %dl
+	xorb	%dl, 15(%rax)
+	movb	16(%rcx), %dl
+	xorb	%dl, 16(%rax)
+	movb	17(%rcx), %dl
+	xorb	%dl, 17(%rax)
+	movb	18(%rcx), %dl
+	xorb	%dl, 18(%rax)
+	movb	19(%rcx), %dl
+	xorb	%dl, 19(%rax)
+	movb	20(%rcx), %dl
+	xorb	%dl, 20(%rax)
+	movb	21(%rcx), %dl
+	xorb	%dl, 21(%rax)
+	movb	22(%rcx), %dl
+	xorb	%dl, 22(%rax)
+	movb	23(%rcx), %dl
+	xorb	%dl, 23(%rax)
+	movb	24(%rcx), %dl
+	xorb	%dl, 24(%rax)
+	movb	25(%rcx), %dl
+	xorb	%dl, 25(%rax)
+	movb	26(%rcx), %dl
+	xorb	%dl, 26(%rax)
+	movb	27(%rcx), %dl
+	xorb	%dl, 27(%rax)
+	movb	28(%rcx), %dl
+	xorb	%dl, 28(%rax)
+	movb	29(%rcx), %dl
+	xorb	%dl, 29(%rax)
+	movb	30(%rcx), %dl
+	xorb	%dl, 30(%rax)
+	movb	31(%rcx), %dl
+	xorb	%dl, 31(%rax)
+	movb	32(%rcx), %cl
+	xorb	%cl, 32(%rax)
+	xorb	$31, 33(%rax)
+	xorb	$-128, 135(%rax)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_shake256_128_33$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rcx
+	movb	(%rax), %dl
+	movb	%dl, (%rcx)
+	movb	1(%rax), %dl
+	movb	%dl, 1(%rcx)
+	movb	2(%rax), %dl
+	movb	%dl, 2(%rcx)
+	movb	3(%rax), %dl
+	movb	%dl, 3(%rcx)
+	movb	4(%rax), %dl
+	movb	%dl, 4(%rcx)
+	movb	5(%rax), %dl
+	movb	%dl, 5(%rcx)
+	movb	6(%rax), %dl
+	movb	%dl, 6(%rcx)
+	movb	7(%rax), %dl
+	movb	%dl, 7(%rcx)
+	movb	8(%rax), %dl
+	movb	%dl, 8(%rcx)
+	movb	9(%rax), %dl
+	movb	%dl, 9(%rcx)
+	movb	10(%rax), %dl
+	movb	%dl, 10(%rcx)
+	movb	11(%rax), %dl
+	movb	%dl, 11(%rcx)
+	movb	12(%rax), %dl
+	movb	%dl, 12(%rcx)
+	movb	13(%rax), %dl
+	movb	%dl, 13(%rcx)
+	movb	14(%rax), %dl
+	movb	%dl, 14(%rcx)
+	movb	15(%rax), %dl
+	movb	%dl, 15(%rcx)
+	movb	16(%rax), %dl
+	movb	%dl, 16(%rcx)
+	movb	17(%rax), %dl
+	movb	%dl, 17(%rcx)
+	movb	18(%rax), %dl
+	movb	%dl, 18(%rcx)
+	movb	19(%rax), %dl
+	movb	%dl, 19(%rcx)
+	movb	20(%rax), %dl
+	movb	%dl, 20(%rcx)
+	movb	21(%rax), %dl
+	movb	%dl, 21(%rcx)
+	movb	22(%rax), %dl
+	movb	%dl, 22(%rcx)
+	movb	23(%rax), %dl
+	movb	%dl, 23(%rcx)
+	movb	24(%rax), %dl
+	movb	%dl, 24(%rcx)
+	movb	25(%rax), %dl
+	movb	%dl, 25(%rcx)
+	movb	26(%rax), %dl
+	movb	%dl, 26(%rcx)
+	movb	27(%rax), %dl
+	movb	%dl, 27(%rcx)
+	movb	28(%rax), %dl
+	movb	%dl, 28(%rcx)
+	movb	29(%rax), %dl
+	movb	%dl, 29(%rcx)
+	movb	30(%rax), %dl
+	movb	%dl, 30(%rcx)
+	movb	31(%rax), %dl
+	movb	%dl, 31(%rcx)
+	movb	32(%rax), %dl
+	movb	%dl, 32(%rcx)
+	movb	33(%rax), %dl
+	movb	%dl, 33(%rcx)
+	movb	34(%rax), %dl
+	movb	%dl, 34(%rcx)
+	movb	35(%rax), %dl
+	movb	%dl, 35(%rcx)
+	movb	36(%rax), %dl
+	movb	%dl, 36(%rcx)
+	movb	37(%rax), %dl
+	movb	%dl, 37(%rcx)
+	movb	38(%rax), %dl
+	movb	%dl, 38(%rcx)
+	movb	39(%rax), %dl
+	movb	%dl, 39(%rcx)
+	movb	40(%rax), %dl
+	movb	%dl, 40(%rcx)
+	movb	41(%rax), %dl
+	movb	%dl, 41(%rcx)
+	movb	42(%rax), %dl
+	movb	%dl, 42(%rcx)
+	movb	43(%rax), %dl
+	movb	%dl, 43(%rcx)
+	movb	44(%rax), %dl
+	movb	%dl, 44(%rcx)
+	movb	45(%rax), %dl
+	movb	%dl, 45(%rcx)
+	movb	46(%rax), %dl
+	movb	%dl, 46(%rcx)
+	movb	47(%rax), %dl
+	movb	%dl, 47(%rcx)
+	movb	48(%rax), %dl
+	movb	%dl, 48(%rcx)
+	movb	49(%rax), %dl
+	movb	%dl, 49(%rcx)
+	movb	50(%rax), %dl
+	movb	%dl, 50(%rcx)
+	movb	51(%rax), %dl
+	movb	%dl, 51(%rcx)
+	movb	52(%rax), %dl
+	movb	%dl, 52(%rcx)
+	movb	53(%rax), %dl
+	movb	%dl, 53(%rcx)
+	movb	54(%rax), %dl
+	movb	%dl, 54(%rcx)
+	movb	55(%rax), %dl
+	movb	%dl, 55(%rcx)
+	movb	56(%rax), %dl
+	movb	%dl, 56(%rcx)
+	movb	57(%rax), %dl
+	movb	%dl, 57(%rcx)
+	movb	58(%rax), %dl
+	movb	%dl, 58(%rcx)
+	movb	59(%rax), %dl
+	movb	%dl, 59(%rcx)
+	movb	60(%rax), %dl
+	movb	%dl, 60(%rcx)
+	movb	61(%rax), %dl
+	movb	%dl, 61(%rcx)
+	movb	62(%rax), %dl
+	movb	%dl, 62(%rcx)
+	movb	63(%rax), %dl
+	movb	%dl, 63(%rcx)
+	movb	64(%rax), %dl
+	movb	%dl, 64(%rcx)
+	movb	65(%rax), %dl
+	movb	%dl, 65(%rcx)
+	movb	66(%rax), %dl
+	movb	%dl, 66(%rcx)
+	movb	67(%rax), %dl
+	movb	%dl, 67(%rcx)
+	movb	68(%rax), %dl
+	movb	%dl, 68(%rcx)
+	movb	69(%rax), %dl
+	movb	%dl, 69(%rcx)
+	movb	70(%rax), %dl
+	movb	%dl, 70(%rcx)
+	movb	71(%rax), %dl
+	movb	%dl, 71(%rcx)
+	movb	72(%rax), %dl
+	movb	%dl, 72(%rcx)
+	movb	73(%rax), %dl
+	movb	%dl, 73(%rcx)
+	movb	74(%rax), %dl
+	movb	%dl, 74(%rcx)
+	movb	75(%rax), %dl
+	movb	%dl, 75(%rcx)
+	movb	76(%rax), %dl
+	movb	%dl, 76(%rcx)
+	movb	77(%rax), %dl
+	movb	%dl, 77(%rcx)
+	movb	78(%rax), %dl
+	movb	%dl, 78(%rcx)
+	movb	79(%rax), %dl
+	movb	%dl, 79(%rcx)
+	movb	80(%rax), %dl
+	movb	%dl, 80(%rcx)
+	movb	81(%rax), %dl
+	movb	%dl, 81(%rcx)
+	movb	82(%rax), %dl
+	movb	%dl, 82(%rcx)
+	movb	83(%rax), %dl
+	movb	%dl, 83(%rcx)
+	movb	84(%rax), %dl
+	movb	%dl, 84(%rcx)
+	movb	85(%rax), %dl
+	movb	%dl, 85(%rcx)
+	movb	86(%rax), %dl
+	movb	%dl, 86(%rcx)
+	movb	87(%rax), %dl
+	movb	%dl, 87(%rcx)
+	movb	88(%rax), %dl
+	movb	%dl, 88(%rcx)
+	movb	89(%rax), %dl
+	movb	%dl, 89(%rcx)
+	movb	90(%rax), %dl
+	movb	%dl, 90(%rcx)
+	movb	91(%rax), %dl
+	movb	%dl, 91(%rcx)
+	movb	92(%rax), %dl
+	movb	%dl, 92(%rcx)
+	movb	93(%rax), %dl
+	movb	%dl, 93(%rcx)
+	movb	94(%rax), %dl
+	movb	%dl, 94(%rcx)
+	movb	95(%rax), %dl
+	movb	%dl, 95(%rcx)
+	movb	96(%rax), %dl
+	movb	%dl, 96(%rcx)
+	movb	97(%rax), %dl
+	movb	%dl, 97(%rcx)
+	movb	98(%rax), %dl
+	movb	%dl, 98(%rcx)
+	movb	99(%rax), %dl
+	movb	%dl, 99(%rcx)
+	movb	100(%rax), %dl
+	movb	%dl, 100(%rcx)
+	movb	101(%rax), %dl
+	movb	%dl, 101(%rcx)
+	movb	102(%rax), %dl
+	movb	%dl, 102(%rcx)
+	movb	103(%rax), %dl
+	movb	%dl, 103(%rcx)
+	movb	104(%rax), %dl
+	movb	%dl, 104(%rcx)
+	movb	105(%rax), %dl
+	movb	%dl, 105(%rcx)
+	movb	106(%rax), %dl
+	movb	%dl, 106(%rcx)
+	movb	107(%rax), %dl
+	movb	%dl, 107(%rcx)
+	movb	108(%rax), %dl
+	movb	%dl, 108(%rcx)
+	movb	109(%rax), %dl
+	movb	%dl, 109(%rcx)
+	movb	110(%rax), %dl
+	movb	%dl, 110(%rcx)
+	movb	111(%rax), %dl
+	movb	%dl, 111(%rcx)
+	movb	112(%rax), %dl
+	movb	%dl, 112(%rcx)
+	movb	113(%rax), %dl
+	movb	%dl, 113(%rcx)
+	movb	114(%rax), %dl
+	movb	%dl, 114(%rcx)
+	movb	115(%rax), %dl
+	movb	%dl, 115(%rcx)
+	movb	116(%rax), %dl
+	movb	%dl, 116(%rcx)
+	movb	117(%rax), %dl
+	movb	%dl, 117(%rcx)
+	movb	118(%rax), %dl
+	movb	%dl, 118(%rcx)
+	movb	119(%rax), %dl
+	movb	%dl, 119(%rcx)
+	movb	120(%rax), %dl
+	movb	%dl, 120(%rcx)
+	movb	121(%rax), %dl
+	movb	%dl, 121(%rcx)
+	movb	122(%rax), %dl
+	movb	%dl, 122(%rcx)
+	movb	123(%rax), %dl
+	movb	%dl, 123(%rcx)
+	movb	124(%rax), %dl
+	movb	%dl, 124(%rcx)
+	movb	125(%rax), %dl
+	movb	%dl, 125(%rcx)
+	movb	126(%rax), %dl
+	movb	%dl, 126(%rcx)
+	movb	127(%rax), %al
+	movb	%al, 127(%rcx)
+	ret
+L_keccakf1600_ref1$1:
+	leaq	glob_data + 0(%rip), %rcx
+	movq	%rcx, 8(%rsp)
+	leaq	24(%rsp), %rcx
+	movq	$0, %rdx
+	jmp 	L_keccakf1600_ref1$2
+L_keccakf1600_ref1$3:
+	movq	8(%rsp), %rsi
+	movq	(%rsi,%rdx,8), %rsi
+	movq	%rsi, 16(%rsp)
+	movq	(%rax), %r10
+	movq	8(%rax), %r9
+	movq	16(%rax), %r11
+	movq	24(%rax), %rbx
+	movq	32(%rax), %rbp
+	xorq	40(%rax), %r10
+	xorq	48(%rax), %r9
+	xorq	56(%rax), %r11
+	xorq	64(%rax), %rbx
+	xorq	72(%rax), %rbp
+	xorq	80(%rax), %r10
+	xorq	88(%rax), %r9
+	xorq	96(%rax), %r11
+	xorq	104(%rax), %rbx
+	xorq	112(%rax), %rbp
+	xorq	120(%rax), %r10
+	xorq	128(%rax), %r9
+	xorq	136(%rax), %r11
+	xorq	144(%rax), %rbx
+	xorq	152(%rax), %rbp
+	xorq	160(%rax), %r10
+	xorq	168(%rax), %r9
+	xorq	176(%rax), %r11
+	xorq	184(%rax), %rbx
+	xorq	192(%rax), %rbp
+	movq	%r9, %rsi
+	rolq	$1, %rsi
+	xorq	%rbp, %rsi
+	movq	%r11, %rdi
+	rolq	$1, %rdi
+	xorq	%r10, %rdi
+	movq	%rbx, %r8
+	rolq	$1, %r8
+	xorq	%r9, %r8
+	movq	%rbp, %r9
+	rolq	$1, %r9
+	xorq	%r11, %r9
+	rolq	$1, %r10
+	xorq	%rbx, %r10
+	movq	(%rax), %r11
+	xorq	%rsi, %r11
+	movq	48(%rax), %rbx
+	xorq	%rdi, %rbx
+	rolq	$44, %rbx
+	movq	96(%rax), %rbp
+	xorq	%r8, %rbp
+	rolq	$43, %rbp
+	movq	144(%rax), %r12
+	xorq	%r9, %r12
+	rolq	$21, %r12
+	movq	192(%rax), %r13
+	xorq	%r10, %r13
+	rolq	$14, %r13
+	movq	%rbx, %r14
+	notq	%r14
+	andq	%rbp, %r14
+	xorq	%r11, %r14
+	xorq	16(%rsp), %r14
+	movq	%r14, (%rcx)
+	movq	%rbp, %r14
+	notq	%r14
+	andq	%r12, %r14
+	xorq	%rbx, %r14
+	movq	%r14, 8(%rcx)
+	movq	%r12, %r14
+	notq	%r14
+	andq	%r13, %r14
+	xorq	%rbp, %r14
+	movq	%r14, 16(%rcx)
+	movq	%r13, %rbp
+	notq	%rbp
+	andq	%r11, %rbp
+	xorq	%r12, %rbp
+	movq	%rbp, 24(%rcx)
+	notq	%r11
+	andq	%rbx, %r11
+	xorq	%r13, %r11
+	movq	%r11, 32(%rcx)
+	movq	24(%rax), %r11
+	xorq	%r9, %r11
+	rolq	$28, %r11
+	movq	72(%rax), %rbx
+	xorq	%r10, %rbx
+	rolq	$20, %rbx
+	movq	80(%rax), %rbp
+	xorq	%rsi, %rbp
+	rolq	$3, %rbp
+	movq	128(%rax), %r12
+	xorq	%rdi, %r12
+	rolq	$45, %r12
+	movq	176(%rax), %r13
+	xorq	%r8, %r13
+	rolq	$61, %r13
+	movq	%rbx, %r14
+	notq	%r14
+	andq	%rbp, %r14
+	xorq	%r11, %r14
+	movq	%r14, 40(%rcx)
+	movq	%rbp, %r14
+	notq	%r14
+	andq	%r12, %r14
+	xorq	%rbx, %r14
+	movq	%r14, 48(%rcx)
+	movq	%r12, %r14
+	notq	%r14
+	andq	%r13, %r14
+	xorq	%rbp, %r14
+	movq	%r14, 56(%rcx)
+	movq	%r13, %rbp
+	notq	%rbp
+	andq	%r11, %rbp
+	xorq	%r12, %rbp
+	movq	%rbp, 64(%rcx)
+	notq	%r11
+	andq	%rbx, %r11
+	xorq	%r13, %r11
+	movq	%r11, 72(%rcx)
+	movq	8(%rax), %r11
+	xorq	%rdi, %r11
+	rolq	$1, %r11
+	movq	56(%rax), %rbx
+	xorq	%r8, %rbx
+	rolq	$6, %rbx
+	movq	104(%rax), %rbp
+	xorq	%r9, %rbp
+	rolq	$25, %rbp
+	movq	152(%rax), %r12
+	xorq	%r10, %r12
+	rolq	$8, %r12
+	movq	160(%rax), %r13
+	xorq	%rsi, %r13
+	rolq	$18, %r13
+	movq	%rbx, %r14
+	notq	%r14
+	andq	%rbp, %r14
+	xorq	%r11, %r14
+	movq	%r14, 80(%rcx)
+	movq	%rbp, %r14
+	notq	%r14
+	andq	%r12, %r14
+	xorq	%rbx, %r14
+	movq	%r14, 88(%rcx)
+	movq	%r12, %r14
+	notq	%r14
+	andq	%r13, %r14
+	xorq	%rbp, %r14
+	movq	%r14, 96(%rcx)
+	movq	%r13, %rbp
+	notq	%rbp
+	andq	%r11, %rbp
+	xorq	%r12, %rbp
+	movq	%rbp, 104(%rcx)
+	notq	%r11
+	andq	%rbx, %r11
+	xorq	%r13, %r11
+	movq	%r11, 112(%rcx)
+	movq	32(%rax), %r11
+	xorq	%r10, %r11
+	rolq	$27, %r11
+	movq	40(%rax), %rbx
+	xorq	%rsi, %rbx
+	rolq	$36, %rbx
+	movq	88(%rax), %rbp
+	xorq	%rdi, %rbp
+	rolq	$10, %rbp
+	movq	136(%rax), %r12
+	xorq	%r8, %r12
+	rolq	$15, %r12
+	movq	184(%rax), %r13
+	xorq	%r9, %r13
+	rolq	$56, %r13
+	movq	%rbx, %r14
+	notq	%r14
+	andq	%rbp, %r14
+	xorq	%r11, %r14
+	movq	%r14, 120(%rcx)
+	movq	%rbp, %r14
+	notq	%r14
+	andq	%r12, %r14
+	xorq	%rbx, %r14
+	movq	%r14, 128(%rcx)
+	movq	%r12, %r14
+	notq	%r14
+	andq	%r13, %r14
+	xorq	%rbp, %r14
+	movq	%r14, 136(%rcx)
+	movq	%r13, %rbp
+	notq	%rbp
+	andq	%r11, %rbp
+	xorq	%r12, %rbp
+	movq	%rbp, 144(%rcx)
+	notq	%r11
+	andq	%rbx, %r11
+	xorq	%r13, %r11
+	movq	%r11, 152(%rcx)
+	movq	16(%rax), %r11
+	xorq	%r8, %r11
+	rolq	$62, %r11
+	movq	64(%rax), %r8
+	xorq	%r9, %r8
+	rolq	$55, %r8
+	movq	112(%rax), %r9
+	xorq	%r10, %r9
+	rolq	$39, %r9
+	movq	120(%rax), %r10
+	xorq	%rsi, %r10
+	rolq	$41, %r10
+	movq	168(%rax), %rsi
+	xorq	%rdi, %rsi
+	rolq	$2, %rsi
+	movq	%r8, %rdi
+	notq	%rdi
+	andq	%r9, %rdi
+	xorq	%r11, %rdi
+	movq	%rdi, 160(%rcx)
+	movq	%r9, %rdi
+	notq	%rdi
+	andq	%r10, %rdi
+	xorq	%r8, %rdi
+	movq	%rdi, 168(%rcx)
+	movq	%r10, %rdi
+	notq	%rdi
+	andq	%rsi, %rdi
+	xorq	%r9, %rdi
+	movq	%rdi, 176(%rcx)
+	movq	%rsi, %rdi
+	notq	%rdi
+	andq	%r11, %rdi
+	xorq	%r10, %rdi
+	movq	%rdi, 184(%rcx)
+	notq	%r11
+	andq	%r8, %r11
+	xorq	%rsi, %r11
+	movq	%r11, 192(%rcx)
+	movq	8(%rsp), %rsi
+	movq	8(%rsi,%rdx,8), %rsi
+	movq	%rsi, 16(%rsp)
+	movq	(%rcx), %r10
+	movq	8(%rcx), %r9
+	movq	16(%rcx), %r11
+	movq	24(%rcx), %rbx
+	movq	32(%rcx), %rbp
+	xorq	40(%rcx), %r10
+	xorq	48(%rcx), %r9
+	xorq	56(%rcx), %r11
+	xorq	64(%rcx), %rbx
+	xorq	72(%rcx), %rbp
+	xorq	80(%rcx), %r10
+	xorq	88(%rcx), %r9
+	xorq	96(%rcx), %r11
+	xorq	104(%rcx), %rbx
+	xorq	112(%rcx), %rbp
+	xorq	120(%rcx), %r10
+	xorq	128(%rcx), %r9
+	xorq	136(%rcx), %r11
+	xorq	144(%rcx), %rbx
+	xorq	152(%rcx), %rbp
+	xorq	160(%rcx), %r10
+	xorq	168(%rcx), %r9
+	xorq	176(%rcx), %r11
+	xorq	184(%rcx), %rbx
+	xorq	192(%rcx), %rbp
+	movq	%r9, %rsi
+	rolq	$1, %rsi
+	xorq	%rbp, %rsi
+	movq	%r11, %rdi
+	rolq	$1, %rdi
+	xorq	%r10, %rdi
+	movq	%rbx, %r8
+	rolq	$1, %r8
+	xorq	%r9, %r8
+	movq	%rbp, %r9
+	rolq	$1, %r9
+	xorq	%r11, %r9
+	rolq	$1, %r10
+	xorq	%rbx, %r10
+	movq	(%rcx), %r11
+	xorq	%rsi, %r11
+	movq	48(%rcx), %rbx
+	xorq	%rdi, %rbx
+	rolq	$44, %rbx
+	movq	96(%rcx), %rbp
+	xorq	%r8, %rbp
+	rolq	$43, %rbp
+	movq	144(%rcx), %r12
+	xorq	%r9, %r12
+	rolq	$21, %r12
+	movq	192(%rcx), %r13
+	xorq	%r10, %r13
+	rolq	$14, %r13
+	movq	%rbx, %r14
+	notq	%r14
+	andq	%rbp, %r14
+	xorq	%r11, %r14
+	xorq	16(%rsp), %r14
+	movq	%r14, (%rax)
+	movq	%rbp, %r14
+	notq	%r14
+	andq	%r12, %r14
+	xorq	%rbx, %r14
+	movq	%r14, 8(%rax)
+	movq	%r12, %r14
+	notq	%r14
+	andq	%r13, %r14
+	xorq	%rbp, %r14
+	movq	%r14, 16(%rax)
+	movq	%r13, %rbp
+	notq	%rbp
+	andq	%r11, %rbp
+	xorq	%r12, %rbp
+	movq	%rbp, 24(%rax)
+	notq	%r11
+	andq	%rbx, %r11
+	xorq	%r13, %r11
+	movq	%r11, 32(%rax)
+	movq	24(%rcx), %r11
+	xorq	%r9, %r11
+	rolq	$28, %r11
+	movq	72(%rcx), %rbx
+	xorq	%r10, %rbx
+	rolq	$20, %rbx
+	movq	80(%rcx), %rbp
+	xorq	%rsi, %rbp
+	rolq	$3, %rbp
+	movq	128(%rcx), %r12
+	xorq	%rdi, %r12
+	rolq	$45, %r12
+	movq	176(%rcx), %r13
+	xorq	%r8, %r13
+	rolq	$61, %r13
+	movq	%rbx, %r14
+	notq	%r14
+	andq	%rbp, %r14
+	xorq	%r11, %r14
+	movq	%r14, 40(%rax)
+	movq	%rbp, %r14
+	notq	%r14
+	andq	%r12, %r14
+	xorq	%rbx, %r14
+	movq	%r14, 48(%rax)
+	movq	%r12, %r14
+	notq	%r14
+	andq	%r13, %r14
+	xorq	%rbp, %r14
+	movq	%r14, 56(%rax)
+	movq	%r13, %rbp
+	notq	%rbp
+	andq	%r11, %rbp
+	xorq	%r12, %rbp
+	movq	%rbp, 64(%rax)
+	notq	%r11
+	andq	%rbx, %r11
+	xorq	%r13, %r11
+	movq	%r11, 72(%rax)
+	movq	8(%rcx), %r11
+	xorq	%rdi, %r11
+	rolq	$1, %r11
+	movq	56(%rcx), %rbx
+	xorq	%r8, %rbx
+	rolq	$6, %rbx
+	movq	104(%rcx), %rbp
+	xorq	%r9, %rbp
+	rolq	$25, %rbp
+	movq	152(%rcx), %r12
+	xorq	%r10, %r12
+	rolq	$8, %r12
+	movq	160(%rcx), %r13
+	xorq	%rsi, %r13
+	rolq	$18, %r13
+	movq	%rbx, %r14
+	notq	%r14
+	andq	%rbp, %r14
+	xorq	%r11, %r14
+	movq	%r14, 80(%rax)
+	movq	%rbp, %r14
+	notq	%r14
+	andq	%r12, %r14
+	xorq	%rbx, %r14
+	movq	%r14, 88(%rax)
+	movq	%r12, %r14
+	notq	%r14
+	andq	%r13, %r14
+	xorq	%rbp, %r14
+	movq	%r14, 96(%rax)
+	movq	%r13, %rbp
+	notq	%rbp
+	andq	%r11, %rbp
+	xorq	%r12, %rbp
+	movq	%rbp, 104(%rax)
+	notq	%r11
+	andq	%rbx, %r11
+	xorq	%r13, %r11
+	movq	%r11, 112(%rax)
+	movq	32(%rcx), %r11
+	xorq	%r10, %r11
+	rolq	$27, %r11
+	movq	40(%rcx), %rbx
+	xorq	%rsi, %rbx
+	rolq	$36, %rbx
+	movq	88(%rcx), %rbp
+	xorq	%rdi, %rbp
+	rolq	$10, %rbp
+	movq	136(%rcx), %r12
+	xorq	%r8, %r12
+	rolq	$15, %r12
+	movq	184(%rcx), %r13
+	xorq	%r9, %r13
+	rolq	$56, %r13
+	movq	%rbx, %r14
+	notq	%r14
+	andq	%rbp, %r14
+	xorq	%r11, %r14
+	movq	%r14, 120(%rax)
+	movq	%rbp, %r14
+	notq	%r14
+	andq	%r12, %r14
+	xorq	%rbx, %r14
+	movq	%r14, 128(%rax)
+	movq	%r12, %r14
+	notq	%r14
+	andq	%r13, %r14
+	xorq	%rbp, %r14
+	movq	%r14, 136(%rax)
+	movq	%r13, %rbp
+	notq	%rbp
+	andq	%r11, %rbp
+	xorq	%r12, %rbp
+	movq	%rbp, 144(%rax)
+	notq	%r11
+	andq	%rbx, %r11
+	xorq	%r13, %r11
+	movq	%r11, 152(%rax)
+	movq	16(%rcx), %r11
+	xorq	%r8, %r11
+	rolq	$62, %r11
+	movq	64(%rcx), %r8
+	xorq	%r9, %r8
+	rolq	$55, %r8
+	movq	112(%rcx), %r9
+	xorq	%r10, %r9
+	rolq	$39, %r9
+	movq	120(%rcx), %r10
+	xorq	%rsi, %r10
+	rolq	$41, %r10
+	movq	168(%rcx), %rsi
+	xorq	%rdi, %rsi
+	rolq	$2, %rsi
+	movq	%r8, %rdi
+	notq	%rdi
+	andq	%r9, %rdi
+	xorq	%r11, %rdi
+	movq	%rdi, 160(%rax)
+	movq	%r9, %rdi
+	notq	%rdi
+	andq	%r10, %rdi
+	xorq	%r8, %rdi
+	movq	%rdi, 168(%rax)
+	movq	%r10, %rdi
+	notq	%rdi
+	andq	%rsi, %rdi
+	xorq	%r9, %rdi
+	movq	%rdi, 176(%rax)
+	movq	%rsi, %rdi
+	notq	%rdi
+	andq	%r11, %rdi
+	xorq	%r10, %rdi
+	movq	%rdi, 184(%rax)
+	notq	%r11
+	andq	%r8, %r11
+	xorq	%rsi, %r11
+	movq	%r11, 192(%rax)
+	addq	$2, %rdx
+L_keccakf1600_ref1$2:
+	cmpq	$23, %rdx
+	jb  	L_keccakf1600_ref1$3
+	ret
+	.data
+	.p2align	5
+_glob_data:
+glob_data:
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -91
+      .byte 6
+      .byte 15
+      .byte 7
+      .byte -76
+      .byte 5
+      .byte 67
+      .byte 9
+      .byte 34
+      .byte 9
+      .byte 29
+      .byte 9
+      .byte 52
+      .byte 1
+      .byte 108
+      .byte 0
+      .byte 35
+      .byte 11
+      .byte 102
+      .byte 3
+      .byte 86
+      .byte 3
+      .byte -26
+      .byte 5
+      .byte -25
+      .byte 9
+      .byte -2
+      .byte 4
+      .byte -6
+      .byte 5
+      .byte -95
+      .byte 4
+      .byte 123
+      .byte 6
+      .byte -93
+      .byte 4
+      .byte 37
+      .byte 12
+      .byte 106
+      .byte 3
+      .byte 55
+      .byte 5
+      .byte 63
+      .byte 8
+      .byte -120
+      .byte 0
+      .byte -65
+      .byte 4
+      .byte -127
+      .byte 11
+      .byte -71
+      .byte 5
+      .byte 5
+      .byte 5
+      .byte -41
+      .byte 7
+      .byte -97
+      .byte 10
+      .byte -90
+      .byte 10
+      .byte -72
+      .byte 8
+      .byte -48
+      .byte 9
+      .byte 75
+      .byte 0
+      .byte -100
+      .byte 0
+      .byte -72
+      .byte 11
+      .byte 95
+      .byte 11
+      .byte -92
+      .byte 11
+      .byte 104
+      .byte 3
+      .byte 125
+      .byte 10
+      .byte 54
+      .byte 6
+      .byte -94
+      .byte 8
+      .byte 90
+      .byte 2
+      .byte 54
+      .byte 7
+      .byte 9
+      .byte 3
+      .byte -109
+      .byte 0
+      .byte 122
+      .byte 8
+      .byte -9
+      .byte 9
+      .byte -10
+      .byte 0
+      .byte -116
+      .byte 6
+      .byte -37
+      .byte 6
+      .byte -52
+      .byte 1
+      .byte 35
+      .byte 1
+      .byte -21
+      .byte 0
+      .byte 80
+      .byte 12
+      .byte -74
+      .byte 10
+      .byte 91
+      .byte 11
+      .byte -104
+      .byte 12
+      .byte -13
+      .byte 6
+      .byte -102
+      .byte 9
+      .byte -29
+      .byte 4
+      .byte -74
+      .byte 9
+      .byte -42
+      .byte 10
+      .byte 83
+      .byte 11
+      .byte 79
+      .byte 4
+      .byte -5
+      .byte 4
+      .byte 92
+      .byte 10
+      .byte 41
+      .byte 4
+      .byte 65
+      .byte 11
+      .byte -43
+      .byte 2
+      .byte -28
+      .byte 5
+      .byte 64
+      .byte 9
+      .byte -114
+      .byte 1
+      .byte -73
+      .byte 3
+      .byte -9
+      .byte 0
+      .byte -115
+      .byte 5
+      .byte -106
+      .byte 12
+      .byte -61
+      .byte 9
+      .byte 15
+      .byte 1
+      .byte 90
+      .byte 0
+      .byte 85
+      .byte 3
+      .byte 68
+      .byte 7
+      .byte -125
+      .byte 12
+      .byte -118
+      .byte 4
+      .byte 82
+      .byte 6
+      .byte -102
+      .byte 2
+      .byte 64
+      .byte 1
+      .byte 8
+      .byte 0
+      .byte -3
+      .byte 10
+      .byte 8
+      .byte 6
+      .byte 26
+      .byte 1
+      .byte 46
+      .byte 7
+      .byte 13
+      .byte 5
+      .byte 10
+      .byte 9
+      .byte 40
+      .byte 2
+      .byte 117
+      .byte 10
+      .byte 58
+      .byte 8
+      .byte 35
+      .byte 6
+      .byte -51
+      .byte 0
+      .byte 102
+      .byte 11
+      .byte 6
+      .byte 6
+      .byte -95
+      .byte 10
+      .byte 37
+      .byte 10
+      .byte 8
+      .byte 9
+      .byte -87
+      .byte 2
+      .byte -126
+      .byte 0
+      .byte 66
+      .byte 6
+      .byte 79
+      .byte 7
+      .byte 61
+      .byte 3
+      .byte -126
+      .byte 11
+      .byte -7
+      .byte 11
+      .byte 45
+      .byte 5
+      .byte -60
+      .byte 10
+      .byte 69
+      .byte 7
+      .byte -62
+      .byte 5
+      .byte -78
+      .byte 4
+      .byte 63
+      .byte 9
+      .byte 75
+      .byte 12
+      .byte -40
+      .byte 6
+      .byte -109
+      .byte 10
+      .byte -85
+      .byte 0
+      .byte 55
+      .byte 12
+      .byte -30
+      .byte 11
+      .byte 115
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte -19
+      .byte 5
+      .byte 103
+      .byte 1
+      .byte -10
+      .byte 2
+      .byte -95
+      .byte 5
+      .byte -19
+      .byte 8
+      .byte 11
+      .byte 10
+      .byte -102
+      .byte 11
+      .byte 20
+      .byte 7
+      .byte -43
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte 31
+      .byte 1
+      .byte -54
+      .byte 0
+      .byte 86
+      .byte 12
+      .byte 110
+      .byte 2
+      .byte 41
+      .byte 6
+      .byte -74
+      .byte 0
+      .byte -62
+      .byte 3
+      .byte 79
+      .byte 8
+      .byte 63
+      .byte 7
+      .byte -68
+      .byte 5
+      .byte 61
+      .byte 2
+      .byte -44
+      .byte 7
+      .byte 8
+      .byte 1
+      .byte 127
+      .byte 1
+      .byte -60
+      .byte 9
+      .byte -78
+      .byte 5
+      .byte -65
+      .byte 6
+      .byte 127
+      .byte 12
+      .byte 88
+      .byte 10
+      .byte -7
+      .byte 3
+      .byte -36
+      .byte 2
+      .byte 96
+      .byte 2
+      .byte -5
+      .byte 6
+      .byte -101
+      .byte 1
+      .byte 52
+      .byte 12
+      .byte -34
+      .byte 6
+      .byte -57
+      .byte 4
+      .byte -116
+      .byte 2
+      .byte -39
+      .byte 10
+      .byte -9
+      .byte 3
+      .byte -12
+      .byte 7
+      .byte -45
+      .byte 5
+      .byte -25
+      .byte 11
+      .byte -7
+      .byte 6
+      .byte 4
+      .byte 2
+      .byte -7
+      .byte 12
+      .byte -63
+      .byte 11
+      .byte 103
+      .byte 10
+      .byte -81
+      .byte 6
+      .byte 119
+      .byte 8
+      .byte 126
+      .byte 0
+      .byte -67
+      .byte 5
+      .byte -84
+      .byte 9
+      .byte -89
+      .byte 12
+      .byte -14
+      .byte 11
+      .byte 62
+      .byte 3
+      .byte 107
+      .byte 0
+      .byte 116
+      .byte 7
+      .byte 10
+      .byte 12
+      .byte 74
+      .byte 9
+      .byte 115
+      .byte 11
+      .byte -63
+      .byte 3
+      .byte 29
+      .byte 7
+      .byte 44
+      .byte 10
+      .byte -64
+      .byte 1
+      .byte -40
+      .byte 8
+      .byte -91
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte -78
+      .byte 8
+      .byte -82
+      .byte 1
+      .byte 43
+      .byte 2
+      .byte 75
+      .byte 3
+      .byte 30
+      .byte 8
+      .byte 103
+      .byte 3
+      .byte 14
+      .byte 6
+      .byte 105
+      .byte 0
+      .byte -90
+      .byte 1
+      .byte 75
+      .byte 2
+      .byte -79
+      .byte 0
+      .byte 22
+      .byte 12
+      .byte -34
+      .byte 11
+      .byte 53
+      .byte 11
+      .byte 38
+      .byte 6
+      .byte 117
+      .byte 6
+      .byte 11
+      .byte 12
+      .byte 10
+      .byte 3
+      .byte -121
+      .byte 4
+      .byte 110
+      .byte 12
+      .byte -8
+      .byte 9
+      .byte -53
+      .byte 5
+      .byte -89
+      .byte 10
+      .byte 95
+      .byte 4
+      .byte -53
+      .byte 6
+      .byte -124
+      .byte 2
+      .byte -103
+      .byte 9
+      .byte 93
+      .byte 1
+      .byte -94
+      .byte 1
+      .byte 73
+      .byte 1
+      .byte 101
+      .byte 12
+      .byte -74
+      .byte 12
+      .byte 49
+      .byte 3
+      .byte 73
+      .byte 4
+      .byte 91
+      .byte 2
+      .byte 98
+      .byte 2
+      .byte 42
+      .byte 5
+      .byte -4
+      .byte 7
+      .byte 72
+      .byte 7
+      .byte -128
+      .byte 1
+      .byte 66
+      .byte 8
+      .byte 121
+      .byte 12
+      .byte -62
+      .byte 4
+      .byte -54
+      .byte 7
+      .byte -105
+      .byte 9
+      .byte -36
+      .byte 0
+      .byte 94
+      .byte 8
+      .byte -122
+      .byte 6
+      .byte 96
+      .byte 8
+      .byte 7
+      .byte 7
+      .byte 3
+      .byte 8
+      .byte 26
+      .byte 3
+      .byte 27
+      .byte 7
+      .byte -85
+      .byte 9
+      .byte -101
+      .byte 9
+      .byte -34
+      .byte 1
+      .byte -107
+      .byte 12
+      .byte -51
+      .byte 11
+      .byte -28
+      .byte 3
+      .byte -33
+      .byte 3
+      .byte -66
+      .byte 3
+      .byte 77
+      .byte 7
+      .byte -14
+      .byte 5
+      .byte 92
+      .byte 6
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/.deps/kem.s.d b/src/kem/kyber/libjade_kyber768_amd64_avx2/.deps/kem.s.d
new file mode 100644
index 0000000000..2fb0ff7f8d
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_avx2/.deps/kem.s.d
@@ -0,0 +1 @@
+kem.s: kem.jazz /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/avx2/indcpa.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/common/params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/poly.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_DIRTY.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/avx2/keccak1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/avx2/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_4x_DIRTY.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/avx2/keccakf1600_4x.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600_globals.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_xof/shake256/amd64/avx2/shake256_4x.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/shuffle.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/consts.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/reduce.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/polyvec.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/avx2/gen_matrix.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_xof/shake128/amd64/avx2/shake128_4x.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/tofromstack.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/verify.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/kem.jinc
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/Makefile b/src/kem/kyber/libjade_kyber768_amd64_avx2/Makefile
new file mode 100644
index 0000000000..eec5ee0e38
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_avx2/Makefile
@@ -0,0 +1,3 @@
+SRCS := kem.jazz
+include ../../../../../Makefile.common
+
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/api.c b/src/kem/kyber/libjade_kyber768_amd64_avx2/api.c
new file mode 100644
index 0000000000..15571bf96a
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_avx2/api.c
@@ -0,0 +1,20 @@
+#include <oqs/rand.h>
+#include "libjade_randombytes.h"
+#include "api.h"
+
+int libjade_kyber768_amd64_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
+    uint8_t keypair_coins[JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES];
+    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2);
+    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2);
+    return jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(public_key, secret_key, keypair_coins);
+}
+
+int libjade_kyber768_amd64_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
+    uint8_t enc_coins[JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES];
+    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES);
+    return jade_kem_kyber_kyber768_amd64_avx2_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
+}
+
+int libjade_kyber768_amd64_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
+    return jade_kem_kyber_kyber768_amd64_avx2_dec(shared_secret, ciphertext, secret_key);
+}
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/gen_matrix.jinc b/src/kem/kyber/libjade_kyber768_amd64_avx2/gen_matrix.jinc
new file mode 100644
index 0000000000..9ae8a16763
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_avx2/gen_matrix.jinc
@@ -0,0 +1,790 @@
+from Jade require "common/keccak/common/fips202_DIRTY.jinc"
+from Jade require "common/keccak/common/fips202_4x_DIRTY.jinc"
+from Jade require "crypto_xof/shake128/amd64/avx2/shake128_4x.jinc"
+
+param int GENMATRIX_NBLOCKS = ((12*KYBER_N/8*4096/KYBER_Q + SHAKE128_RATE)/SHAKE128_RATE);
+param int REJ_UNIFORM_AVX_BUFLEN = GENMATRIX_NBLOCKS * SHAKE128_RATE;
+
+u8[2048] ru_idx = {-1, -1, -1, -1, -1, -1, -1, -1,
+                0, -1, -1, -1, -1, -1, -1, -1,
+                2, -1, -1, -1, -1, -1, -1, -1,
+                0,  2, -1, -1, -1, -1, -1, -1,
+                4, -1, -1, -1, -1, -1, -1, -1,
+                0,  4, -1, -1, -1, -1, -1, -1,
+                2,  4, -1, -1, -1, -1, -1, -1,
+                0,  2,  4, -1, -1, -1, -1, -1,
+                6, -1, -1, -1, -1, -1, -1, -1,
+                0,  6, -1, -1, -1, -1, -1, -1,
+                2,  6, -1, -1, -1, -1, -1, -1,
+                0,  2,  6, -1, -1, -1, -1, -1,
+                4,  6, -1, -1, -1, -1, -1, -1,
+                0,  4,  6, -1, -1, -1, -1, -1,
+                2,  4,  6, -1, -1, -1, -1, -1,
+                0,  2,  4,  6, -1, -1, -1, -1,
+                8, -1, -1, -1, -1, -1, -1, -1,
+                0,  8, -1, -1, -1, -1, -1, -1,
+                2,  8, -1, -1, -1, -1, -1, -1,
+                0,  2,  8, -1, -1, -1, -1, -1,
+                4,  8, -1, -1, -1, -1, -1, -1,
+                0,  4,  8, -1, -1, -1, -1, -1,
+                2,  4,  8, -1, -1, -1, -1, -1,
+                0,  2,  4,  8, -1, -1, -1, -1,
+                6,  8, -1, -1, -1, -1, -1, -1,
+                0,  6,  8, -1, -1, -1, -1, -1,
+                2,  6,  8, -1, -1, -1, -1, -1,
+                0,  2,  6,  8, -1, -1, -1, -1,
+                4,  6,  8, -1, -1, -1, -1, -1,
+                0,  4,  6,  8, -1, -1, -1, -1,
+                2,  4,  6,  8, -1, -1, -1, -1,
+                0,  2,  4,  6,  8, -1, -1, -1,
+                10, -1, -1, -1, -1, -1, -1, -1,
+                0, 10, -1, -1, -1, -1, -1, -1,
+                2, 10, -1, -1, -1, -1, -1, -1,
+                0,  2, 10, -1, -1, -1, -1, -1,
+                4, 10, -1, -1, -1, -1, -1, -1,
+                0,  4, 10, -1, -1, -1, -1, -1,
+                2,  4, 10, -1, -1, -1, -1, -1,
+                0,  2,  4, 10, -1, -1, -1, -1,
+                6, 10, -1, -1, -1, -1, -1, -1,
+                0,  6, 10, -1, -1, -1, -1, -1,
+                2,  6, 10, -1, -1, -1, -1, -1,
+                0,  2,  6, 10, -1, -1, -1, -1,
+                4,  6, 10, -1, -1, -1, -1, -1,
+                0,  4,  6, 10, -1, -1, -1, -1,
+                2,  4,  6, 10, -1, -1, -1, -1,
+                0,  2,  4,  6, 10, -1, -1, -1,
+                8, 10, -1, -1, -1, -1, -1, -1,
+                0,  8, 10, -1, -1, -1, -1, -1,
+                2,  8, 10, -1, -1, -1, -1, -1,
+                0,  2,  8, 10, -1, -1, -1, -1,
+                4,  8, 10, -1, -1, -1, -1, -1,
+                0,  4,  8, 10, -1, -1, -1, -1,
+                2,  4,  8, 10, -1, -1, -1, -1,
+                0,  2,  4,  8, 10, -1, -1, -1,
+                6,  8, 10, -1, -1, -1, -1, -1,
+                0,  6,  8, 10, -1, -1, -1, -1,
+                2,  6,  8, 10, -1, -1, -1, -1,
+                0,  2,  6,  8, 10, -1, -1, -1,
+                4,  6,  8, 10, -1, -1, -1, -1,
+                0,  4,  6,  8, 10, -1, -1, -1,
+                2,  4,  6,  8, 10, -1, -1, -1,
+                0,  2,  4,  6,  8, 10, -1, -1,
+                12, -1, -1, -1, -1, -1, -1, -1,
+                0, 12, -1, -1, -1, -1, -1, -1,
+                2, 12, -1, -1, -1, -1, -1, -1,
+                0,  2, 12, -1, -1, -1, -1, -1,
+                4, 12, -1, -1, -1, -1, -1, -1,
+                0,  4, 12, -1, -1, -1, -1, -1,
+                2,  4, 12, -1, -1, -1, -1, -1,
+                0,  2,  4, 12, -1, -1, -1, -1,
+                6, 12, -1, -1, -1, -1, -1, -1,
+                0,  6, 12, -1, -1, -1, -1, -1,
+                2,  6, 12, -1, -1, -1, -1, -1,
+                0,  2,  6, 12, -1, -1, -1, -1,
+                4,  6, 12, -1, -1, -1, -1, -1,
+                0,  4,  6, 12, -1, -1, -1, -1,
+                2,  4,  6, 12, -1, -1, -1, -1,
+                0,  2,  4,  6, 12, -1, -1, -1,
+                8, 12, -1, -1, -1, -1, -1, -1,
+                0,  8, 12, -1, -1, -1, -1, -1,
+                2,  8, 12, -1, -1, -1, -1, -1,
+                0,  2,  8, 12, -1, -1, -1, -1,
+                4,  8, 12, -1, -1, -1, -1, -1,
+                0,  4,  8, 12, -1, -1, -1, -1,
+                2,  4,  8, 12, -1, -1, -1, -1,
+                0,  2,  4,  8, 12, -1, -1, -1,
+                6,  8, 12, -1, -1, -1, -1, -1,
+                0,  6,  8, 12, -1, -1, -1, -1,
+                2,  6,  8, 12, -1, -1, -1, -1,
+                0,  2,  6,  8, 12, -1, -1, -1,
+                4,  6,  8, 12, -1, -1, -1, -1,
+                0,  4,  6,  8, 12, -1, -1, -1,
+                2,  4,  6,  8, 12, -1, -1, -1,
+                0,  2,  4,  6,  8, 12, -1, -1,
+                10, 12, -1, -1, -1, -1, -1, -1,
+                0, 10, 12, -1, -1, -1, -1, -1,
+                2, 10, 12, -1, -1, -1, -1, -1,
+                0,  2, 10, 12, -1, -1, -1, -1,
+                4, 10, 12, -1, -1, -1, -1, -1,
+                0,  4, 10, 12, -1, -1, -1, -1,
+                2,  4, 10, 12, -1, -1, -1, -1,
+                0,  2,  4, 10, 12, -1, -1, -1,
+                6, 10, 12, -1, -1, -1, -1, -1,
+                0,  6, 10, 12, -1, -1, -1, -1,
+                2,  6, 10, 12, -1, -1, -1, -1,
+                0,  2,  6, 10, 12, -1, -1, -1,
+                4,  6, 10, 12, -1, -1, -1, -1,
+                0,  4,  6, 10, 12, -1, -1, -1,
+                2,  4,  6, 10, 12, -1, -1, -1,
+                0,  2,  4,  6, 10, 12, -1, -1,
+                8, 10, 12, -1, -1, -1, -1, -1,
+                0,  8, 10, 12, -1, -1, -1, -1,
+                2,  8, 10, 12, -1, -1, -1, -1,
+                0,  2,  8, 10, 12, -1, -1, -1,
+                4,  8, 10, 12, -1, -1, -1, -1,
+                0,  4,  8, 10, 12, -1, -1, -1,
+                2,  4,  8, 10, 12, -1, -1, -1,
+                0,  2,  4,  8, 10, 12, -1, -1,
+                6,  8, 10, 12, -1, -1, -1, -1,
+                0,  6,  8, 10, 12, -1, -1, -1,
+                2,  6,  8, 10, 12, -1, -1, -1,
+                0,  2,  6,  8, 10, 12, -1, -1,
+                4,  6,  8, 10, 12, -1, -1, -1,
+                0,  4,  6,  8, 10, 12, -1, -1,
+                2,  4,  6,  8, 10, 12, -1, -1,
+                0,  2,  4,  6,  8, 10, 12, -1,
+                14, -1, -1, -1, -1, -1, -1, -1,
+                0, 14, -1, -1, -1, -1, -1, -1,
+                2, 14, -1, -1, -1, -1, -1, -1,
+                0,  2, 14, -1, -1, -1, -1, -1,
+                4, 14, -1, -1, -1, -1, -1, -1,
+                0,  4, 14, -1, -1, -1, -1, -1,
+                2,  4, 14, -1, -1, -1, -1, -1,
+                0,  2,  4, 14, -1, -1, -1, -1,
+                6, 14, -1, -1, -1, -1, -1, -1,
+                0,  6, 14, -1, -1, -1, -1, -1,
+                2,  6, 14, -1, -1, -1, -1, -1,
+                0,  2,  6, 14, -1, -1, -1, -1,
+                4,  6, 14, -1, -1, -1, -1, -1,
+                0,  4,  6, 14, -1, -1, -1, -1,
+                2,  4,  6, 14, -1, -1, -1, -1,
+                0,  2,  4,  6, 14, -1, -1, -1,
+                8, 14, -1, -1, -1, -1, -1, -1,
+                0,  8, 14, -1, -1, -1, -1, -1,
+                2,  8, 14, -1, -1, -1, -1, -1,
+                0,  2,  8, 14, -1, -1, -1, -1,
+                4,  8, 14, -1, -1, -1, -1, -1,
+                0,  4,  8, 14, -1, -1, -1, -1,
+                2,  4,  8, 14, -1, -1, -1, -1,
+                0,  2,  4,  8, 14, -1, -1, -1,
+                6,  8, 14, -1, -1, -1, -1, -1,
+                0,  6,  8, 14, -1, -1, -1, -1,
+                2,  6,  8, 14, -1, -1, -1, -1,
+                0,  2,  6,  8, 14, -1, -1, -1,
+                4,  6,  8, 14, -1, -1, -1, -1,
+                0,  4,  6,  8, 14, -1, -1, -1,
+                2,  4,  6,  8, 14, -1, -1, -1,
+                0,  2,  4,  6,  8, 14, -1, -1,
+                10, 14, -1, -1, -1, -1, -1, -1,
+                0, 10, 14, -1, -1, -1, -1, -1,
+                2, 10, 14, -1, -1, -1, -1, -1,
+                0,  2, 10, 14, -1, -1, -1, -1,
+                4, 10, 14, -1, -1, -1, -1, -1,
+                0,  4, 10, 14, -1, -1, -1, -1,
+                2,  4, 10, 14, -1, -1, -1, -1,
+                0,  2,  4, 10, 14, -1, -1, -1,
+                6, 10, 14, -1, -1, -1, -1, -1,
+                0,  6, 10, 14, -1, -1, -1, -1,
+                2,  6, 10, 14, -1, -1, -1, -1,
+                0,  2,  6, 10, 14, -1, -1, -1,
+                4,  6, 10, 14, -1, -1, -1, -1,
+                0,  4,  6, 10, 14, -1, -1, -1,
+                2,  4,  6, 10, 14, -1, -1, -1,
+                0,  2,  4,  6, 10, 14, -1, -1,
+                8, 10, 14, -1, -1, -1, -1, -1,
+                0,  8, 10, 14, -1, -1, -1, -1,
+                2,  8, 10, 14, -1, -1, -1, -1,
+                0,  2,  8, 10, 14, -1, -1, -1,
+                4,  8, 10, 14, -1, -1, -1, -1,
+                0,  4,  8, 10, 14, -1, -1, -1,
+                2,  4,  8, 10, 14, -1, -1, -1,
+                0,  2,  4,  8, 10, 14, -1, -1,
+                6,  8, 10, 14, -1, -1, -1, -1,
+                0,  6,  8, 10, 14, -1, -1, -1,
+                2,  6,  8, 10, 14, -1, -1, -1,
+                0,  2,  6,  8, 10, 14, -1, -1,
+                4,  6,  8, 10, 14, -1, -1, -1,
+                0,  4,  6,  8, 10, 14, -1, -1,
+                2,  4,  6,  8, 10, 14, -1, -1,
+                0,  2,  4,  6,  8, 10, 14, -1,
+                12, 14, -1, -1, -1, -1, -1, -1,
+                0, 12, 14, -1, -1, -1, -1, -1,
+                2, 12, 14, -1, -1, -1, -1, -1,
+                0,  2, 12, 14, -1, -1, -1, -1,
+                4, 12, 14, -1, -1, -1, -1, -1,
+                0,  4, 12, 14, -1, -1, -1, -1,
+                2,  4, 12, 14, -1, -1, -1, -1,
+                0,  2,  4, 12, 14, -1, -1, -1,
+                6, 12, 14, -1, -1, -1, -1, -1,
+                0,  6, 12, 14, -1, -1, -1, -1,
+                2,  6, 12, 14, -1, -1, -1, -1,
+                0,  2,  6, 12, 14, -1, -1, -1,
+                4,  6, 12, 14, -1, -1, -1, -1,
+                0,  4,  6, 12, 14, -1, -1, -1,
+                2,  4,  6, 12, 14, -1, -1, -1,
+                0,  2,  4,  6, 12, 14, -1, -1,
+                8, 12, 14, -1, -1, -1, -1, -1,
+                0,  8, 12, 14, -1, -1, -1, -1,
+                2,  8, 12, 14, -1, -1, -1, -1,
+                0,  2,  8, 12, 14, -1, -1, -1,
+                4,  8, 12, 14, -1, -1, -1, -1,
+                0,  4,  8, 12, 14, -1, -1, -1,
+                2,  4,  8, 12, 14, -1, -1, -1,
+                0,  2,  4,  8, 12, 14, -1, -1,
+                6,  8, 12, 14, -1, -1, -1, -1,
+                0,  6,  8, 12, 14, -1, -1, -1,
+                2,  6,  8, 12, 14, -1, -1, -1,
+                0,  2,  6,  8, 12, 14, -1, -1,
+                4,  6,  8, 12, 14, -1, -1, -1,
+                0,  4,  6,  8, 12, 14, -1, -1,
+                2,  4,  6,  8, 12, 14, -1, -1,
+                0,  2,  4,  6,  8, 12, 14, -1,
+                10, 12, 14, -1, -1, -1, -1, -1,
+                0, 10, 12, 14, -1, -1, -1, -1,
+                2, 10, 12, 14, -1, -1, -1, -1,
+                0,  2, 10, 12, 14, -1, -1, -1,
+                4, 10, 12, 14, -1, -1, -1, -1,
+                0,  4, 10, 12, 14, -1, -1, -1,
+                2,  4, 10, 12, 14, -1, -1, -1,
+                0,  2,  4, 10, 12, 14, -1, -1,
+                6, 10, 12, 14, -1, -1, -1, -1,
+                0,  6, 10, 12, 14, -1, -1, -1,
+                2,  6, 10, 12, 14, -1, -1, -1,
+                0,  2,  6, 10, 12, 14, -1, -1,
+                4,  6, 10, 12, 14, -1, -1, -1,
+                0,  4,  6, 10, 12, 14, -1, -1,
+                2,  4,  6, 10, 12, 14, -1, -1,
+                0,  2,  4,  6, 10, 12, 14, -1,
+                8, 10, 12, 14, -1, -1, -1, -1,
+                0,  8, 10, 12, 14, -1, -1, -1,
+                2,  8, 10, 12, 14, -1, -1, -1,
+                0,  2,  8, 10, 12, 14, -1, -1,
+                4,  8, 10, 12, 14, -1, -1, -1,
+                0,  4,  8, 10, 12, 14, -1, -1,
+                2,  4,  8, 10, 12, 14, -1, -1,
+                0,  2,  4,  8, 10, 12, 14, -1,
+                6,  8, 10, 12, 14, -1, -1, -1,
+                0,  6,  8, 10, 12, 14, -1, -1,
+                2,  6,  8, 10, 12, 14, -1, -1,
+                0,  2,  6,  8, 10, 12, 14, -1,
+                4,  6,  8, 10, 12, 14, -1, -1,
+                0,  4,  6,  8, 10, 12, 14, -1,
+                2,  4,  6,  8, 10, 12, 14, -1,
+                0,  2,  4,  6,  8, 10, 12, 14};
+
+inline
+fn __shake128_squeezenblocks(reg u256[7] state, stack u8[REJ_UNIFORM_AVX_BUFLEN] out)
+      -> reg u256[7], stack u8[REJ_UNIFORM_AVX_BUFLEN]
+{
+  inline int i;
+
+  for i = 0 to GENMATRIX_NBLOCKS 
+  {
+      state, out[i*SHAKE128_RATE:SHAKE128_RATE] = __shake128_squeezeblock(state, out[i*SHAKE128_RATE:SHAKE128_RATE]);
+  }
+  return state, out;
+}
+
+inline
+fn __shake128_squeezenblocks4x(reg ptr u256[25] state, reg ptr u8[REJ_UNIFORM_AVX_BUFLEN] h0 h1 h2 h3)
+  -> reg ptr u256[25], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN]
+{
+  inline int i;
+
+  for i = 0 to GENMATRIX_NBLOCKS
+  {
+    state, h0[i*SHAKE128_RATE:SHAKE128_RATE], h1[i*SHAKE128_RATE:SHAKE128_RATE], h2[i*SHAKE128_RATE:SHAKE128_RATE], h3[i*SHAKE128_RATE:SHAKE128_RATE] = __shake128_squeezeblock4x(state, h0[i*SHAKE128_RATE:SHAKE128_RATE], h1[i*SHAKE128_RATE:SHAKE128_RATE], h2[i*SHAKE128_RATE:SHAKE128_RATE], h3[i*SHAKE128_RATE:SHAKE128_RATE]);
+  }
+
+  return state, h0, h1, h2, h3;
+}
+
+inline
+fn __rej_uniform(reg ptr u16[KYBER_N] rp, reg u64 offset, reg ptr u8[SHAKE128_RATE] buf, inline int buflen) ->  reg u64, stack u16[KYBER_N]
+{
+  reg u16 val0 val1;
+  reg u16 t;
+  reg u64 pos ctr;
+  reg u8 fl1 fl2;
+  reg bool b;
+
+  ctr = offset;
+  pos = 0;
+
+  ?{ "<=u" = b }= #CMP_64(ctr, KYBER_N - 1);
+  fl1 = #SETcc(b);
+
+  ?{ "<=u" = b } = #CMP_64(pos, buflen - 3);
+  fl2 = #SETcc(b);
+
+  _, _, _, _, b = #TEST_8(fl1, fl2);
+
+  while(!b)
+  {
+    val0 = (16u)buf[(int)pos];
+    pos += 1;
+
+    t   = (16u)buf[(int)pos];
+    val1 = t;
+    val1 >>= 4;
+
+    t &= 0x0F;
+    t <<= 8;
+    val0 |= t;
+    pos += 1;
+
+    t   = (16u)buf[(int)pos];
+    t <<= 4;
+    val1 |= t;
+    pos += 1;
+
+    if(val0 < KYBER_Q)
+    {
+      rp[(int)ctr] = val0;
+      ctr += 1;
+    }
+
+    if(ctr < KYBER_N)
+    {
+      if(val1 < KYBER_Q)
+      {
+        rp[(int)ctr] = val1;
+        ctr += 1;
+      }
+    }
+
+    ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 1);
+    fl1 = #SETcc(b);
+
+    ?{ "<=u" = b } = #CMP_64(pos, buflen - 3);
+    fl2 = #SETcc(b);
+
+    _, _, _, _, b = #TEST_8(fl1, fl2);
+  }
+
+  return ctr, rp;
+}
+
+u8 ru_ones_s = 1;
+u16 ru_mask_s = 0x0FFF;
+u8[32] ru_idx8_s = {0, 1, 1, 2, 3, 4, 4, 5,
+                 6, 7, 7, 8, 9, 10, 10, 11,
+                 4, 5, 5, 6, 7, 8, 8, 9,
+                 10, 11, 11, 12, 13, 14, 14, 15};
+
+fn _rej_uniform_avx(reg ptr u16[KYBER_N] rp, reg ptr u8[REJ_UNIFORM_AVX_BUFLEN] buf) -> reg u64, reg ptr u16[KYBER_N]
+{
+  reg u256 f0 f1 g0 g1 g2 g3;
+  reg u256 bound ones mask idx8;
+  reg u128 f t l h;
+  reg u64 pos ctr t64 t64_1 t64_2 t64_3;
+  reg u64 good;
+  reg u16 val0 val1 t16;
+  reg ptr u8[2048] idxp;
+  reg u8 fl1 fl2;
+  reg bool b;
+
+  idxp = ru_idx;
+
+  bound = jqx16[u256 0];
+  ctr = 0;
+  pos = 0;
+  ones = #VPBROADCAST_32u8(ru_ones_s);
+  mask = #VPBROADCAST_16u16(ru_mask_s);
+  idx8 = ru_idx8_s[u256 0];
+
+  ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 32);
+  fl1 = #SETcc(b);
+
+  ?{ "<=u" = b } = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 56);
+  fl2 = #SETcc(b);
+
+   _, _, _, _, b = #TEST_8(fl1, fl2);
+
+  while(!b)
+  {
+    f0 = #VPERMQ(buf.[u256 (int)pos], 0x94);
+    f1 = #VPERMQ(buf.[u256 24 + (int)pos], 0x94);
+    f0 = #VPSHUFB_256(f0, idx8);
+    f1 = #VPSHUFB_256(f1, idx8);
+    g0 = #VPSRL_16u16(f0, 4);
+    g1 = #VPSRL_16u16(f1, 4);
+    f0 = #VPBLEND_16u16(f0, g0, 0xAA);
+    f1 = #VPBLEND_16u16(f1, g1, 0xAA);
+    f0 = #VPAND_256(f0, mask);
+    f1 = #VPAND_256(f1, mask);
+
+    g0 = #VPCMPGT_16u16(bound, f0);
+    g1 = #VPCMPGT_16u16(bound, f1);
+
+    g0 = #VPACKSS_16u16(g0, g1);
+    good = #VPMOVMSKB_u256u64(g0);
+
+    t64 = good;
+    t64 &= 0xFF;
+    g0 = (256u) #VMOV(idxp[u64 (int)t64]);
+
+    t64_1 = good;
+    t64_1 >>= 16;
+    t64_1 &= 0xFF;
+    l = #VMOV(idxp[u64 (int)t64_1]);
+
+    t64_2 = good;
+    t64_2 >>= 8;
+    t64_2 &= 0xFF;
+    g1 = (256u) #VMOV(idxp[u64 (int)t64_2]);
+
+    t64_3 = good;
+    t64_3 >>= 24;
+    t64_3 &= 0xFF;
+    h = #VMOV(idxp[u64 (int)t64_3]);
+
+    g0 = #VINSERTI128(g0, l, 1);
+
+    _, _, _, _, _, t64 = #POPCNT_64(t64);
+    _, _, _, _, _, t64_1 = #POPCNT_64(t64_1);
+    t64 += ctr;
+
+    g1 = #VINSERTI128(g1, h, 1);
+
+    t64_1 += t64;
+    _, _, _, _, _, t64_2 = #POPCNT_64(t64_2);
+    t64_2 += t64_1;
+    _, _, _, _, _, t64_3 = #POPCNT_64(t64_3);
+    t64_3 += t64_2;
+
+    g2 = #VPADD_32u8(g0, ones);
+    g0 = #VPUNPCKL_32u8(g0, g2);
+    g3 = #VPADD_32u8(g1, ones);
+    g1 = #VPUNPCKL_32u8(g1, g3);
+
+    f0 = #VPSHUFB_256(f0, g0);
+    f1 = #VPSHUFB_256(f1, g1);
+
+    rp.[u128 2*(int)ctr] = (128u)f0;
+    rp.[u128 2*(int)t64] = #VEXTRACTI128(f0, 1);
+    rp.[u128 2*(int)t64_1] = (128u)f1;
+    rp.[u128 2*(int)t64_2] = #VEXTRACTI128(f1, 1);
+
+    ctr = t64_3;
+
+    ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 32);
+    fl1 = #SETcc(b);
+
+    pos += 48;
+    ?{ "<=u" = b } = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 56);
+    fl2 = #SETcc(b);
+
+     _, _, _, _, b = #TEST_8(fl1, fl2);
+  }
+
+  ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 8);
+  fl1 = #SETcc(b);
+
+  ?{ "<=u" = b } = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 16);
+  fl2 = #SETcc(b);
+
+   _, _, _, _, b = #TEST_8(fl1, fl2);
+
+  t64 = 0x5555;
+  while(!b)
+  {
+    f = buf.[u128 (int)pos];
+    f = #VPSHUFB_128(f, idx8);
+    t = #VPSRL_8u16(f, 4);
+    f = #VPBLEND_8u16(f, t, 0xAA);
+    f = #VPAND_128(f, mask);
+
+    t = #VPCMPGT_8u16(bound, f);
+    good = #VPMOVMSKB_u128u64(t);
+
+    good = #PEXT_64(good, t64);
+    l = #VMOV(idxp[u64 (int)good]);
+    _, _, _, _, _, good =  #POPCNT_64(good);
+
+    h = #VPADD_16u8(l, ones);
+    l = #VPUNPCKL_16u8(l, h);
+    f = #VPSHUFB_128(f, l);
+
+    rp.[u128 2*(int)ctr] = f;
+    ctr += good;
+
+    pos += 12;
+    ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 8);
+    fl1 = #SETcc(b);
+
+    ?{ "<=u" = b } = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 16);
+    fl2 = #SETcc(b);
+
+     _, _, _, _, b = #TEST_8(fl1, fl2);
+  }
+
+  ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 1);
+  fl1 = #SETcc(b);
+
+  ?{ "<=u" = b } = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 3);
+  fl2 = #SETcc(b);
+
+   _, _, _, _, b = #TEST_8(fl1, fl2);
+
+  while(!b)
+  {
+    val0 = (16u)buf[(int)pos];
+    pos += 1;
+    t16 = (16u)buf[(int)pos];
+    pos += 1;
+    val1 = t16;
+
+    t16 <<= 8;
+    val0 |= t16;
+    val0 &= 0xFFF;
+
+    val1 >>= 4;
+    t16 = (16u)buf[(int)pos];
+    pos += 1;
+    t16 <<= 4;
+    val1 |= t16;
+
+    if(val0 < KYBER_Q)
+    {
+      rp[(int)ctr] = val0;
+      ctr += 1;
+    }
+    if(val1 < KYBER_Q)
+    {
+      if(ctr < KYBER_N)
+      {
+        rp[(int)ctr] = val1;
+        ctr += 1;
+      }
+    }
+
+    ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 1);
+    fl1 = #SETcc(b);
+
+    ?{ "<=u" = b } = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 3);
+    fl2 = #SETcc(b);
+
+    _, _, _, _, b = #TEST_8(fl1, fl2);
+  }
+
+  return ctr, rp;
+}
+
+inline
+fn __gen_matrix(stack u8[KYBER_SYMBYTES] seed, inline int transposed) -> stack u16[KYBER_K*KYBER_VECN]
+{
+  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf0;
+  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf1;
+  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf2;
+  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf3;
+  reg u256[7] statev;
+  stack u64[28] s_state;
+  stack u256[25] state;
+  stack u16[KYBER_K*KYBER_VECN] rr;
+  stack u256 fs;
+  reg u256 f;
+  reg u64 ctr0 ctr1 ctr2 ctr3 tmp;
+  stack u64 ctr0_s;
+  reg u8 flg0 flg1 bflg;
+  reg bool b;
+  reg bool zf;
+
+  inline int i, j;
+
+  f = seed[u256 0];
+  buf0[u256 0] = f;
+  buf1[u256 0] = f;
+  buf2[u256 0] = f;
+  buf3[u256 0] = f;
+  fs = f;
+
+  if(transposed == 1)
+  {
+    buf0[KYBER_SYMBYTES]   = 0;
+    buf0[KYBER_SYMBYTES+1] = 0;
+    buf1[KYBER_SYMBYTES]   = 0;
+    buf1[KYBER_SYMBYTES+1] = 1;
+    buf2[KYBER_SYMBYTES]   = 0;
+    buf2[KYBER_SYMBYTES+1] = 2;
+    buf3[KYBER_SYMBYTES]   = 1;
+    buf3[KYBER_SYMBYTES+1] = 0;
+  }
+  else
+  {
+    buf0[KYBER_SYMBYTES]   = 0;
+    buf0[KYBER_SYMBYTES+1] = 0;
+    buf1[KYBER_SYMBYTES]   = 1;
+    buf1[KYBER_SYMBYTES+1] = 0;
+    buf2[KYBER_SYMBYTES]   = 2;
+    buf2[KYBER_SYMBYTES+1] = 0;
+    buf3[KYBER_SYMBYTES]   = 0;
+    buf3[KYBER_SYMBYTES+1] = 1;
+  }
+
+  state = _shake128_absorb4x_34(state, buf0[0:34], buf1[0:34], buf2[0:34], buf3[0:34]);
+  state, buf0, buf1, buf2, buf3 = __shake128_squeezenblocks4x(state, buf0, buf1, buf2, buf3);
+
+  tmp, rr[0*KYBER_VECN+0*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[0*KYBER_VECN+0*KYBER_N:KYBER_N], buf0);
+  ctr0 = tmp;
+  tmp, rr[0*KYBER_VECN+1*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[0*KYBER_VECN+1*KYBER_N:KYBER_N], buf1);
+  ctr1 = tmp;
+  tmp, rr[0*KYBER_VECN+2*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[0*KYBER_VECN+2*KYBER_N:KYBER_N], buf2);
+  ctr2 = tmp;
+  ctr3, rr[1*KYBER_VECN+0*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[1*KYBER_VECN+0*KYBER_N:KYBER_N], buf3);
+
+  ?{ "<=u" = b } = #CMP_64(ctr0, KYBER_N - 1);
+  flg0 = #SETcc(b);
+
+  ?{ "<=u" = b } = #CMP_64(ctr1, KYBER_N - 1);
+  flg1 = #SETcc(b);
+
+  _, _, _, _, _, bflg = #OR_8(flg0, flg1);
+
+  ?{ "<=u" = b } = #CMP_64(ctr2, KYBER_N - 1);
+  flg0 = #SETcc(b);
+
+  ?{ "<=u" = b } = #CMP_64(ctr3, KYBER_N - 1);
+  flg1 = #SETcc(b);
+
+  _, _, _, _, _, flg0 = #OR_8(flg0, flg1);
+  _, _, _, _, zf, _ = #OR_8(flg0, bflg);
+
+  while (!zf) {
+    state, buf0[0:SHAKE128_RATE], buf1[0:SHAKE128_RATE], buf2[0:SHAKE128_RATE], buf3[0:SHAKE128_RATE] = __shake128_squeezeblock4x(state, buf0[0:SHAKE128_RATE], buf1[0:SHAKE128_RATE], buf2[0:SHAKE128_RATE], buf3[0:SHAKE128_RATE]);
+
+    ctr0, rr[0*KYBER_VECN+0*KYBER_N:KYBER_N] = __rej_uniform(rr[0*KYBER_VECN+0*KYBER_N:KYBER_N], ctr0, buf0[0:SHAKE128_RATE], SHAKE128_RATE);
+    ctr1, rr[0*KYBER_VECN+1*KYBER_N:KYBER_N] = __rej_uniform(rr[0*KYBER_VECN+1*KYBER_N:KYBER_N], ctr1, buf1[0:SHAKE128_RATE], SHAKE128_RATE);
+    ctr2, rr[0*KYBER_VECN+2*KYBER_N:KYBER_N] = __rej_uniform(rr[0*KYBER_VECN+2*KYBER_N:KYBER_N], ctr2, buf2[0:SHAKE128_RATE], SHAKE128_RATE);
+    ctr3, rr[1*KYBER_VECN+0*KYBER_N:KYBER_N] = __rej_uniform(rr[1*KYBER_VECN+0*KYBER_N:KYBER_N], ctr3, buf3[0:SHAKE128_RATE], SHAKE128_RATE);
+
+    ?{ "<=u" = b } = #CMP_64(ctr0, KYBER_N - 1);
+    flg0 = #SETcc(b);
+
+    ?{ "<=u" = b } = #CMP_64(ctr1, KYBER_N - 1);
+    flg1 = #SETcc(b);
+
+    _, _, _, _, _, bflg = #OR_8(flg0, flg1);
+
+    ?{ "<=u" = b } = #CMP_64(ctr2, KYBER_N - 1);
+    flg0 = #SETcc(b);
+
+    ?{ "<=u" = b } = #CMP_64(ctr3, KYBER_N - 1);
+    flg1 = #SETcc(b);
+
+    _, _, _, _, _, flg0 = #OR_8(flg0, flg1);
+    _, _, _, _, zf, _ = #OR_8(flg0, bflg);
+  }
+  
+  f = fs;
+  buf0[u256 0] = f;
+  buf1[u256 0] = f;
+  buf2[u256 0] = f;
+  buf3[u256 0] = f;
+  fs = f;
+
+  if(transposed == 1)
+  {
+    buf0[KYBER_SYMBYTES]   = 1;
+    buf0[KYBER_SYMBYTES+1] = 1;
+    buf1[KYBER_SYMBYTES]   = 1;
+    buf1[KYBER_SYMBYTES+1] = 2;
+    buf2[KYBER_SYMBYTES]   = 2;
+    buf2[KYBER_SYMBYTES+1] = 0;
+    buf3[KYBER_SYMBYTES]   = 2;
+    buf3[KYBER_SYMBYTES+1] = 1;
+  }
+  else
+  {
+    buf0[KYBER_SYMBYTES]   = 1;
+    buf0[KYBER_SYMBYTES+1] = 1;
+    buf1[KYBER_SYMBYTES]   = 2;
+    buf1[KYBER_SYMBYTES+1] = 1;
+    buf2[KYBER_SYMBYTES]   = 0;
+    buf2[KYBER_SYMBYTES+1] = 2;
+    buf3[KYBER_SYMBYTES]   = 1;
+    buf3[KYBER_SYMBYTES+1] = 2;
+  }
+
+  state = _shake128_absorb4x_34(state, buf0[0:34], buf1[0:34], buf2[0:34], buf3[0:34]);
+  state, buf0, buf1, buf2, buf3 = __shake128_squeezenblocks4x(state, buf0, buf1, buf2, buf3);
+
+  tmp, rr[1*KYBER_VECN+1*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[1*KYBER_VECN+1*KYBER_N:KYBER_N], buf0);
+  ctr0 = tmp;
+  tmp, rr[1*KYBER_VECN+2*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[1*KYBER_VECN+2*KYBER_N:KYBER_N], buf1);
+  ctr1 = tmp;
+  tmp, rr[2*KYBER_VECN+0*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[2*KYBER_VECN+0*KYBER_N:KYBER_N], buf2);
+  ctr2 = tmp;
+  ctr3, rr[2*KYBER_VECN+1*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[2*KYBER_VECN+1*KYBER_N:KYBER_N], buf3);
+
+  ?{ "<=u" = b } = #CMP_64(ctr0, KYBER_N - 1);
+  flg0 = #SETcc(b);
+
+  ?{ "<=u" = b } = #CMP_64(ctr1, KYBER_N - 1);
+  flg1 = #SETcc(b);
+
+  _, _, _, _, _, bflg = #OR_8(flg0, flg1);
+
+  ?{ "<=u" = b } = #CMP_64(ctr2, KYBER_N - 1);
+  flg0 = #SETcc(b);
+
+  ?{ "<=u" = b } = #CMP_64(ctr3, KYBER_N - 1);
+  flg1 = #SETcc(b);
+
+  _, _, _, _, _, flg0 = #OR_8(flg0, flg1);
+  _, _, _, _, zf, _ = #OR_8(flg0, bflg);
+
+
+  while(!zf) {
+    state, buf0[0:SHAKE128_RATE], buf1[0:SHAKE128_RATE], buf2[0:SHAKE128_RATE], buf3[0:SHAKE128_RATE] = __shake128_squeezeblock4x(state, buf0[0:SHAKE128_RATE], buf1[0:SHAKE128_RATE], buf2[0:SHAKE128_RATE], buf3[0:SHAKE128_RATE]);
+
+    ctr0, rr[1*KYBER_VECN+1*KYBER_N:KYBER_N] = __rej_uniform(rr[1*KYBER_VECN+1*KYBER_N:KYBER_N], ctr0, buf0[0:SHAKE128_RATE], SHAKE128_RATE);
+    ctr1, rr[1*KYBER_VECN+2*KYBER_N:KYBER_N] = __rej_uniform(rr[1*KYBER_VECN+2*KYBER_N:KYBER_N], ctr1, buf1[0:SHAKE128_RATE], SHAKE128_RATE);
+    ctr2, rr[2*KYBER_VECN+0*KYBER_N:KYBER_N] = __rej_uniform(rr[2*KYBER_VECN+0*KYBER_N:KYBER_N], ctr2, buf2[0:SHAKE128_RATE], SHAKE128_RATE);
+    ctr3, rr[2*KYBER_VECN+1*KYBER_N:KYBER_N] = __rej_uniform(rr[2*KYBER_VECN+1*KYBER_N:KYBER_N], ctr3, buf3[0:SHAKE128_RATE], SHAKE128_RATE);
+
+    ?{ "<=u" = b } = #CMP_64(ctr0, KYBER_N - 1);
+    flg0 = #SETcc(b);
+
+    ?{ "<=u" = b } = #CMP_64(ctr1, KYBER_N - 1);
+    flg1 = #SETcc(b);
+
+    _, _, _, _, _, bflg = #OR_8(flg0, flg1);
+
+    ?{ "<=u" = b } = #CMP_64(ctr2, KYBER_N - 1);
+    flg0 = #SETcc(b);
+
+    ?{ "<=u" = b } = #CMP_64(ctr3, KYBER_N - 1);
+    flg1 = #SETcc(b);
+
+    _, _, _, _, _, flg0 = #OR_8(flg0, flg1);
+    _, _, _, _, zf, _ = #OR_8(flg0, bflg);
+  }
+
+  f = fs;
+  buf0[u256 0] = f;
+  buf0[KYBER_SYMBYTES]   = 2;
+  buf0[KYBER_SYMBYTES+1] = 2;
+
+  statev = __shake128_absorb34(statev, buf0[0:34]);
+  statev, buf0 = __shake128_squeezenblocks(statev, buf0);
+
+  // spill state to free registers for rejection sampling
+  for i=0 to 7 { s_state[u256 i] = statev[i]; } 
+
+  ctr0, rr[2*KYBER_VECN+2*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[2*KYBER_VECN+2*KYBER_N:KYBER_N], buf0);
+
+  ?{ "<=u" = b } = #CMP_64(ctr0, KYBER_N - 1);
+  bflg = #SETcc(b);
+
+  for i=0 to 7 { statev[i] = s_state[u256 i]; }
+  
+  while(bflg != 0) {
+    statev, buf0[0:SHAKE128_RATE] = __shake128_squeezeblock(statev, buf0[0:SHAKE128_RATE]);
+
+    ctr0, rr[2*KYBER_VECN+2*KYBER_N:KYBER_N] = __rej_uniform(rr[2*KYBER_VECN+2*KYBER_N:KYBER_N], ctr0, buf0[0:SHAKE128_RATE], SHAKE128_RATE);
+
+    ?{ "<=u" = b } = #CMP_64(ctr0, KYBER_N - 1);
+    bflg = #SETcc(b);
+  }
+
+  for i = 0 to KYBER_K
+  {
+    for j = 0 to KYBER_K
+    {
+      rr[i*KYBER_VECN+j*KYBER_N:KYBER_N] = _nttunpack(rr[i*KYBER_VECN+j*KYBER_N:KYBER_N]);
+    }
+  }
+
+  return rr;
+}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/include/api.h b/src/kem/kyber/libjade_kyber768_amd64_avx2/include/api.h
new file mode 100644
index 0000000000..be5f7dbf3a
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_avx2/include/api.h
@@ -0,0 +1,45 @@
+#ifndef JADE_KEM_kyber_kyber768_amd64_avx2_API_H
+#define JADE_KEM_kyber_kyber768_amd64_avx2_API_H
+
+#include <stdint.h>
+
+#define JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES  64
+#define JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES      32
+
+int jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(
+  uint8_t *public_key,
+  uint8_t *secret_key,
+  const uint8_t *coins
+);
+
+int libjade_kyber768_amd64_avx2_keypair(
+  uint8_t *public_key,
+  uint8_t *secret_key
+);
+
+int jade_kem_kyber_kyber768_amd64_avx2_enc_derand(
+  uint8_t *ciphertext,
+  uint8_t *shared_secret,
+  const uint8_t *public_key,
+  const uint8_t *coins
+);
+
+int libjade_kyber768_amd64_avx2_enc(
+  uint8_t *ciphertext,
+  uint8_t *shared_secret,
+  const uint8_t *public_key
+);
+
+int jade_kem_kyber_kyber768_amd64_avx2_dec(
+  uint8_t *shared_secret,
+  const uint8_t *ciphertext,
+  const uint8_t *secret_key
+);
+
+int libjade_kyber768_amd64_avx2_dec(
+  uint8_t *shared_secret,
+  const uint8_t *ciphertext,
+  const uint8_t *secret_key
+);
+
+#endif
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/indcpa.jinc b/src/kem/kyber/libjade_kyber768_amd64_avx2/indcpa.jinc
new file mode 100644
index 0000000000..9852b48f17
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_avx2/indcpa.jinc
@@ -0,0 +1,218 @@
+from Jade require "crypto_kem/kyber/kyber768/common/params.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/avx2/poly.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/avx2/polyvec.jinc"
+require "gen_matrix.jinc"
+
+inline
+fn __indcpa_keypair_derand(reg u64 pkp, reg u64 skp, reg ptr u8[KYBER_SYMBYTES] coins)
+{
+  stack u64 spkp sskp;
+  stack u16[KYBER_K*KYBER_VECN] aa;
+  stack u16[KYBER_VECN] e pkpv skpv;
+  stack u8[64] buf;
+  stack u8[KYBER_SYMBYTES] publicseed noiseseed;
+  reg u64 t64;
+  reg u8 nonce;
+  inline int i;
+
+  spkp = pkp;
+  sskp = skp;
+
+  buf = _sha3_512_32(buf, coins);
+
+  for i=0 to KYBER_SYMBYTES/8
+  {
+    t64 = buf[u64 i];
+    publicseed[u64 i] = t64;
+    t64 = buf[u64 i + KYBER_SYMBYTES/8];
+    noiseseed[u64 i] = t64;
+  }
+
+  aa = __gen_matrix(publicseed, 0);
+
+  nonce = 0;
+  skpv[0:KYBER_N], skpv[KYBER_N:KYBER_N], skpv[2*KYBER_N:KYBER_N], e[0:KYBER_N] = _poly_getnoise_eta1_4x(skpv[0:KYBER_N], skpv[KYBER_N:KYBER_N], skpv[2*KYBER_N:KYBER_N], e[0:KYBER_N], noiseseed, nonce);
+
+  nonce = 4;
+  e[KYBER_N:KYBER_N], e[2*KYBER_N:KYBER_N], pkpv[0:KYBER_N], pkpv[KYBER_N:KYBER_N] = _poly_getnoise_eta1_4x(e[KYBER_N:KYBER_N], e[2*KYBER_N:KYBER_N], pkpv[0:KYBER_N], pkpv[KYBER_N:KYBER_N], noiseseed, nonce);
+
+  skpv = __polyvec_ntt(skpv);
+  e    = __polyvec_ntt(e);
+
+  for i=0 to KYBER_K
+  {
+    pkpv[i*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(pkpv[i*KYBER_N:KYBER_N], aa[i*KYBER_VECN:KYBER_VECN], skpv);
+    pkpv[i*KYBER_N:KYBER_N] = _poly_frommont(pkpv[i*KYBER_N:KYBER_N]);
+  }
+
+  pkpv = __polyvec_add2(pkpv, e);
+  pkpv = __polyvec_reduce(pkpv);
+
+  pkp = spkp;
+  skp = sskp;
+
+  __polyvec_tobytes(skp, skpv);
+  __polyvec_tobytes(pkp, pkpv);
+
+  pkp += KYBER_POLYVECBYTES;
+
+  for i=0 to KYBER_SYMBYTES/8
+  {
+    t64 = publicseed[u64 i];
+    (u64)[pkp] = t64;
+    pkp += 8;
+  }
+}
+
+// FIXME: E_EPTR
+inline
+fn __indcpa_enc_0(stack u64 sctp, reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed)
+{
+  stack u16[KYBER_VECN] pkpv sp ep bp;
+  stack u16[KYBER_K*KYBER_VECN] aat;
+  stack u16[KYBER_N] k epp v;
+  stack u8[KYBER_SYMBYTES] publicseed;
+  stack ptr u8[KYBER_SYMBYTES] s_noiseseed;
+  reg ptr u8[KYBER_SYMBYTES] lnoiseseed;
+  reg u64 i ctp t64;
+  reg u8 nonce;
+  inline int w;
+
+  pkpv = __polyvec_frombytes(pkp);
+
+  i = 0;
+  pkp += KYBER_POLYVECBYTES;
+  while (i < KYBER_SYMBYTES/8)
+  {
+    t64 = (u64)[pkp];
+    publicseed[u64 (int)i] = t64;
+    pkp += 8;
+    i += 1;
+  }
+
+  k = _poly_frommsg_1(k, msgp);
+
+  s_noiseseed = noiseseed;
+  aat = __gen_matrix(publicseed, 1);
+  lnoiseseed = s_noiseseed;
+
+  nonce = 0;
+  sp[0:KYBER_N], sp[KYBER_N:KYBER_N], sp[2*KYBER_N:KYBER_N], ep[0:KYBER_N] = _poly_getnoise_eta1_4x(sp[0:KYBER_N], sp[KYBER_N:KYBER_N], sp[2*KYBER_N:KYBER_N], ep[0:KYBER_N], lnoiseseed, nonce);
+
+  nonce = 4;
+  ep[KYBER_N:KYBER_N], ep[2*KYBER_N:KYBER_N], epp, bp[0:KYBER_N] = _poly_getnoise_eta1_4x(ep[KYBER_N:KYBER_N], ep[2*KYBER_N:KYBER_N], epp, bp[0:KYBER_N], lnoiseseed, nonce);
+
+  sp = __polyvec_ntt(sp);
+
+  for w=0 to KYBER_K
+  {
+    bp[w*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(bp[w*KYBER_N:KYBER_N], aat[w*KYBER_VECN:KYBER_VECN], sp);
+  }
+
+  v = __polyvec_pointwise_acc(v, pkpv, sp);
+
+  bp = __polyvec_invntt(bp);
+  v = _poly_invntt(v);
+
+  bp = __polyvec_add2(bp, ep);
+  v = _poly_add2(v, epp);
+  v = _poly_add2(v, k);
+  bp = __polyvec_reduce(bp);
+  v  = __poly_reduce(v);
+
+  ctp = sctp;
+  __polyvec_compress(ctp, bp);
+  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
+  v = _poly_compress(ctp, v);
+}
+
+// FIXME: E_EPTR
+inline
+fn __indcpa_enc_1(reg ptr u8[KYBER_INDCPA_BYTES] ctp, reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed) -> reg ptr u8[KYBER_INDCPA_BYTES]
+{
+  stack u16[KYBER_VECN] pkpv sp ep bp;
+  stack u16[KYBER_K*KYBER_VECN] aat;
+  stack u16[KYBER_N] k epp v;
+  stack u8[KYBER_SYMBYTES] publicseed;
+  stack ptr u8[KYBER_SYMBYTES] s_noiseseed;
+  reg ptr u8[KYBER_SYMBYTES] lnoiseseed;
+  stack ptr u8[KYBER_INDCPA_BYTES] sctp;
+  reg u64 i t64;
+  reg u8 nonce;
+  inline int w;
+
+  sctp = ctp;
+
+  pkpv = __polyvec_frombytes(pkp);
+
+  i = 0;
+  pkp += KYBER_POLYVECBYTES;
+  while (i < KYBER_SYMBYTES/8)
+  {
+    t64 = (u64)[pkp];
+    publicseed[u64 (int)i] = t64;
+    pkp += 8;
+    i += 1;
+  }
+
+  k = _poly_frommsg_1(k, msgp);
+
+  s_noiseseed = noiseseed;
+  aat = __gen_matrix(publicseed, 1);
+  lnoiseseed = s_noiseseed;
+
+  nonce = 0;
+  sp[0:KYBER_N], sp[KYBER_N:KYBER_N], sp[2*KYBER_N:KYBER_N], ep[0:KYBER_N] = _poly_getnoise_eta1_4x(sp[0:KYBER_N], sp[KYBER_N:KYBER_N], sp[2*KYBER_N:KYBER_N], ep[0:KYBER_N], lnoiseseed, nonce);
+
+  nonce = 4;
+  ep[KYBER_N:KYBER_N], ep[2*KYBER_N:KYBER_N], epp, bp[0:KYBER_N] = _poly_getnoise_eta1_4x(ep[KYBER_N:KYBER_N], ep[2*KYBER_N:KYBER_N], epp, bp[0:KYBER_N], lnoiseseed, nonce);
+
+  sp = __polyvec_ntt(sp);
+    
+  for w=0 to KYBER_K
+  {
+    bp[w*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(bp[w*KYBER_N:KYBER_N], aat[w*KYBER_VECN:KYBER_VECN], sp);
+  }
+
+  v = __polyvec_pointwise_acc(v, pkpv, sp);
+
+  bp = __polyvec_invntt(bp);
+  v = _poly_invntt(v);
+
+  bp = __polyvec_add2(bp, ep);
+  v = _poly_add2(v, epp);
+  v = _poly_add2(v, k);
+  bp = __polyvec_reduce(bp);
+  v  = __poly_reduce(v);
+
+  ctp = sctp;
+  ctp[0:KYBER_POLYVECCOMPRESSEDBYTES] = __polyvec_compress_1(ctp[0:KYBER_POLYVECCOMPRESSEDBYTES], bp);
+  ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v = _poly_compress_1(ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v);
+
+  return ctp;
+}
+
+
+inline
+fn __indcpa_dec(reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 ctp, reg u64 skp) -> reg ptr u8[KYBER_INDCPA_MSGBYTES]
+{
+  stack u16[KYBER_N] t v mp;
+  stack u16[KYBER_VECN] bp skpv;
+
+  bp = __polyvec_decompress(ctp);
+  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
+  v = _poly_decompress(v, ctp);
+
+  skpv = __polyvec_frombytes(skp);
+  
+  bp = __polyvec_ntt(bp);
+  t = __polyvec_pointwise_acc(t, skpv, bp);
+  t = _poly_invntt(t);
+
+  mp = _poly_sub(mp, v, t);
+  mp = __poly_reduce(mp);
+  
+  msgp, mp = _poly_tomsg_1(msgp, mp);
+
+  return msgp;
+}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.jazz b/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.jazz
new file mode 100644
index 0000000000..325177a63a
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.jazz
@@ -0,0 +1,66 @@
+require "indcpa.jinc"
+from Jade require "common/tofromstack.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/avx2/verify.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/kem.jinc"
+
+export fn jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(reg u64 public_key secret_key coins) -> reg u64
+{
+  reg u64 r;
+  stack u8[2*KYBER_SYMBYTES] stack_coins;
+
+  public_key = public_key;
+  secret_key = secret_key;
+  stack_coins = __tostack64u8(stack_coins, coins);
+  __crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber768_amd64_avx2_keypair(reg u64 public_key secret_key) -> reg u64
+{
+  reg u64 r;
+  stack u8[2*KYBER_SYMBYTES] stack_coins;
+
+  public_key = public_key;
+  secret_key = secret_key;
+  stack_coins = #randombytes(stack_coins);
+  __crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber768_amd64_avx2_enc_derand(reg u64 ciphertext shared_secret public_key coins) -> reg u64
+{
+  reg u64 r;
+  stack u8[KYBER_SYMBYTES] stack_coins;
+  
+  ciphertext = ciphertext;
+  shared_secret = shared_secret;
+  public_key = public_key;
+  stack_coins = __tostack32u8(stack_coins, coins);
+  __crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber768_amd64_avx2_enc(reg u64 ciphertext shared_secret public_key) -> reg u64
+{
+  reg u64 r;
+  stack u8[KYBER_SYMBYTES] stack_coins;
+
+  ciphertext = ciphertext;
+  shared_secret = shared_secret;
+  public_key = public_key;
+  stack_coins = #randombytes(stack_coins);
+  __crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber768_amd64_avx2_dec(reg u64 shared_secret ciphertext secret_key) -> reg u64
+{
+  reg u64 r;
+  __crypto_kem_dec_jazz(shared_secret, ciphertext, secret_key);
+  ?{}, r = #set0();
+  return r;
+}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.s b/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.s
new file mode 100644
index 0000000000..2af9c26fb7
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.s
@@ -0,0 +1,26077 @@
+	.att_syntax
+	.text
+	.p2align	5
+	.globl	_jade_kem_kyber_kyber768_amd64_avx2_dec
+	.globl	jade_kem_kyber_kyber768_amd64_avx2_dec
+	.globl	_jade_kem_kyber_kyber768_amd64_avx2_enc
+	.globl	jade_kem_kyber_kyber768_amd64_avx2_enc
+	.globl	_jade_kem_kyber_kyber768_amd64_avx2_enc_derand
+	.globl	jade_kem_kyber_kyber768_amd64_avx2_enc_derand
+	.globl	_jade_kem_kyber_kyber768_amd64_avx2_keypair
+	.globl	jade_kem_kyber_kyber768_amd64_avx2_keypair
+	.globl	_jade_kem_kyber_kyber768_amd64_avx2_keypair_derand
+	.globl	jade_kem_kyber_kyber768_amd64_avx2_keypair_derand
+_jade_kem_kyber_kyber768_amd64_avx2_dec:
+jade_kem_kyber_kyber768_amd64_avx2_dec:
+	movq	%rsp, %rax
+	leaq	-17192(%rsp), %rsp
+	andq	$-32, %rsp
+	movq	%rax, 17184(%rsp)
+	movq	%r12, 17160(%rsp)
+	movq	%rbp, 17168(%rsp)
+	movq	%rbx, 17176(%rsp)
+	movq	%rdi, 17120(%rsp)
+	movq	%rsi, 17128(%rsp)
+	leaq	32(%rsp), %rax
+	vpbroadcastd	glob_data + 6404(%rip), %ymm0
+	vmovdqu	glob_data + 64(%rip), %ymm1
+	vpbroadcastq	glob_data + 6192(%rip), %ymm2
+	vpbroadcastd	glob_data + 6400(%rip), %ymm3
+	vmovdqu	(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6368(%rsp)
+	vmovdqu	20(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6400(%rsp)
+	vmovdqu	40(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6432(%rsp)
+	vmovdqu	60(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6464(%rsp)
+	vmovdqu	80(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6496(%rsp)
+	vmovdqu	100(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6528(%rsp)
+	vmovdqu	120(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6560(%rsp)
+	vmovdqu	140(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6592(%rsp)
+	vmovdqu	160(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6624(%rsp)
+	vmovdqu	180(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6656(%rsp)
+	vmovdqu	200(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6688(%rsp)
+	vmovdqu	220(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6720(%rsp)
+	vmovdqu	240(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6752(%rsp)
+	vmovdqu	260(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6784(%rsp)
+	vmovdqu	280(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6816(%rsp)
+	vmovdqu	300(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6848(%rsp)
+	vmovdqu	320(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6880(%rsp)
+	vmovdqu	340(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6912(%rsp)
+	vmovdqu	360(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6944(%rsp)
+	vmovdqu	380(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 6976(%rsp)
+	vmovdqu	400(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7008(%rsp)
+	vmovdqu	420(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7040(%rsp)
+	vmovdqu	440(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7072(%rsp)
+	vmovdqu	460(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7104(%rsp)
+	vmovdqu	480(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7136(%rsp)
+	vmovdqu	500(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7168(%rsp)
+	vmovdqu	520(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7200(%rsp)
+	vmovdqu	540(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7232(%rsp)
+	vmovdqu	560(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7264(%rsp)
+	vmovdqu	580(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7296(%rsp)
+	vmovdqu	600(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7328(%rsp)
+	vmovdqu	620(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7360(%rsp)
+	vmovdqu	640(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7392(%rsp)
+	vmovdqu	660(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7424(%rsp)
+	vmovdqu	680(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7456(%rsp)
+	vmovdqu	700(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7488(%rsp)
+	vmovdqu	720(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7520(%rsp)
+	vmovdqu	740(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7552(%rsp)
+	vmovdqu	760(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7584(%rsp)
+	vmovdqu	780(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7616(%rsp)
+	vmovdqu	800(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7648(%rsp)
+	vmovdqu	820(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7680(%rsp)
+	vmovdqu	840(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7712(%rsp)
+	vmovdqu	860(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7744(%rsp)
+	vmovdqu	880(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7776(%rsp)
+	vmovdqu	900(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7808(%rsp)
+	vmovdqu	920(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpsllvd	%ymm2, %ymm4, %ymm4
+	vpsrlw	$1, %ymm4, %ymm4
+	vpand	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 7840(%rsp)
+	vmovdqu	940(%rsi), %ymm4
+	vpermq	$-108, %ymm4, %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm1
+	vpsllvd	%ymm2, %ymm1, %ymm1
+	vpsrlw	$1, %ymm1, %ymm1
+	vpand	%ymm3, %ymm1, %ymm1
+	vpmulhrsw	%ymm0, %ymm1, %ymm0
+	vmovdqu	%ymm0, 7872(%rsp)
+	addq	$960, %rsi
+	leaq	2432(%rsp), %rcx
+	leaq	-24(%rsp), %rsp
+	call	L_poly_decompress$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$145:
+	leaq	24(%rsp), %rsp
+	movq	%rdx, %rsi
+	leaq	7904(%rsp), %r8
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$144:
+	addq	$384, %rsi
+	leaq	8416(%rsp), %r8
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$143:
+	addq	$384, %rsi
+	leaq	8928(%rsp), %r8
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$142:
+	leaq	6368(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$141:
+	leaq	6880(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$140:
+	leaq	7392(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$139:
+	leaq	2944(%rsp), %rcx
+	leaq	7904(%rsp), %rsi
+	leaq	6368(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$138:
+	leaq	3456(%rsp), %rcx
+	leaq	8416(%rsp), %rsi
+	leaq	6880(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$137:
+	leaq	2944(%rsp), %rcx
+	leaq	3456(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$136:
+	leaq	3456(%rsp), %rcx
+	leaq	8928(%rsp), %rsi
+	leaq	7392(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$135:
+	leaq	2944(%rsp), %rcx
+	leaq	3456(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$134:
+	leaq	2944(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$133:
+	leaq	3456(%rsp), %rcx
+	leaq	2432(%rsp), %rsi
+	leaq	2944(%rsp), %rdi
+	call	L_poly_sub$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$132:
+	leaq	3456(%rsp), %rcx
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rcx)
+	vmovdqu	32(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rcx)
+	vmovdqu	64(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rcx)
+	vmovdqu	96(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rcx)
+	vmovdqu	128(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rcx)
+	vmovdqu	160(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rcx)
+	vmovdqu	192(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rcx)
+	vmovdqu	224(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rcx)
+	vmovdqu	256(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rcx)
+	vmovdqu	288(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rcx)
+	vmovdqu	320(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rcx)
+	vmovdqu	352(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rcx)
+	vmovdqu	384(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rcx)
+	vmovdqu	416(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rcx)
+	vmovdqu	448(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rcx)
+	vmovdqu	480(%rcx), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rcx)
+	leaq	3456(%rsp), %rcx
+	call	L_poly_tomsg_1$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$131:
+	leaq	32(%rdx), %rax
+	addq	$2304, %rax
+	movq	(%rax), %rcx
+	movq	%rcx, 64(%rsp)
+	movq	8(%rax), %rcx
+	movq	%rcx, 72(%rsp)
+	movq	16(%rax), %rcx
+	movq	%rcx, 80(%rsp)
+	movq	24(%rax), %rax
+	movq	%rax, 88(%rsp)
+	movq	%rdx, 17136(%rsp)
+	leaq	96(%rsp), %rax
+	leaq	32(%rsp), %rcx
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_512_64$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$130:
+	leaq	248(%rsp), %rsp
+	movq	17136(%rsp), %rax
+	addq	$1152, %rax
+	leaq	5280(%rsp), %rcx
+	leaq	32(%rsp), %rdi
+	leaq	128(%rsp), %rdx
+	movq	%rcx, 17144(%rsp)
+	movq	%rax, %rsi
+	leaq	6368(%rsp), %r8
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$129:
+	addq	$384, %rsi
+	leaq	6880(%rsp), %r8
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$128:
+	addq	$384, %rsi
+	leaq	7392(%rsp), %r8
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$127:
+	movq	$0, %rcx
+	addq	$1152, %rax
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$125
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$126:
+	movq	(%rax), %rsi
+	movq	%rsi, (%rsp,%rcx,8)
+	addq	$8, %rax
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$125:
+	cmpq	$4, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_avx2_dec$126
+	leaq	3456(%rsp), %rax
+	call	L_poly_frommsg_1$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$124:
+	movq	%rdx, 17152(%rsp)
+	vmovdqu	(%rsp), %ymm0
+	vmovdqu	%ymm0, 384(%rsp)
+	vmovdqu	%ymm0, 896(%rsp)
+	vmovdqu	%ymm0, 1408(%rsp)
+	vmovdqu	%ymm0, 1920(%rsp)
+	vmovdqu	%ymm0, (%rsp)
+	movb	$0, 416(%rsp)
+	movb	$0, 417(%rsp)
+	movb	$0, 928(%rsp)
+	movb	$1, 929(%rsp)
+	movb	$0, 1440(%rsp)
+	movb	$2, 1441(%rsp)
+	movb	$1, 1952(%rsp)
+	movb	$0, 1953(%rsp)
+	leaq	4480(%rsp), %rax
+	leaq	384(%rsp), %rcx
+	leaq	896(%rsp), %rdx
+	leaq	1408(%rsp), %rsi
+	leaq	1920(%rsp), %rdi
+	call	L_shake128_absorb4x_34$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$123:
+	leaq	4480(%rsp), %rax
+	leaq	384(%rsp), %rdi
+	leaq	896(%rsp), %r8
+	leaq	1408(%rsp), %r9
+	leaq	1920(%rsp), %r10
+	movq	%rdi, %r11
+	movq	%r8, %rbx
+	movq	%r9, %rbp
+	movq	%r10, %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$122:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	168(%rdi), %r11
+	leaq	168(%r8), %rbx
+	leaq	168(%r9), %rbp
+	leaq	168(%r10), %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$121:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	336(%rdi), %rdi
+	leaq	336(%r8), %r8
+	leaq	336(%r9), %r9
+	leaq	336(%r10), %r10
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$120:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%rdi)
+	vmovhpd	%xmm1, (%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r9)
+	vmovhpd	%xmm0, (%r10)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%rdi)
+	vmovhpd	%xmm1, 8(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r9)
+	vmovhpd	%xmm0, 8(%r10)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%rdi)
+	vmovhpd	%xmm1, 16(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r9)
+	vmovhpd	%xmm0, 16(%r10)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%rdi)
+	vmovhpd	%xmm1, 24(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r9)
+	vmovhpd	%xmm0, 24(%r10)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%rdi)
+	vmovhpd	%xmm1, 32(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r9)
+	vmovhpd	%xmm0, 32(%r10)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%rdi)
+	vmovhpd	%xmm1, 40(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r9)
+	vmovhpd	%xmm0, 40(%r10)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%rdi)
+	vmovhpd	%xmm1, 48(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r9)
+	vmovhpd	%xmm0, 48(%r10)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%rdi)
+	vmovhpd	%xmm1, 56(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r9)
+	vmovhpd	%xmm0, 56(%r10)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%rdi)
+	vmovhpd	%xmm1, 64(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r9)
+	vmovhpd	%xmm0, 64(%r10)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%rdi)
+	vmovhpd	%xmm1, 72(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r9)
+	vmovhpd	%xmm0, 72(%r10)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%rdi)
+	vmovhpd	%xmm1, 80(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r9)
+	vmovhpd	%xmm0, 80(%r10)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%rdi)
+	vmovhpd	%xmm1, 88(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r9)
+	vmovhpd	%xmm0, 88(%r10)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%rdi)
+	vmovhpd	%xmm1, 96(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r9)
+	vmovhpd	%xmm0, 96(%r10)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%rdi)
+	vmovhpd	%xmm1, 104(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r9)
+	vmovhpd	%xmm0, 104(%r10)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%rdi)
+	vmovhpd	%xmm1, 112(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r9)
+	vmovhpd	%xmm0, 112(%r10)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%rdi)
+	vmovhpd	%xmm1, 120(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r9)
+	vmovhpd	%xmm0, 120(%r10)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%rdi)
+	vmovhpd	%xmm1, 128(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r9)
+	vmovhpd	%xmm0, 128(%r10)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%rdi)
+	vmovhpd	%xmm1, 136(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%r9)
+	vmovhpd	%xmm0, 136(%r10)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%rdi)
+	vmovhpd	%xmm1, 144(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%r9)
+	vmovhpd	%xmm0, 144(%r10)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%rdi)
+	vmovhpd	%xmm1, 152(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%r9)
+	vmovhpd	%xmm0, 152(%r10)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%rdi)
+	vmovhpd	%xmm1, 160(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%r9)
+	vmovhpd	%xmm0, 160(%r10)
+	leaq	12512(%rsp), %r11
+	leaq	384(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$119:
+	movq	%r12, %rdi
+	leaq	13024(%rsp), %r11
+	leaq	896(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$118:
+	movq	%r12, %r9
+	leaq	13536(%rsp), %r11
+	leaq	1408(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$117:
+	movq	%r12, %r8
+	leaq	14048(%rsp), %r11
+	leaq	1920(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$116:
+	cmpq	$255, %rdi
+	setbe	%al
+	cmpq	$255, %r9
+	setbe	%cl
+	orb 	%cl, %al
+	cmpq	$255, %r8
+	setbe	%cl
+	cmpq	$255, %r12
+	setbe	%dl
+	orb 	%dl, %cl
+	orb 	%al, %cl
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$93
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$94:
+	leaq	4480(%rsp), %rax
+	leaq	384(%rsp), %r10
+	leaq	896(%rsp), %r11
+	leaq	1408(%rsp), %rbx
+	leaq	1920(%rsp), %rbp
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$115:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r10)
+	vmovhpd	%xmm1, (%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbx)
+	vmovhpd	%xmm0, (%rbp)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r10)
+	vmovhpd	%xmm1, 8(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbx)
+	vmovhpd	%xmm0, 8(%rbp)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r10)
+	vmovhpd	%xmm1, 16(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbx)
+	vmovhpd	%xmm0, 16(%rbp)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r10)
+	vmovhpd	%xmm1, 24(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbx)
+	vmovhpd	%xmm0, 24(%rbp)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r10)
+	vmovhpd	%xmm1, 32(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbx)
+	vmovhpd	%xmm0, 32(%rbp)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r10)
+	vmovhpd	%xmm1, 40(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbx)
+	vmovhpd	%xmm0, 40(%rbp)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r10)
+	vmovhpd	%xmm1, 48(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbx)
+	vmovhpd	%xmm0, 48(%rbp)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r10)
+	vmovhpd	%xmm1, 56(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbx)
+	vmovhpd	%xmm0, 56(%rbp)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r10)
+	vmovhpd	%xmm1, 64(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbx)
+	vmovhpd	%xmm0, 64(%rbp)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r10)
+	vmovhpd	%xmm1, 72(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbx)
+	vmovhpd	%xmm0, 72(%rbp)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r10)
+	vmovhpd	%xmm1, 80(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbx)
+	vmovhpd	%xmm0, 80(%rbp)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r10)
+	vmovhpd	%xmm1, 88(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbx)
+	vmovhpd	%xmm0, 88(%rbp)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r10)
+	vmovhpd	%xmm1, 96(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbx)
+	vmovhpd	%xmm0, 96(%rbp)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r10)
+	vmovhpd	%xmm1, 104(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbx)
+	vmovhpd	%xmm0, 104(%rbp)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r10)
+	vmovhpd	%xmm1, 112(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbx)
+	vmovhpd	%xmm0, 112(%rbp)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r10)
+	vmovhpd	%xmm1, 120(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbx)
+	vmovhpd	%xmm0, 120(%rbp)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r10)
+	vmovhpd	%xmm1, 128(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbx)
+	vmovhpd	%xmm0, 128(%rbp)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r10)
+	vmovhpd	%xmm1, 136(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbx)
+	vmovhpd	%xmm0, 136(%rbp)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r10)
+	vmovhpd	%xmm1, 144(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbx)
+	vmovhpd	%xmm0, 144(%rbp)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r10)
+	vmovhpd	%xmm1, 152(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbx)
+	vmovhpd	%xmm0, 152(%rbp)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r10)
+	vmovhpd	%xmm1, 160(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbx)
+	vmovhpd	%xmm0, 160(%rbp)
+	leaq	12512(%rsp), %rax
+	leaq	384(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %rdi
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$110
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$111:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$114
+	movw	%si, (%rax,%rdi,2)
+	incq	%rdi
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$114:
+	cmpq	$256, %rdi
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$112
+	cmpw	$3329, %r11w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$112
+	movw	%r11w, (%rax,%rdi,2)
+	incq	%rdi
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$113:
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$112:
+	cmpq	$255, %rdi
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$110:
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$111
+	leaq	13024(%rsp), %rax
+	leaq	896(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r9
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$105
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$106:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$109
+	movw	%si, (%rax,%r9,2)
+	incq	%r9
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$109:
+	cmpq	$256, %r9
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$107
+	cmpw	$3329, %r11w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$107
+	movw	%r11w, (%rax,%r9,2)
+	incq	%r9
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$108:
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$107:
+	cmpq	$255, %r9
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$105:
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$106
+	leaq	13536(%rsp), %rax
+	leaq	1408(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r8
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$100
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$101:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$104
+	movw	%si, (%rax,%r8,2)
+	incq	%r8
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$104:
+	cmpq	$256, %r8
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$102
+	cmpw	$3329, %r11w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$102
+	movw	%r11w, (%rax,%r8,2)
+	incq	%r8
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$103:
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$102:
+	cmpq	$255, %r8
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$100:
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$101
+	leaq	14048(%rsp), %rax
+	leaq	1920(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$95
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$96:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$99
+	movw	%si, (%rax,%r12,2)
+	incq	%r12
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$99:
+	cmpq	$256, %r12
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$97
+	cmpw	$3329, %r11w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$97
+	movw	%r11w, (%rax,%r12,2)
+	incq	%r12
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$98:
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$97:
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$95:
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$96
+	cmpq	$255, %rdi
+	setbe	%al
+	cmpq	$255, %r9
+	setbe	%cl
+	orb 	%cl, %al
+	cmpq	$255, %r8
+	setbe	%cl
+	cmpq	$255, %r12
+	setbe	%dl
+	orb 	%dl, %cl
+	orb 	%al, %cl
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$93:
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$94
+	vmovdqu	(%rsp), %ymm0
+	vmovdqu	%ymm0, 384(%rsp)
+	vmovdqu	%ymm0, 896(%rsp)
+	vmovdqu	%ymm0, 1408(%rsp)
+	vmovdqu	%ymm0, 1920(%rsp)
+	vmovdqu	%ymm0, (%rsp)
+	movb	$1, 416(%rsp)
+	movb	$1, 417(%rsp)
+	movb	$1, 928(%rsp)
+	movb	$2, 929(%rsp)
+	movb	$2, 1440(%rsp)
+	movb	$0, 1441(%rsp)
+	movb	$2, 1952(%rsp)
+	movb	$1, 1953(%rsp)
+	leaq	4480(%rsp), %rax
+	leaq	384(%rsp), %rcx
+	leaq	896(%rsp), %rdx
+	leaq	1408(%rsp), %rsi
+	leaq	1920(%rsp), %rdi
+	call	L_shake128_absorb4x_34$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$92:
+	leaq	4480(%rsp), %rax
+	leaq	384(%rsp), %rdi
+	leaq	896(%rsp), %r8
+	leaq	1408(%rsp), %r9
+	leaq	1920(%rsp), %r10
+	movq	%rdi, %r11
+	movq	%r8, %rbx
+	movq	%r9, %rbp
+	movq	%r10, %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$91:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	168(%rdi), %r11
+	leaq	168(%r8), %rbx
+	leaq	168(%r9), %rbp
+	leaq	168(%r10), %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$90:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	336(%rdi), %rdi
+	leaq	336(%r8), %r8
+	leaq	336(%r9), %r9
+	leaq	336(%r10), %r10
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$89:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%rdi)
+	vmovhpd	%xmm1, (%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r9)
+	vmovhpd	%xmm0, (%r10)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%rdi)
+	vmovhpd	%xmm1, 8(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r9)
+	vmovhpd	%xmm0, 8(%r10)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%rdi)
+	vmovhpd	%xmm1, 16(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r9)
+	vmovhpd	%xmm0, 16(%r10)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%rdi)
+	vmovhpd	%xmm1, 24(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r9)
+	vmovhpd	%xmm0, 24(%r10)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%rdi)
+	vmovhpd	%xmm1, 32(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r9)
+	vmovhpd	%xmm0, 32(%r10)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%rdi)
+	vmovhpd	%xmm1, 40(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r9)
+	vmovhpd	%xmm0, 40(%r10)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%rdi)
+	vmovhpd	%xmm1, 48(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r9)
+	vmovhpd	%xmm0, 48(%r10)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%rdi)
+	vmovhpd	%xmm1, 56(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r9)
+	vmovhpd	%xmm0, 56(%r10)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%rdi)
+	vmovhpd	%xmm1, 64(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r9)
+	vmovhpd	%xmm0, 64(%r10)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%rdi)
+	vmovhpd	%xmm1, 72(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r9)
+	vmovhpd	%xmm0, 72(%r10)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%rdi)
+	vmovhpd	%xmm1, 80(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r9)
+	vmovhpd	%xmm0, 80(%r10)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%rdi)
+	vmovhpd	%xmm1, 88(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r9)
+	vmovhpd	%xmm0, 88(%r10)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%rdi)
+	vmovhpd	%xmm1, 96(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r9)
+	vmovhpd	%xmm0, 96(%r10)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%rdi)
+	vmovhpd	%xmm1, 104(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r9)
+	vmovhpd	%xmm0, 104(%r10)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%rdi)
+	vmovhpd	%xmm1, 112(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r9)
+	vmovhpd	%xmm0, 112(%r10)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%rdi)
+	vmovhpd	%xmm1, 120(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r9)
+	vmovhpd	%xmm0, 120(%r10)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%rdi)
+	vmovhpd	%xmm1, 128(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r9)
+	vmovhpd	%xmm0, 128(%r10)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%rdi)
+	vmovhpd	%xmm1, 136(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%r9)
+	vmovhpd	%xmm0, 136(%r10)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%rdi)
+	vmovhpd	%xmm1, 144(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%r9)
+	vmovhpd	%xmm0, 144(%r10)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%rdi)
+	vmovhpd	%xmm1, 152(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%r9)
+	vmovhpd	%xmm0, 152(%r10)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%rdi)
+	vmovhpd	%xmm1, 160(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%r9)
+	vmovhpd	%xmm0, 160(%r10)
+	leaq	14560(%rsp), %r11
+	leaq	384(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$88:
+	movq	%r12, %rdi
+	leaq	15072(%rsp), %r11
+	leaq	896(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$87:
+	movq	%r12, %r8
+	leaq	15584(%rsp), %r11
+	leaq	1408(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$86:
+	movq	%r12, %r9
+	leaq	16096(%rsp), %r11
+	leaq	1920(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$85:
+	cmpq	$255, %rdi
+	setbe	%al
+	cmpq	$255, %r8
+	setbe	%cl
+	orb 	%cl, %al
+	cmpq	$255, %r9
+	setbe	%cl
+	cmpq	$255, %r12
+	setbe	%dl
+	orb 	%dl, %cl
+	orb 	%al, %cl
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$62
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$63:
+	leaq	4480(%rsp), %rax
+	leaq	384(%rsp), %r10
+	leaq	896(%rsp), %r11
+	leaq	1408(%rsp), %rbx
+	leaq	1920(%rsp), %rbp
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$84:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r10)
+	vmovhpd	%xmm1, (%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbx)
+	vmovhpd	%xmm0, (%rbp)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r10)
+	vmovhpd	%xmm1, 8(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbx)
+	vmovhpd	%xmm0, 8(%rbp)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r10)
+	vmovhpd	%xmm1, 16(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbx)
+	vmovhpd	%xmm0, 16(%rbp)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r10)
+	vmovhpd	%xmm1, 24(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbx)
+	vmovhpd	%xmm0, 24(%rbp)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r10)
+	vmovhpd	%xmm1, 32(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbx)
+	vmovhpd	%xmm0, 32(%rbp)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r10)
+	vmovhpd	%xmm1, 40(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbx)
+	vmovhpd	%xmm0, 40(%rbp)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r10)
+	vmovhpd	%xmm1, 48(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbx)
+	vmovhpd	%xmm0, 48(%rbp)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r10)
+	vmovhpd	%xmm1, 56(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbx)
+	vmovhpd	%xmm0, 56(%rbp)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r10)
+	vmovhpd	%xmm1, 64(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbx)
+	vmovhpd	%xmm0, 64(%rbp)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r10)
+	vmovhpd	%xmm1, 72(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbx)
+	vmovhpd	%xmm0, 72(%rbp)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r10)
+	vmovhpd	%xmm1, 80(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbx)
+	vmovhpd	%xmm0, 80(%rbp)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r10)
+	vmovhpd	%xmm1, 88(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbx)
+	vmovhpd	%xmm0, 88(%rbp)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r10)
+	vmovhpd	%xmm1, 96(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbx)
+	vmovhpd	%xmm0, 96(%rbp)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r10)
+	vmovhpd	%xmm1, 104(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbx)
+	vmovhpd	%xmm0, 104(%rbp)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r10)
+	vmovhpd	%xmm1, 112(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbx)
+	vmovhpd	%xmm0, 112(%rbp)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r10)
+	vmovhpd	%xmm1, 120(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbx)
+	vmovhpd	%xmm0, 120(%rbp)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r10)
+	vmovhpd	%xmm1, 128(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbx)
+	vmovhpd	%xmm0, 128(%rbp)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r10)
+	vmovhpd	%xmm1, 136(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbx)
+	vmovhpd	%xmm0, 136(%rbp)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r10)
+	vmovhpd	%xmm1, 144(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbx)
+	vmovhpd	%xmm0, 144(%rbp)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r10)
+	vmovhpd	%xmm1, 152(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbx)
+	vmovhpd	%xmm0, 152(%rbp)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r10)
+	vmovhpd	%xmm1, 160(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbx)
+	vmovhpd	%xmm0, 160(%rbp)
+	leaq	14560(%rsp), %rax
+	leaq	384(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %rdi
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$79
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$80:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$83
+	movw	%si, (%rax,%rdi,2)
+	incq	%rdi
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$83:
+	cmpq	$256, %rdi
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$81
+	cmpw	$3329, %r11w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$81
+	movw	%r11w, (%rax,%rdi,2)
+	incq	%rdi
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$82:
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$81:
+	cmpq	$255, %rdi
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$79:
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$80
+	leaq	15072(%rsp), %rax
+	leaq	896(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r8
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$74
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$75:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$78
+	movw	%si, (%rax,%r8,2)
+	incq	%r8
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$78:
+	cmpq	$256, %r8
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$76
+	cmpw	$3329, %r11w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$76
+	movw	%r11w, (%rax,%r8,2)
+	incq	%r8
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$77:
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$76:
+	cmpq	$255, %r8
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$74:
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$75
+	leaq	15584(%rsp), %rax
+	leaq	1408(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r9
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$69
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$70:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$73
+	movw	%si, (%rax,%r9,2)
+	incq	%r9
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$73:
+	cmpq	$256, %r9
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$71
+	cmpw	$3329, %r11w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$71
+	movw	%r11w, (%rax,%r9,2)
+	incq	%r9
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$72:
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$71:
+	cmpq	$255, %r9
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$69:
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$70
+	leaq	16096(%rsp), %rax
+	leaq	1920(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$64
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$65:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$68
+	movw	%si, (%rax,%r12,2)
+	incq	%r12
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$68:
+	cmpq	$256, %r12
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$66
+	cmpw	$3329, %r11w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$66
+	movw	%r11w, (%rax,%r12,2)
+	incq	%r12
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$67:
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$66:
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$64:
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$65
+	cmpq	$255, %rdi
+	setbe	%al
+	cmpq	$255, %r8
+	setbe	%cl
+	orb 	%cl, %al
+	cmpq	$255, %r9
+	setbe	%cl
+	cmpq	$255, %r12
+	setbe	%dl
+	orb 	%dl, %cl
+	orb 	%al, %cl
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$62:
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$63
+	vmovdqu	(%rsp), %ymm0
+	vmovdqu	%ymm0, 384(%rsp)
+	movb	$2, 416(%rsp)
+	movb	$2, 417(%rsp)
+	leaq	384(%rsp), %rax
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vmovdqu	%ymm0, 256(%rsp)
+	vmovdqu	%ymm0, 288(%rsp)
+	vmovdqu	%ymm0, 320(%rsp)
+	vmovdqu	%ymm0, 352(%rsp)
+	vpbroadcastq	(%rax), %ymm5
+	movq	8(%rax), %rcx
+	movq	glob_data + 6208(%rip), %rdx
+	movq	%rcx, 160(%rsp,%rdx,8)
+	movq	16(%rax), %rcx
+	movq	glob_data + 6216(%rip), %rdx
+	movq	%rcx, 160(%rsp,%rdx,8)
+	movq	24(%rax), %rcx
+	movq	glob_data + 6224(%rip), %rdx
+	movq	%rcx, 160(%rsp,%rdx,8)
+	movb	32(%rax), %cl
+	movq	glob_data + 6232(%rip), %rdx
+	shlq	$3, %rdx
+	movb	%cl, 160(%rsp,%rdx)
+	movb	33(%rax), %al
+	incq	%rdx
+	movb	%al, 160(%rsp,%rdx)
+	incq	%rdx
+	movb	$31, 160(%rsp,%rdx)
+	movq	glob_data + 6360(%rip), %rax
+	shlq	$3, %rax
+	movq	$167, %rcx
+	andq	$7, %rcx
+	addq	%rcx, %rax
+	movb	$-128, 160(%rsp,%rax)
+	vmovdqu	192(%rsp), %ymm0
+	vmovdqu	224(%rsp), %ymm1
+	vmovdqu	256(%rsp), %ymm2
+	vmovdqu	288(%rsp), %ymm6
+	vmovdqu	320(%rsp), %ymm3
+	vmovdqu	352(%rsp), %ymm4
+	leaq	384(%rsp), %rax
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$61:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm3, %ymm7
+	vpxor	%ymm4, %ymm6, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm5, %ymm5
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%rsi), %ymm6, %ymm7
+	vpsrlvq	96(%rdi), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm6
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm6, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm4, %ymm4
+	vpermq	$-115, %ymm1, %ymm6
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm4, %ymm1
+	vpsrlvq	160(%rdi), %ymm4, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm3, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm3
+	vpblendd	$12, %ymm7, %ymm6, %ymm4
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm3, %ymm3
+	vpblendd	$48, %ymm10, %ymm4, %ymm4
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm3, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm4, %ymm4
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm1, %ymm3
+	vpblendd	$48, %ymm6, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm5, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm5, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm3, %ymm2
+	vpermq	$-115, %ymm4, %ymm3
+	vpermq	$114, %ymm12, %ymm4
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm0, %ymm6
+	vpxor	%ymm13, %ymm5, %ymm5
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rcx,%rdx), %ymm5, %ymm5
+	addq	$32, %rdx
+	decq	%r8
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$61
+	vmovdqu	%ymm5, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm1, 224(%rsp)
+	vmovdqu	%ymm2, 256(%rsp)
+	vmovdqu	%ymm6, 288(%rsp)
+	vmovdqu	%ymm3, 320(%rsp)
+	vmovdqu	%ymm4, 352(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 128(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 136(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 144(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 152(%rax)
+	movq	glob_data + 6360(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 160(%rax)
+	leaq	552(%rsp), %rax
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$60:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm3, %ymm7
+	vpxor	%ymm4, %ymm6, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm5, %ymm5
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%rsi), %ymm6, %ymm7
+	vpsrlvq	96(%rdi), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm6
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm6, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm4, %ymm4
+	vpermq	$-115, %ymm1, %ymm6
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm4, %ymm1
+	vpsrlvq	160(%rdi), %ymm4, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm3, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm3
+	vpblendd	$12, %ymm7, %ymm6, %ymm4
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm3, %ymm3
+	vpblendd	$48, %ymm10, %ymm4, %ymm4
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm3, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm4, %ymm4
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm1, %ymm3
+	vpblendd	$48, %ymm6, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm5, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm5, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm3, %ymm2
+	vpermq	$-115, %ymm4, %ymm3
+	vpermq	$114, %ymm12, %ymm4
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm0, %ymm6
+	vpxor	%ymm13, %ymm5, %ymm5
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rcx,%rdx), %ymm5, %ymm5
+	addq	$32, %rdx
+	decq	%r8
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$60
+	vmovdqu	%ymm5, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm1, 224(%rsp)
+	vmovdqu	%ymm2, 256(%rsp)
+	vmovdqu	%ymm6, 288(%rsp)
+	vmovdqu	%ymm3, 320(%rsp)
+	vmovdqu	%ymm4, 352(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 128(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 136(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 144(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 152(%rax)
+	movq	glob_data + 6360(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 160(%rax)
+	leaq	720(%rsp), %rax
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$59:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm3, %ymm7
+	vpxor	%ymm4, %ymm6, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm5, %ymm5
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%rsi), %ymm6, %ymm7
+	vpsrlvq	96(%rdi), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm6
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm6, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm4, %ymm4
+	vpermq	$-115, %ymm1, %ymm6
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm4, %ymm1
+	vpsrlvq	160(%rdi), %ymm4, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm3, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm3
+	vpblendd	$12, %ymm7, %ymm6, %ymm4
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm3, %ymm3
+	vpblendd	$48, %ymm10, %ymm4, %ymm4
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm3, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm4, %ymm4
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm1, %ymm3
+	vpblendd	$48, %ymm6, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm5, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm5, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm3, %ymm2
+	vpermq	$-115, %ymm4, %ymm3
+	vpermq	$114, %ymm12, %ymm4
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm0, %ymm6
+	vpxor	%ymm13, %ymm5, %ymm5
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rcx,%rdx), %ymm5, %ymm5
+	addq	$32, %rdx
+	decq	%r8
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$59
+	vmovdqu	%ymm5, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm1, 224(%rsp)
+	vmovdqu	%ymm2, 256(%rsp)
+	vmovdqu	%ymm6, 288(%rsp)
+	vmovdqu	%ymm3, 320(%rsp)
+	vmovdqu	%ymm4, 352(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 128(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 136(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 144(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 152(%rax)
+	movq	glob_data + 6360(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 160(%rax)
+	vmovdqu	%ymm5, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm1, 224(%rsp)
+	vmovdqu	%ymm2, 256(%rsp)
+	vmovdqu	%ymm6, 288(%rsp)
+	vmovdqu	%ymm3, 320(%rsp)
+	vmovdqu	%ymm4, 352(%rsp)
+	leaq	16608(%rsp), %r11
+	leaq	384(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$58:
+	cmpq	$255, %r12
+	setbe	%al
+	vmovdqu	160(%rsp), %ymm6
+	vmovdqu	192(%rsp), %ymm0
+	vmovdqu	224(%rsp), %ymm1
+	vmovdqu	256(%rsp), %ymm2
+	vmovdqu	288(%rsp), %ymm3
+	vmovdqu	320(%rsp), %ymm4
+	vmovdqu	352(%rsp), %ymm5
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$50
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$51:
+	leaq	384(%rsp), %rax
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$57:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm4, %ymm7
+	vpxor	%ymm5, %ymm3, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm6, %ymm6
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	96(%rsi), %ymm3, %ymm7
+	vpsrlvq	96(%rdi), %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm10
+	vpxor	%ymm9, %ymm4, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm4
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm4
+	vpxor	%ymm9, %ymm5, %ymm5
+	vpermq	$-115, %ymm1, %ymm3
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm5, %ymm1
+	vpsrlvq	160(%rdi), %ymm5, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm4, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm4
+	vpblendd	$12, %ymm7, %ymm3, %ymm5
+	vpblendd	$12, %ymm3, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm4, %ymm4
+	vpblendd	$48, %ymm10, %ymm5, %ymm5
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm4, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm5, %ymm5
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm3, %ymm12
+	vpxor	%ymm3, %ymm1, %ymm4
+	vpblendd	$48, %ymm3, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm6, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm3, %ymm13, %ymm13
+	vpblendd	$-64, %ymm3, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm4, %ymm2
+	vpermq	$-115, %ymm5, %ymm4
+	vpermq	$114, %ymm12, %ymm5
+	vpblendd	$12, %ymm3, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm3, %ymm9, %ymm3
+	vpandn	%ymm3, %ymm0, %ymm3
+	vpxor	%ymm13, %ymm6, %ymm6
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm3, %ymm3
+	vpxor	(%rcx,%rdx), %ymm6, %ymm6
+	addq	$32, %rdx
+	decq	%r8
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$57
+	vmovdqu	%ymm6, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm1, 224(%rsp)
+	vmovdqu	%ymm2, 256(%rsp)
+	vmovdqu	%ymm3, 288(%rsp)
+	vmovdqu	%ymm4, 320(%rsp)
+	vmovdqu	%ymm5, 352(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 128(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 136(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 144(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 152(%rax)
+	movq	glob_data + 6360(%rip), %rcx
+	movq	160(%rsp,%rcx,8), %rcx
+	movq	%rcx, 160(%rax)
+	leaq	16608(%rsp), %rax
+	leaq	384(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%dil
+	testb	%dil, %sil
+	jmp 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$52
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$53:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$56
+	movw	%si, (%rax,%r12,2)
+	incq	%r12
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$56:
+	cmpq	$256, %r12
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$54
+	cmpw	$3329, %r8w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$54
+	movw	%r8w, (%rax,%r12,2)
+	incq	%r12
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$55:
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$54:
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%dil
+	testb	%dil, %sil
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$52:
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$53
+	cmpq	$255, %r12
+	setbe	%al
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$50:
+	cmpb	$0, %al
+	jne 	Ljade_kem_kyber_kyber768_amd64_avx2_dec$51
+	leaq	12512(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$49:
+	leaq	13024(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$48:
+	leaq	13536(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$47:
+	leaq	14048(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$46:
+	leaq	14560(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$45:
+	leaq	15072(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$44:
+	leaq	15584(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$43:
+	leaq	16096(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$42:
+	leaq	16608(%rsp), %rax
+	call	L_nttunpack$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$41:
+	movq	17152(%rsp), %r10
+	movb	$0, %cl
+	leaq	9440(%rsp), %rax
+	leaq	9952(%rsp), %rdi
+	leaq	10464(%rsp), %r8
+	leaq	7904(%rsp), %r9
+	leaq	-1496(%rsp), %rsp
+	call	L_poly_getnoise_eta1_4x$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$40:
+	leaq	1496(%rsp), %rsp
+	movb	$4, %cl
+	leaq	8416(%rsp), %rax
+	leaq	8928(%rsp), %rdi
+	leaq	2944(%rsp), %r8
+	leaq	10976(%rsp), %r9
+	leaq	-1496(%rsp), %rsp
+	call	L_poly_getnoise_eta1_4x$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$39:
+	leaq	1496(%rsp), %rsp
+	leaq	9440(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$38:
+	leaq	9952(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$37:
+	leaq	10464(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$36:
+	leaq	10976(%rsp), %rcx
+	leaq	12512(%rsp), %rsi
+	leaq	9440(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$35:
+	leaq	2432(%rsp), %rcx
+	leaq	13024(%rsp), %rsi
+	leaq	9952(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$34:
+	leaq	10976(%rsp), %rcx
+	leaq	2432(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$33:
+	leaq	2432(%rsp), %rcx
+	leaq	13536(%rsp), %rsi
+	leaq	10464(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$32:
+	leaq	10976(%rsp), %rcx
+	leaq	2432(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$31:
+	leaq	11488(%rsp), %rcx
+	leaq	14048(%rsp), %rsi
+	leaq	9440(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$30:
+	leaq	2432(%rsp), %rcx
+	leaq	14560(%rsp), %rsi
+	leaq	9952(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$29:
+	leaq	11488(%rsp), %rcx
+	leaq	2432(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$28:
+	leaq	2432(%rsp), %rcx
+	leaq	15072(%rsp), %rsi
+	leaq	10464(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$27:
+	leaq	11488(%rsp), %rcx
+	leaq	2432(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$26:
+	leaq	12000(%rsp), %rcx
+	leaq	15584(%rsp), %rsi
+	leaq	9440(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$25:
+	leaq	2432(%rsp), %rcx
+	leaq	16096(%rsp), %rsi
+	leaq	9952(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$24:
+	leaq	12000(%rsp), %rcx
+	leaq	2432(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$23:
+	leaq	2432(%rsp), %rcx
+	leaq	16608(%rsp), %rsi
+	leaq	10464(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$22:
+	leaq	12000(%rsp), %rcx
+	leaq	2432(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$21:
+	leaq	2432(%rsp), %rcx
+	leaq	6368(%rsp), %rsi
+	leaq	9440(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$20:
+	leaq	3968(%rsp), %rcx
+	leaq	6880(%rsp), %rsi
+	leaq	9952(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$19:
+	leaq	2432(%rsp), %rcx
+	leaq	3968(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$18:
+	leaq	3968(%rsp), %rcx
+	leaq	7392(%rsp), %rsi
+	leaq	10464(%rsp), %rdi
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$17:
+	leaq	2432(%rsp), %rcx
+	leaq	3968(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$16:
+	leaq	10976(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$15:
+	leaq	11488(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$14:
+	leaq	12000(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$13:
+	leaq	2432(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$12:
+	leaq	10976(%rsp), %rcx
+	leaq	7904(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$11:
+	leaq	11488(%rsp), %rcx
+	leaq	8416(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$10:
+	leaq	12000(%rsp), %rcx
+	leaq	8928(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$9:
+	leaq	2432(%rsp), %rcx
+	leaq	2944(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$8:
+	leaq	2432(%rsp), %rcx
+	leaq	3456(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$7:
+	leaq	10976(%rsp), %rax
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	11488(%rsp), %rax
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	12000(%rsp), %rax
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	2432(%rsp), %rax
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	movq	17144(%rsp), %rax
+	movq	%rax, %rdx
+	leaq	10976(%rsp), %rcx
+	call	L_poly_csubq$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$6:
+	leaq	11488(%rsp), %rcx
+	call	L_poly_csubq$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$5:
+	leaq	12000(%rsp), %rcx
+	call	L_poly_csubq$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$4:
+	leaq	glob_data + 384(%rip), %rcx
+	vmovdqu	(%rcx), %ymm0
+	vpsllw	$3, %ymm0, %ymm1
+	vpbroadcastw	glob_data + 6422(%rip), %ymm2
+	vpbroadcastw	glob_data + 6420(%rip), %ymm3
+	vpbroadcastw	glob_data + 6418(%rip), %ymm4
+	vpbroadcastq	glob_data + 6184(%rip), %ymm5
+	vpbroadcastq	glob_data + 6176(%rip), %ymm6
+	vmovdqu	glob_data + 32(%rip), %ymm7
+	vmovdqu	10976(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, (%rdx)
+	vpextrd	$0, %xmm8, 16(%rdx)
+	vmovdqu	11008(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 20(%rdx)
+	vpextrd	$0, %xmm8, 36(%rdx)
+	vmovdqu	11040(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 40(%rdx)
+	vpextrd	$0, %xmm8, 56(%rdx)
+	vmovdqu	11072(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 60(%rdx)
+	vpextrd	$0, %xmm8, 76(%rdx)
+	vmovdqu	11104(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 80(%rdx)
+	vpextrd	$0, %xmm8, 96(%rdx)
+	vmovdqu	11136(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 100(%rdx)
+	vpextrd	$0, %xmm8, 116(%rdx)
+	vmovdqu	11168(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 120(%rdx)
+	vpextrd	$0, %xmm8, 136(%rdx)
+	vmovdqu	11200(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 140(%rdx)
+	vpextrd	$0, %xmm8, 156(%rdx)
+	vmovdqu	11232(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 160(%rdx)
+	vpextrd	$0, %xmm8, 176(%rdx)
+	vmovdqu	11264(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 180(%rdx)
+	vpextrd	$0, %xmm8, 196(%rdx)
+	vmovdqu	11296(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 200(%rdx)
+	vpextrd	$0, %xmm8, 216(%rdx)
+	vmovdqu	11328(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 220(%rdx)
+	vpextrd	$0, %xmm8, 236(%rdx)
+	vmovdqu	11360(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 240(%rdx)
+	vpextrd	$0, %xmm8, 256(%rdx)
+	vmovdqu	11392(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 260(%rdx)
+	vpextrd	$0, %xmm8, 276(%rdx)
+	vmovdqu	11424(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 280(%rdx)
+	vpextrd	$0, %xmm8, 296(%rdx)
+	vmovdqu	11456(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 300(%rdx)
+	vpextrd	$0, %xmm8, 316(%rdx)
+	vmovdqu	11488(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 320(%rdx)
+	vpextrd	$0, %xmm8, 336(%rdx)
+	vmovdqu	11520(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 340(%rdx)
+	vpextrd	$0, %xmm8, 356(%rdx)
+	vmovdqu	11552(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 360(%rdx)
+	vpextrd	$0, %xmm8, 376(%rdx)
+	vmovdqu	11584(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 380(%rdx)
+	vpextrd	$0, %xmm8, 396(%rdx)
+	vmovdqu	11616(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 400(%rdx)
+	vpextrd	$0, %xmm8, 416(%rdx)
+	vmovdqu	11648(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 420(%rdx)
+	vpextrd	$0, %xmm8, 436(%rdx)
+	vmovdqu	11680(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 440(%rdx)
+	vpextrd	$0, %xmm8, 456(%rdx)
+	vmovdqu	11712(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 460(%rdx)
+	vpextrd	$0, %xmm8, 476(%rdx)
+	vmovdqu	11744(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 480(%rdx)
+	vpextrd	$0, %xmm8, 496(%rdx)
+	vmovdqu	11776(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 500(%rdx)
+	vpextrd	$0, %xmm8, 516(%rdx)
+	vmovdqu	11808(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 520(%rdx)
+	vpextrd	$0, %xmm8, 536(%rdx)
+	vmovdqu	11840(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 540(%rdx)
+	vpextrd	$0, %xmm8, 556(%rdx)
+	vmovdqu	11872(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 560(%rdx)
+	vpextrd	$0, %xmm8, 576(%rdx)
+	vmovdqu	11904(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 580(%rdx)
+	vpextrd	$0, %xmm8, 596(%rdx)
+	vmovdqu	11936(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 600(%rdx)
+	vpextrd	$0, %xmm8, 616(%rdx)
+	vmovdqu	11968(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 620(%rdx)
+	vpextrd	$0, %xmm8, 636(%rdx)
+	vmovdqu	12000(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 640(%rdx)
+	vpextrd	$0, %xmm8, 656(%rdx)
+	vmovdqu	12032(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 660(%rdx)
+	vpextrd	$0, %xmm8, 676(%rdx)
+	vmovdqu	12064(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 680(%rdx)
+	vpextrd	$0, %xmm8, 696(%rdx)
+	vmovdqu	12096(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 700(%rdx)
+	vpextrd	$0, %xmm8, 716(%rdx)
+	vmovdqu	12128(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 720(%rdx)
+	vpextrd	$0, %xmm8, 736(%rdx)
+	vmovdqu	12160(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 740(%rdx)
+	vpextrd	$0, %xmm8, 756(%rdx)
+	vmovdqu	12192(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 760(%rdx)
+	vpextrd	$0, %xmm8, 776(%rdx)
+	vmovdqu	12224(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 780(%rdx)
+	vpextrd	$0, %xmm8, 796(%rdx)
+	vmovdqu	12256(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 800(%rdx)
+	vpextrd	$0, %xmm8, 816(%rdx)
+	vmovdqu	12288(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 820(%rdx)
+	vpextrd	$0, %xmm8, 836(%rdx)
+	vmovdqu	12320(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 840(%rdx)
+	vpextrd	$0, %xmm8, 856(%rdx)
+	vmovdqu	12352(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 860(%rdx)
+	vpextrd	$0, %xmm8, 876(%rdx)
+	vmovdqu	12384(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 880(%rdx)
+	vpextrd	$0, %xmm8, 896(%rdx)
+	vmovdqu	12416(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 900(%rdx)
+	vpextrd	$0, %xmm8, 916(%rdx)
+	vmovdqu	12448(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 920(%rdx)
+	vpextrd	$0, %xmm8, 936(%rdx)
+	vmovdqu	12480(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm1
+	vpaddw	%ymm2, %ymm8, %ymm2
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm0
+	vpsubw	%ymm2, %ymm1, %ymm2
+	vpandn	%ymm2, %ymm1, %ymm1
+	vpsrlw	$15, %ymm1, %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vpmulhrsw	%ymm3, %ymm0, %ymm0
+	vpand	%ymm4, %ymm0, %ymm0
+	vpmaddwd	%ymm5, %ymm0, %ymm0
+	vpsllvd	%ymm6, %ymm0, %ymm0
+	vpsrlq	$12, %ymm0, %ymm0
+	vpshufb	%ymm7, %ymm0, %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vextracti128	$1, %ymm0, %xmm0
+	vpblendw	$-32, %xmm0, %xmm1, %xmm1
+	vmovdqu	%xmm1, 940(%rdx)
+	vpextrd	$0, %xmm0, 956(%rdx)
+	leaq	960(%rax), %rax
+	leaq	2432(%rsp), %rcx
+	call	L_poly_compress_1$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$3:
+	movq	17128(%rsp), %r8
+	leaq	5280(%rsp), %rax
+	movq	$0, %rcx
+	movq	$1, %rdx
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	(%rax), %ymm1
+	vmovdqu	(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	32(%rax), %ymm1
+	vmovdqu	32(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	64(%rax), %ymm1
+	vmovdqu	64(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	96(%rax), %ymm1
+	vmovdqu	96(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	128(%rax), %ymm1
+	vmovdqu	128(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	160(%rax), %ymm1
+	vmovdqu	160(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	192(%rax), %ymm1
+	vmovdqu	192(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	224(%rax), %ymm1
+	vmovdqu	224(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	256(%rax), %ymm1
+	vmovdqu	256(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	288(%rax), %ymm1
+	vmovdqu	288(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	320(%rax), %ymm1
+	vmovdqu	320(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	352(%rax), %ymm1
+	vmovdqu	352(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	384(%rax), %ymm1
+	vmovdqu	384(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	416(%rax), %ymm1
+	vmovdqu	416(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	448(%rax), %ymm1
+	vmovdqu	448(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	480(%rax), %ymm1
+	vmovdqu	480(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	512(%rax), %ymm1
+	vmovdqu	512(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	544(%rax), %ymm1
+	vmovdqu	544(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	576(%rax), %ymm1
+	vmovdqu	576(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	608(%rax), %ymm1
+	vmovdqu	608(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	640(%rax), %ymm1
+	vmovdqu	640(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	672(%rax), %ymm1
+	vmovdqu	672(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	704(%rax), %ymm1
+	vmovdqu	704(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	736(%rax), %ymm1
+	vmovdqu	736(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	768(%rax), %ymm1
+	vmovdqu	768(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	800(%rax), %ymm1
+	vmovdqu	800(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	832(%rax), %ymm1
+	vmovdqu	832(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	864(%rax), %ymm1
+	vmovdqu	864(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	896(%rax), %ymm1
+	vmovdqu	896(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	928(%rax), %ymm1
+	vmovdqu	928(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	960(%rax), %ymm1
+	vmovdqu	960(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	992(%rax), %ymm1
+	vmovdqu	992(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	1024(%rax), %ymm1
+	vmovdqu	1024(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vmovdqu	1056(%rax), %ymm1
+	vmovdqu	1056(%r8), %ymm2
+	vpxor	%ymm2, %ymm1, %ymm1
+	vpor	%ymm1, %ymm0, %ymm0
+	vptest	%ymm0, %ymm0
+	cmovne	%rdx, %rcx
+	negq	%rcx
+	shrq	$63, %rcx
+	movq	17136(%rsp), %rax
+	addq	$64, %rax
+	addq	$2304, %rax
+	leaq	96(%rsp), %rdx
+	negq	%rcx
+	movq	%rcx, 17136(%rsp)
+	vpbroadcastq	17136(%rsp), %ymm0
+	vmovdqu	(%rdx), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpblendvb	%ymm0, %ymm2, %ymm1, %ymm0
+	vmovdqu	%ymm0, (%rdx)
+	movq	$1088, %rdi
+	leaq	128(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_256$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$2:
+	leaq	248(%rsp), %rsp
+	movq	17120(%rsp), %rdx
+	movq	$32, %rcx
+	leaq	96(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_shake256_64$1
+Ljade_kem_kyber_kyber768_amd64_avx2_dec$1:
+	leaq	248(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	17160(%rsp), %r12
+	movq	17168(%rsp), %rbp
+	movq	17176(%rsp), %rbx
+	movq	17184(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber768_amd64_avx2_enc:
+jade_kem_kyber_kyber768_amd64_avx2_enc:
+	movq	%rsp, %rax
+	leaq	-64(%rsp), %rsp
+	andq	$-32, %rsp
+	movq	%rax, 56(%rsp)
+	movq	%r12, 32(%rsp)
+	movq	%rbp, 40(%rsp)
+	movq	%rbx, 48(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %rbp
+	movq	%rdx, %r12
+	movq	%rsp, %rdi
+	movq	$32, %rsi
+	call	__jasmin_syscall_randombytes__
+	movq	%rsp, %rcx
+	leaq	-16088(%rsp), %rsp
+	call	L__crypto_kem_enc_derand_jazz$1
+Ljade_kem_kyber_kyber768_amd64_avx2_enc$1:
+	leaq	16088(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	32(%rsp), %r12
+	movq	40(%rsp), %rbp
+	movq	48(%rsp), %rbx
+	movq	56(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber768_amd64_avx2_enc_derand:
+jade_kem_kyber_kyber768_amd64_avx2_enc_derand:
+	movq	%rsp, %rax
+	leaq	-64(%rsp), %rsp
+	andq	$-32, %rsp
+	movq	%rax, 56(%rsp)
+	movq	%r12, 32(%rsp)
+	movq	%rbp, 40(%rsp)
+	movq	%rbx, 48(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %rbp
+	movq	%rdx, %r12
+	movq	%rsp, %rax
+	movb	(%rcx), %dl
+	movb	%dl, (%rax)
+	movb	1(%rcx), %dl
+	movb	%dl, 1(%rax)
+	movb	2(%rcx), %dl
+	movb	%dl, 2(%rax)
+	movb	3(%rcx), %dl
+	movb	%dl, 3(%rax)
+	movb	4(%rcx), %dl
+	movb	%dl, 4(%rax)
+	movb	5(%rcx), %dl
+	movb	%dl, 5(%rax)
+	movb	6(%rcx), %dl
+	movb	%dl, 6(%rax)
+	movb	7(%rcx), %dl
+	movb	%dl, 7(%rax)
+	movb	8(%rcx), %dl
+	movb	%dl, 8(%rax)
+	movb	9(%rcx), %dl
+	movb	%dl, 9(%rax)
+	movb	10(%rcx), %dl
+	movb	%dl, 10(%rax)
+	movb	11(%rcx), %dl
+	movb	%dl, 11(%rax)
+	movb	12(%rcx), %dl
+	movb	%dl, 12(%rax)
+	movb	13(%rcx), %dl
+	movb	%dl, 13(%rax)
+	movb	14(%rcx), %dl
+	movb	%dl, 14(%rax)
+	movb	15(%rcx), %dl
+	movb	%dl, 15(%rax)
+	movb	16(%rcx), %dl
+	movb	%dl, 16(%rax)
+	movb	17(%rcx), %dl
+	movb	%dl, 17(%rax)
+	movb	18(%rcx), %dl
+	movb	%dl, 18(%rax)
+	movb	19(%rcx), %dl
+	movb	%dl, 19(%rax)
+	movb	20(%rcx), %dl
+	movb	%dl, 20(%rax)
+	movb	21(%rcx), %dl
+	movb	%dl, 21(%rax)
+	movb	22(%rcx), %dl
+	movb	%dl, 22(%rax)
+	movb	23(%rcx), %dl
+	movb	%dl, 23(%rax)
+	movb	24(%rcx), %dl
+	movb	%dl, 24(%rax)
+	movb	25(%rcx), %dl
+	movb	%dl, 25(%rax)
+	movb	26(%rcx), %dl
+	movb	%dl, 26(%rax)
+	movb	27(%rcx), %dl
+	movb	%dl, 27(%rax)
+	movb	28(%rcx), %dl
+	movb	%dl, 28(%rax)
+	movb	29(%rcx), %dl
+	movb	%dl, 29(%rax)
+	movb	30(%rcx), %dl
+	movb	%dl, 30(%rax)
+	movb	31(%rcx), %cl
+	movb	%cl, 31(%rax)
+	movq	%rsp, %rcx
+	leaq	-16088(%rsp), %rsp
+	call	L__crypto_kem_enc_derand_jazz$1
+Ljade_kem_kyber_kyber768_amd64_avx2_enc_derand$1:
+	leaq	16088(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	32(%rsp), %r12
+	movq	40(%rsp), %rbp
+	movq	48(%rsp), %rbx
+	movq	56(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber768_amd64_avx2_keypair:
+jade_kem_kyber_kyber768_amd64_avx2_keypair:
+	movq	%rsp, %rax
+	leaq	-96(%rsp), %rsp
+	andq	$-32, %rsp
+	movq	%rax, 88(%rsp)
+	movq	%r12, 64(%rsp)
+	movq	%rbp, 72(%rsp)
+	movq	%rbx, 80(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %rbp
+	movq	%rsp, %rdi
+	movq	$64, %rsi
+	call	__jasmin_syscall_randombytes__
+	movq	%rsp, %rax
+	leaq	-13048(%rsp), %rsp
+	call	L__crypto_kem_keypair_derand_jazz$1
+Ljade_kem_kyber_kyber768_amd64_avx2_keypair$1:
+	leaq	13048(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	64(%rsp), %r12
+	movq	72(%rsp), %rbp
+	movq	80(%rsp), %rbx
+	movq	88(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber768_amd64_avx2_keypair_derand:
+jade_kem_kyber_kyber768_amd64_avx2_keypair_derand:
+	movq	%rsp, %rax
+	leaq	-96(%rsp), %rsp
+	andq	$-32, %rsp
+	movq	%rax, 88(%rsp)
+	movq	%r12, 64(%rsp)
+	movq	%rbp, 72(%rsp)
+	movq	%rbx, 80(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %rbp
+	movq	%rsp, %rax
+	movb	(%rdx), %cl
+	movb	%cl, (%rax)
+	movb	1(%rdx), %cl
+	movb	%cl, 1(%rax)
+	movb	2(%rdx), %cl
+	movb	%cl, 2(%rax)
+	movb	3(%rdx), %cl
+	movb	%cl, 3(%rax)
+	movb	4(%rdx), %cl
+	movb	%cl, 4(%rax)
+	movb	5(%rdx), %cl
+	movb	%cl, 5(%rax)
+	movb	6(%rdx), %cl
+	movb	%cl, 6(%rax)
+	movb	7(%rdx), %cl
+	movb	%cl, 7(%rax)
+	movb	8(%rdx), %cl
+	movb	%cl, 8(%rax)
+	movb	9(%rdx), %cl
+	movb	%cl, 9(%rax)
+	movb	10(%rdx), %cl
+	movb	%cl, 10(%rax)
+	movb	11(%rdx), %cl
+	movb	%cl, 11(%rax)
+	movb	12(%rdx), %cl
+	movb	%cl, 12(%rax)
+	movb	13(%rdx), %cl
+	movb	%cl, 13(%rax)
+	movb	14(%rdx), %cl
+	movb	%cl, 14(%rax)
+	movb	15(%rdx), %cl
+	movb	%cl, 15(%rax)
+	movb	16(%rdx), %cl
+	movb	%cl, 16(%rax)
+	movb	17(%rdx), %cl
+	movb	%cl, 17(%rax)
+	movb	18(%rdx), %cl
+	movb	%cl, 18(%rax)
+	movb	19(%rdx), %cl
+	movb	%cl, 19(%rax)
+	movb	20(%rdx), %cl
+	movb	%cl, 20(%rax)
+	movb	21(%rdx), %cl
+	movb	%cl, 21(%rax)
+	movb	22(%rdx), %cl
+	movb	%cl, 22(%rax)
+	movb	23(%rdx), %cl
+	movb	%cl, 23(%rax)
+	movb	24(%rdx), %cl
+	movb	%cl, 24(%rax)
+	movb	25(%rdx), %cl
+	movb	%cl, 25(%rax)
+	movb	26(%rdx), %cl
+	movb	%cl, 26(%rax)
+	movb	27(%rdx), %cl
+	movb	%cl, 27(%rax)
+	movb	28(%rdx), %cl
+	movb	%cl, 28(%rax)
+	movb	29(%rdx), %cl
+	movb	%cl, 29(%rax)
+	movb	30(%rdx), %cl
+	movb	%cl, 30(%rax)
+	movb	31(%rdx), %cl
+	movb	%cl, 31(%rax)
+	movb	32(%rdx), %cl
+	movb	%cl, 32(%rax)
+	movb	33(%rdx), %cl
+	movb	%cl, 33(%rax)
+	movb	34(%rdx), %cl
+	movb	%cl, 34(%rax)
+	movb	35(%rdx), %cl
+	movb	%cl, 35(%rax)
+	movb	36(%rdx), %cl
+	movb	%cl, 36(%rax)
+	movb	37(%rdx), %cl
+	movb	%cl, 37(%rax)
+	movb	38(%rdx), %cl
+	movb	%cl, 38(%rax)
+	movb	39(%rdx), %cl
+	movb	%cl, 39(%rax)
+	movb	40(%rdx), %cl
+	movb	%cl, 40(%rax)
+	movb	41(%rdx), %cl
+	movb	%cl, 41(%rax)
+	movb	42(%rdx), %cl
+	movb	%cl, 42(%rax)
+	movb	43(%rdx), %cl
+	movb	%cl, 43(%rax)
+	movb	44(%rdx), %cl
+	movb	%cl, 44(%rax)
+	movb	45(%rdx), %cl
+	movb	%cl, 45(%rax)
+	movb	46(%rdx), %cl
+	movb	%cl, 46(%rax)
+	movb	47(%rdx), %cl
+	movb	%cl, 47(%rax)
+	movb	48(%rdx), %cl
+	movb	%cl, 48(%rax)
+	movb	49(%rdx), %cl
+	movb	%cl, 49(%rax)
+	movb	50(%rdx), %cl
+	movb	%cl, 50(%rax)
+	movb	51(%rdx), %cl
+	movb	%cl, 51(%rax)
+	movb	52(%rdx), %cl
+	movb	%cl, 52(%rax)
+	movb	53(%rdx), %cl
+	movb	%cl, 53(%rax)
+	movb	54(%rdx), %cl
+	movb	%cl, 54(%rax)
+	movb	55(%rdx), %cl
+	movb	%cl, 55(%rax)
+	movb	56(%rdx), %cl
+	movb	%cl, 56(%rax)
+	movb	57(%rdx), %cl
+	movb	%cl, 57(%rax)
+	movb	58(%rdx), %cl
+	movb	%cl, 58(%rax)
+	movb	59(%rdx), %cl
+	movb	%cl, 59(%rax)
+	movb	60(%rdx), %cl
+	movb	%cl, 60(%rax)
+	movb	61(%rdx), %cl
+	movb	%cl, 61(%rax)
+	movb	62(%rdx), %cl
+	movb	%cl, 62(%rax)
+	movb	63(%rdx), %cl
+	movb	%cl, 63(%rax)
+	movq	%rsp, %rax
+	leaq	-13048(%rsp), %rsp
+	call	L__crypto_kem_keypair_derand_jazz$1
+Ljade_kem_kyber_kyber768_amd64_avx2_keypair_derand$1:
+	leaq	13048(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	64(%rsp), %r12
+	movq	72(%rsp), %rbp
+	movq	80(%rsp), %rbx
+	movq	88(%rsp), %rsp
+	ret
+L__crypto_kem_enc_derand_jazz$1:
+	movq	%r12, 16064(%rsp)
+	movq	%rbx, 16072(%rsp)
+	movq	%rbp, 16080(%rsp)
+	leaq	64(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_256_32$1
+L__crypto_kem_enc_derand_jazz$133:
+	leaq	248(%rsp), %rsp
+	movq	16064(%rsp), %r8
+	movq	$1184, %rdi
+	leaq	96(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_256$1
+L__crypto_kem_enc_derand_jazz$132:
+	leaq	248(%rsp), %rsp
+	leaq	128(%rsp), %rax
+	leaq	64(%rsp), %rcx
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_512_64$1
+L__crypto_kem_enc_derand_jazz$131:
+	leaq	248(%rsp), %rsp
+	movq	16064(%rsp), %rax
+	leaq	64(%rsp), %rdi
+	leaq	160(%rsp), %rcx
+	movq	%rax, %rsi
+	leaq	5312(%rsp), %r8
+	call	L_poly_frombytes$1
+L__crypto_kem_enc_derand_jazz$130:
+	addq	$384, %rsi
+	leaq	5824(%rsp), %r8
+	call	L_poly_frombytes$1
+L__crypto_kem_enc_derand_jazz$129:
+	addq	$384, %rsi
+	leaq	6336(%rsp), %r8
+	call	L_poly_frombytes$1
+L__crypto_kem_enc_derand_jazz$128:
+	movq	$0, %rdx
+	addq	$1152, %rax
+	jmp 	L__crypto_kem_enc_derand_jazz$126
+L__crypto_kem_enc_derand_jazz$127:
+	movq	(%rax), %rsi
+	movq	%rsi, 32(%rsp,%rdx,8)
+	addq	$8, %rax
+	incq	%rdx
+L__crypto_kem_enc_derand_jazz$126:
+	cmpq	$4, %rdx
+	jb  	L__crypto_kem_enc_derand_jazz$127
+	leaq	2464(%rsp), %rax
+	call	L_poly_frommsg_1$1
+L__crypto_kem_enc_derand_jazz$125:
+	movq	%rcx, 16064(%rsp)
+	vmovdqu	32(%rsp), %ymm0
+	vmovdqu	%ymm0, 416(%rsp)
+	vmovdqu	%ymm0, 928(%rsp)
+	vmovdqu	%ymm0, 1440(%rsp)
+	vmovdqu	%ymm0, 1952(%rsp)
+	vmovdqu	%ymm0, 32(%rsp)
+	movb	$0, 448(%rsp)
+	movb	$0, 449(%rsp)
+	movb	$0, 960(%rsp)
+	movb	$1, 961(%rsp)
+	movb	$0, 1472(%rsp)
+	movb	$2, 1473(%rsp)
+	movb	$1, 1984(%rsp)
+	movb	$0, 1985(%rsp)
+	leaq	4512(%rsp), %rax
+	leaq	416(%rsp), %rcx
+	leaq	928(%rsp), %rdx
+	leaq	1440(%rsp), %rsi
+	leaq	1952(%rsp), %rdi
+	call	L_shake128_absorb4x_34$1
+L__crypto_kem_enc_derand_jazz$124:
+	leaq	4512(%rsp), %rax
+	leaq	416(%rsp), %rdi
+	leaq	928(%rsp), %r8
+	leaq	1440(%rsp), %r9
+	leaq	1952(%rsp), %r10
+	movq	%rdi, %r11
+	movq	%r8, %rbx
+	movq	%r9, %rbp
+	movq	%r10, %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_enc_derand_jazz$123:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	168(%rdi), %r11
+	leaq	168(%r8), %rbx
+	leaq	168(%r9), %rbp
+	leaq	168(%r10), %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_enc_derand_jazz$122:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	336(%rdi), %rdi
+	leaq	336(%r8), %r8
+	leaq	336(%r9), %r9
+	leaq	336(%r10), %r10
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_enc_derand_jazz$121:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%rdi)
+	vmovhpd	%xmm1, (%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r9)
+	vmovhpd	%xmm0, (%r10)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%rdi)
+	vmovhpd	%xmm1, 8(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r9)
+	vmovhpd	%xmm0, 8(%r10)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%rdi)
+	vmovhpd	%xmm1, 16(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r9)
+	vmovhpd	%xmm0, 16(%r10)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%rdi)
+	vmovhpd	%xmm1, 24(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r9)
+	vmovhpd	%xmm0, 24(%r10)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%rdi)
+	vmovhpd	%xmm1, 32(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r9)
+	vmovhpd	%xmm0, 32(%r10)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%rdi)
+	vmovhpd	%xmm1, 40(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r9)
+	vmovhpd	%xmm0, 40(%r10)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%rdi)
+	vmovhpd	%xmm1, 48(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r9)
+	vmovhpd	%xmm0, 48(%r10)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%rdi)
+	vmovhpd	%xmm1, 56(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r9)
+	vmovhpd	%xmm0, 56(%r10)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%rdi)
+	vmovhpd	%xmm1, 64(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r9)
+	vmovhpd	%xmm0, 64(%r10)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%rdi)
+	vmovhpd	%xmm1, 72(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r9)
+	vmovhpd	%xmm0, 72(%r10)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%rdi)
+	vmovhpd	%xmm1, 80(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r9)
+	vmovhpd	%xmm0, 80(%r10)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%rdi)
+	vmovhpd	%xmm1, 88(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r9)
+	vmovhpd	%xmm0, 88(%r10)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%rdi)
+	vmovhpd	%xmm1, 96(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r9)
+	vmovhpd	%xmm0, 96(%r10)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%rdi)
+	vmovhpd	%xmm1, 104(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r9)
+	vmovhpd	%xmm0, 104(%r10)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%rdi)
+	vmovhpd	%xmm1, 112(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r9)
+	vmovhpd	%xmm0, 112(%r10)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%rdi)
+	vmovhpd	%xmm1, 120(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r9)
+	vmovhpd	%xmm0, 120(%r10)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%rdi)
+	vmovhpd	%xmm1, 128(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r9)
+	vmovhpd	%xmm0, 128(%r10)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%rdi)
+	vmovhpd	%xmm1, 136(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%r9)
+	vmovhpd	%xmm0, 136(%r10)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%rdi)
+	vmovhpd	%xmm1, 144(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%r9)
+	vmovhpd	%xmm0, 144(%r10)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%rdi)
+	vmovhpd	%xmm1, 152(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%r9)
+	vmovhpd	%xmm0, 152(%r10)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%rdi)
+	vmovhpd	%xmm1, 160(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%r9)
+	vmovhpd	%xmm0, 160(%r10)
+	leaq	11456(%rsp), %r11
+	leaq	416(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$120:
+	movq	%r12, %r9
+	leaq	11968(%rsp), %r11
+	leaq	928(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$119:
+	movq	%r12, %rdi
+	leaq	12480(%rsp), %r11
+	leaq	1440(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$118:
+	movq	%r12, %r8
+	leaq	12992(%rsp), %r11
+	leaq	1952(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$117:
+	cmpq	$255, %r9
+	setbe	%al
+	cmpq	$255, %rdi
+	setbe	%cl
+	orb 	%cl, %al
+	cmpq	$255, %r8
+	setbe	%cl
+	cmpq	$255, %r12
+	setbe	%dl
+	orb 	%dl, %cl
+	orb 	%al, %cl
+	jmp 	L__crypto_kem_enc_derand_jazz$94
+L__crypto_kem_enc_derand_jazz$95:
+	leaq	4512(%rsp), %rax
+	leaq	416(%rsp), %r10
+	leaq	928(%rsp), %r11
+	leaq	1440(%rsp), %rbx
+	leaq	1952(%rsp), %rbp
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_enc_derand_jazz$116:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r10)
+	vmovhpd	%xmm1, (%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbx)
+	vmovhpd	%xmm0, (%rbp)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r10)
+	vmovhpd	%xmm1, 8(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbx)
+	vmovhpd	%xmm0, 8(%rbp)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r10)
+	vmovhpd	%xmm1, 16(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbx)
+	vmovhpd	%xmm0, 16(%rbp)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r10)
+	vmovhpd	%xmm1, 24(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbx)
+	vmovhpd	%xmm0, 24(%rbp)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r10)
+	vmovhpd	%xmm1, 32(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbx)
+	vmovhpd	%xmm0, 32(%rbp)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r10)
+	vmovhpd	%xmm1, 40(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbx)
+	vmovhpd	%xmm0, 40(%rbp)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r10)
+	vmovhpd	%xmm1, 48(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbx)
+	vmovhpd	%xmm0, 48(%rbp)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r10)
+	vmovhpd	%xmm1, 56(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbx)
+	vmovhpd	%xmm0, 56(%rbp)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r10)
+	vmovhpd	%xmm1, 64(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbx)
+	vmovhpd	%xmm0, 64(%rbp)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r10)
+	vmovhpd	%xmm1, 72(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbx)
+	vmovhpd	%xmm0, 72(%rbp)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r10)
+	vmovhpd	%xmm1, 80(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbx)
+	vmovhpd	%xmm0, 80(%rbp)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r10)
+	vmovhpd	%xmm1, 88(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbx)
+	vmovhpd	%xmm0, 88(%rbp)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r10)
+	vmovhpd	%xmm1, 96(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbx)
+	vmovhpd	%xmm0, 96(%rbp)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r10)
+	vmovhpd	%xmm1, 104(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbx)
+	vmovhpd	%xmm0, 104(%rbp)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r10)
+	vmovhpd	%xmm1, 112(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbx)
+	vmovhpd	%xmm0, 112(%rbp)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r10)
+	vmovhpd	%xmm1, 120(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbx)
+	vmovhpd	%xmm0, 120(%rbp)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r10)
+	vmovhpd	%xmm1, 128(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbx)
+	vmovhpd	%xmm0, 128(%rbp)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r10)
+	vmovhpd	%xmm1, 136(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbx)
+	vmovhpd	%xmm0, 136(%rbp)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r10)
+	vmovhpd	%xmm1, 144(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbx)
+	vmovhpd	%xmm0, 144(%rbp)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r10)
+	vmovhpd	%xmm1, 152(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbx)
+	vmovhpd	%xmm0, 152(%rbp)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r10)
+	vmovhpd	%xmm1, 160(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbx)
+	vmovhpd	%xmm0, 160(%rbp)
+	leaq	11456(%rsp), %rax
+	leaq	416(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r9
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_enc_derand_jazz$111
+L__crypto_kem_enc_derand_jazz$112:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_enc_derand_jazz$115
+	movw	%si, (%rax,%r9,2)
+	incq	%r9
+L__crypto_kem_enc_derand_jazz$115:
+	cmpq	$256, %r9
+	jnb 	L__crypto_kem_enc_derand_jazz$113
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_enc_derand_jazz$113
+	movw	%r11w, (%rax,%r9,2)
+	incq	%r9
+L__crypto_kem_enc_derand_jazz$114:
+L__crypto_kem_enc_derand_jazz$113:
+	cmpq	$255, %r9
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_enc_derand_jazz$111:
+	jne 	L__crypto_kem_enc_derand_jazz$112
+	leaq	11968(%rsp), %rax
+	leaq	928(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %rdi
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_enc_derand_jazz$106
+L__crypto_kem_enc_derand_jazz$107:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_enc_derand_jazz$110
+	movw	%si, (%rax,%rdi,2)
+	incq	%rdi
+L__crypto_kem_enc_derand_jazz$110:
+	cmpq	$256, %rdi
+	jnb 	L__crypto_kem_enc_derand_jazz$108
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_enc_derand_jazz$108
+	movw	%r11w, (%rax,%rdi,2)
+	incq	%rdi
+L__crypto_kem_enc_derand_jazz$109:
+L__crypto_kem_enc_derand_jazz$108:
+	cmpq	$255, %rdi
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_enc_derand_jazz$106:
+	jne 	L__crypto_kem_enc_derand_jazz$107
+	leaq	12480(%rsp), %rax
+	leaq	1440(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r8
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_enc_derand_jazz$101
+L__crypto_kem_enc_derand_jazz$102:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_enc_derand_jazz$105
+	movw	%si, (%rax,%r8,2)
+	incq	%r8
+L__crypto_kem_enc_derand_jazz$105:
+	cmpq	$256, %r8
+	jnb 	L__crypto_kem_enc_derand_jazz$103
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_enc_derand_jazz$103
+	movw	%r11w, (%rax,%r8,2)
+	incq	%r8
+L__crypto_kem_enc_derand_jazz$104:
+L__crypto_kem_enc_derand_jazz$103:
+	cmpq	$255, %r8
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_enc_derand_jazz$101:
+	jne 	L__crypto_kem_enc_derand_jazz$102
+	leaq	12992(%rsp), %rax
+	leaq	1952(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_enc_derand_jazz$96
+L__crypto_kem_enc_derand_jazz$97:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_enc_derand_jazz$100
+	movw	%si, (%rax,%r12,2)
+	incq	%r12
+L__crypto_kem_enc_derand_jazz$100:
+	cmpq	$256, %r12
+	jnb 	L__crypto_kem_enc_derand_jazz$98
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_enc_derand_jazz$98
+	movw	%r11w, (%rax,%r12,2)
+	incq	%r12
+L__crypto_kem_enc_derand_jazz$99:
+L__crypto_kem_enc_derand_jazz$98:
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_enc_derand_jazz$96:
+	jne 	L__crypto_kem_enc_derand_jazz$97
+	cmpq	$255, %r9
+	setbe	%al
+	cmpq	$255, %rdi
+	setbe	%cl
+	orb 	%cl, %al
+	cmpq	$255, %r8
+	setbe	%cl
+	cmpq	$255, %r12
+	setbe	%dl
+	orb 	%dl, %cl
+	orb 	%al, %cl
+L__crypto_kem_enc_derand_jazz$94:
+	jne 	L__crypto_kem_enc_derand_jazz$95
+	vmovdqu	32(%rsp), %ymm0
+	vmovdqu	%ymm0, 416(%rsp)
+	vmovdqu	%ymm0, 928(%rsp)
+	vmovdqu	%ymm0, 1440(%rsp)
+	vmovdqu	%ymm0, 1952(%rsp)
+	vmovdqu	%ymm0, 32(%rsp)
+	movb	$1, 448(%rsp)
+	movb	$1, 449(%rsp)
+	movb	$1, 960(%rsp)
+	movb	$2, 961(%rsp)
+	movb	$2, 1472(%rsp)
+	movb	$0, 1473(%rsp)
+	movb	$2, 1984(%rsp)
+	movb	$1, 1985(%rsp)
+	leaq	4512(%rsp), %rax
+	leaq	416(%rsp), %rcx
+	leaq	928(%rsp), %rdx
+	leaq	1440(%rsp), %rsi
+	leaq	1952(%rsp), %rdi
+	call	L_shake128_absorb4x_34$1
+L__crypto_kem_enc_derand_jazz$93:
+	leaq	4512(%rsp), %rax
+	leaq	416(%rsp), %rdi
+	leaq	928(%rsp), %r8
+	leaq	1440(%rsp), %r9
+	leaq	1952(%rsp), %r10
+	movq	%rdi, %r11
+	movq	%r8, %rbx
+	movq	%r9, %rbp
+	movq	%r10, %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_enc_derand_jazz$92:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	168(%rdi), %r11
+	leaq	168(%r8), %rbx
+	leaq	168(%r9), %rbp
+	leaq	168(%r10), %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_enc_derand_jazz$91:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	336(%rdi), %rdi
+	leaq	336(%r8), %r8
+	leaq	336(%r9), %r9
+	leaq	336(%r10), %r10
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_enc_derand_jazz$90:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%rdi)
+	vmovhpd	%xmm1, (%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r9)
+	vmovhpd	%xmm0, (%r10)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%rdi)
+	vmovhpd	%xmm1, 8(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r9)
+	vmovhpd	%xmm0, 8(%r10)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%rdi)
+	vmovhpd	%xmm1, 16(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r9)
+	vmovhpd	%xmm0, 16(%r10)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%rdi)
+	vmovhpd	%xmm1, 24(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r9)
+	vmovhpd	%xmm0, 24(%r10)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%rdi)
+	vmovhpd	%xmm1, 32(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r9)
+	vmovhpd	%xmm0, 32(%r10)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%rdi)
+	vmovhpd	%xmm1, 40(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r9)
+	vmovhpd	%xmm0, 40(%r10)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%rdi)
+	vmovhpd	%xmm1, 48(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r9)
+	vmovhpd	%xmm0, 48(%r10)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%rdi)
+	vmovhpd	%xmm1, 56(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r9)
+	vmovhpd	%xmm0, 56(%r10)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%rdi)
+	vmovhpd	%xmm1, 64(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r9)
+	vmovhpd	%xmm0, 64(%r10)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%rdi)
+	vmovhpd	%xmm1, 72(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r9)
+	vmovhpd	%xmm0, 72(%r10)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%rdi)
+	vmovhpd	%xmm1, 80(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r9)
+	vmovhpd	%xmm0, 80(%r10)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%rdi)
+	vmovhpd	%xmm1, 88(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r9)
+	vmovhpd	%xmm0, 88(%r10)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%rdi)
+	vmovhpd	%xmm1, 96(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r9)
+	vmovhpd	%xmm0, 96(%r10)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%rdi)
+	vmovhpd	%xmm1, 104(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r9)
+	vmovhpd	%xmm0, 104(%r10)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%rdi)
+	vmovhpd	%xmm1, 112(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r9)
+	vmovhpd	%xmm0, 112(%r10)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%rdi)
+	vmovhpd	%xmm1, 120(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r9)
+	vmovhpd	%xmm0, 120(%r10)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%rdi)
+	vmovhpd	%xmm1, 128(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r9)
+	vmovhpd	%xmm0, 128(%r10)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%rdi)
+	vmovhpd	%xmm1, 136(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%r9)
+	vmovhpd	%xmm0, 136(%r10)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%rdi)
+	vmovhpd	%xmm1, 144(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%r9)
+	vmovhpd	%xmm0, 144(%r10)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%rdi)
+	vmovhpd	%xmm1, 152(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%r9)
+	vmovhpd	%xmm0, 152(%r10)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%rdi)
+	vmovhpd	%xmm1, 160(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%r9)
+	vmovhpd	%xmm0, 160(%r10)
+	leaq	13504(%rsp), %r11
+	leaq	416(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$89:
+	movq	%r12, %rdi
+	leaq	14016(%rsp), %r11
+	leaq	928(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$88:
+	movq	%r12, %r8
+	leaq	14528(%rsp), %r11
+	leaq	1440(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$87:
+	movq	%r12, %r9
+	leaq	15040(%rsp), %r11
+	leaq	1952(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$86:
+	cmpq	$255, %rdi
+	setbe	%al
+	cmpq	$255, %r8
+	setbe	%cl
+	orb 	%cl, %al
+	cmpq	$255, %r9
+	setbe	%cl
+	cmpq	$255, %r12
+	setbe	%dl
+	orb 	%dl, %cl
+	orb 	%al, %cl
+	jmp 	L__crypto_kem_enc_derand_jazz$63
+L__crypto_kem_enc_derand_jazz$64:
+	leaq	4512(%rsp), %rax
+	leaq	416(%rsp), %r10
+	leaq	928(%rsp), %r11
+	leaq	1440(%rsp), %rbx
+	leaq	1952(%rsp), %rbp
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_enc_derand_jazz$85:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r10)
+	vmovhpd	%xmm1, (%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbx)
+	vmovhpd	%xmm0, (%rbp)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r10)
+	vmovhpd	%xmm1, 8(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbx)
+	vmovhpd	%xmm0, 8(%rbp)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r10)
+	vmovhpd	%xmm1, 16(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbx)
+	vmovhpd	%xmm0, 16(%rbp)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r10)
+	vmovhpd	%xmm1, 24(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbx)
+	vmovhpd	%xmm0, 24(%rbp)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r10)
+	vmovhpd	%xmm1, 32(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbx)
+	vmovhpd	%xmm0, 32(%rbp)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r10)
+	vmovhpd	%xmm1, 40(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbx)
+	vmovhpd	%xmm0, 40(%rbp)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r10)
+	vmovhpd	%xmm1, 48(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbx)
+	vmovhpd	%xmm0, 48(%rbp)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r10)
+	vmovhpd	%xmm1, 56(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbx)
+	vmovhpd	%xmm0, 56(%rbp)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r10)
+	vmovhpd	%xmm1, 64(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbx)
+	vmovhpd	%xmm0, 64(%rbp)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r10)
+	vmovhpd	%xmm1, 72(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbx)
+	vmovhpd	%xmm0, 72(%rbp)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r10)
+	vmovhpd	%xmm1, 80(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbx)
+	vmovhpd	%xmm0, 80(%rbp)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r10)
+	vmovhpd	%xmm1, 88(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbx)
+	vmovhpd	%xmm0, 88(%rbp)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r10)
+	vmovhpd	%xmm1, 96(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbx)
+	vmovhpd	%xmm0, 96(%rbp)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r10)
+	vmovhpd	%xmm1, 104(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbx)
+	vmovhpd	%xmm0, 104(%rbp)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r10)
+	vmovhpd	%xmm1, 112(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbx)
+	vmovhpd	%xmm0, 112(%rbp)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r10)
+	vmovhpd	%xmm1, 120(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbx)
+	vmovhpd	%xmm0, 120(%rbp)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r10)
+	vmovhpd	%xmm1, 128(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbx)
+	vmovhpd	%xmm0, 128(%rbp)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r10)
+	vmovhpd	%xmm1, 136(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbx)
+	vmovhpd	%xmm0, 136(%rbp)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r10)
+	vmovhpd	%xmm1, 144(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbx)
+	vmovhpd	%xmm0, 144(%rbp)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r10)
+	vmovhpd	%xmm1, 152(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbx)
+	vmovhpd	%xmm0, 152(%rbp)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r10)
+	vmovhpd	%xmm1, 160(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbx)
+	vmovhpd	%xmm0, 160(%rbp)
+	leaq	13504(%rsp), %rax
+	leaq	416(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %rdi
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_enc_derand_jazz$80
+L__crypto_kem_enc_derand_jazz$81:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_enc_derand_jazz$84
+	movw	%si, (%rax,%rdi,2)
+	incq	%rdi
+L__crypto_kem_enc_derand_jazz$84:
+	cmpq	$256, %rdi
+	jnb 	L__crypto_kem_enc_derand_jazz$82
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_enc_derand_jazz$82
+	movw	%r11w, (%rax,%rdi,2)
+	incq	%rdi
+L__crypto_kem_enc_derand_jazz$83:
+L__crypto_kem_enc_derand_jazz$82:
+	cmpq	$255, %rdi
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_enc_derand_jazz$80:
+	jne 	L__crypto_kem_enc_derand_jazz$81
+	leaq	14016(%rsp), %rax
+	leaq	928(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r8
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_enc_derand_jazz$75
+L__crypto_kem_enc_derand_jazz$76:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_enc_derand_jazz$79
+	movw	%si, (%rax,%r8,2)
+	incq	%r8
+L__crypto_kem_enc_derand_jazz$79:
+	cmpq	$256, %r8
+	jnb 	L__crypto_kem_enc_derand_jazz$77
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_enc_derand_jazz$77
+	movw	%r11w, (%rax,%r8,2)
+	incq	%r8
+L__crypto_kem_enc_derand_jazz$78:
+L__crypto_kem_enc_derand_jazz$77:
+	cmpq	$255, %r8
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_enc_derand_jazz$75:
+	jne 	L__crypto_kem_enc_derand_jazz$76
+	leaq	14528(%rsp), %rax
+	leaq	1440(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r9
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_enc_derand_jazz$70
+L__crypto_kem_enc_derand_jazz$71:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_enc_derand_jazz$74
+	movw	%si, (%rax,%r9,2)
+	incq	%r9
+L__crypto_kem_enc_derand_jazz$74:
+	cmpq	$256, %r9
+	jnb 	L__crypto_kem_enc_derand_jazz$72
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_enc_derand_jazz$72
+	movw	%r11w, (%rax,%r9,2)
+	incq	%r9
+L__crypto_kem_enc_derand_jazz$73:
+L__crypto_kem_enc_derand_jazz$72:
+	cmpq	$255, %r9
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_enc_derand_jazz$70:
+	jne 	L__crypto_kem_enc_derand_jazz$71
+	leaq	15040(%rsp), %rax
+	leaq	1952(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_enc_derand_jazz$65
+L__crypto_kem_enc_derand_jazz$66:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_enc_derand_jazz$69
+	movw	%si, (%rax,%r12,2)
+	incq	%r12
+L__crypto_kem_enc_derand_jazz$69:
+	cmpq	$256, %r12
+	jnb 	L__crypto_kem_enc_derand_jazz$67
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_enc_derand_jazz$67
+	movw	%r11w, (%rax,%r12,2)
+	incq	%r12
+L__crypto_kem_enc_derand_jazz$68:
+L__crypto_kem_enc_derand_jazz$67:
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_enc_derand_jazz$65:
+	jne 	L__crypto_kem_enc_derand_jazz$66
+	cmpq	$255, %rdi
+	setbe	%al
+	cmpq	$255, %r8
+	setbe	%cl
+	orb 	%cl, %al
+	cmpq	$255, %r9
+	setbe	%cl
+	cmpq	$255, %r12
+	setbe	%dl
+	orb 	%dl, %cl
+	orb 	%al, %cl
+L__crypto_kem_enc_derand_jazz$63:
+	jne 	L__crypto_kem_enc_derand_jazz$64
+	vmovdqu	32(%rsp), %ymm0
+	vmovdqu	%ymm0, 416(%rsp)
+	movb	$2, 448(%rsp)
+	movb	$2, 449(%rsp)
+	leaq	416(%rsp), %rax
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vmovdqu	%ymm0, 256(%rsp)
+	vmovdqu	%ymm0, 288(%rsp)
+	vmovdqu	%ymm0, 320(%rsp)
+	vmovdqu	%ymm0, 352(%rsp)
+	vmovdqu	%ymm0, 384(%rsp)
+	vpbroadcastq	(%rax), %ymm5
+	movq	8(%rax), %rcx
+	movq	glob_data + 6208(%rip), %rdx
+	movq	%rcx, 192(%rsp,%rdx,8)
+	movq	16(%rax), %rcx
+	movq	glob_data + 6216(%rip), %rdx
+	movq	%rcx, 192(%rsp,%rdx,8)
+	movq	24(%rax), %rcx
+	movq	glob_data + 6224(%rip), %rdx
+	movq	%rcx, 192(%rsp,%rdx,8)
+	movb	32(%rax), %cl
+	movq	glob_data + 6232(%rip), %rdx
+	shlq	$3, %rdx
+	movb	%cl, 192(%rsp,%rdx)
+	movb	33(%rax), %al
+	incq	%rdx
+	movb	%al, 192(%rsp,%rdx)
+	incq	%rdx
+	movb	$31, 192(%rsp,%rdx)
+	movq	glob_data + 6360(%rip), %rax
+	shlq	$3, %rax
+	movq	$167, %rcx
+	andq	$7, %rcx
+	addq	%rcx, %rax
+	movb	$-128, 192(%rsp,%rax)
+	vmovdqu	224(%rsp), %ymm0
+	vmovdqu	256(%rsp), %ymm1
+	vmovdqu	288(%rsp), %ymm2
+	vmovdqu	320(%rsp), %ymm6
+	vmovdqu	352(%rsp), %ymm3
+	vmovdqu	384(%rsp), %ymm4
+	leaq	416(%rsp), %rax
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+L__crypto_kem_enc_derand_jazz$62:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm3, %ymm7
+	vpxor	%ymm4, %ymm6, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm5, %ymm5
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%rsi), %ymm6, %ymm7
+	vpsrlvq	96(%rdi), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm6
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm6, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm4, %ymm4
+	vpermq	$-115, %ymm1, %ymm6
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm4, %ymm1
+	vpsrlvq	160(%rdi), %ymm4, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm3, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm3
+	vpblendd	$12, %ymm7, %ymm6, %ymm4
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm3, %ymm3
+	vpblendd	$48, %ymm10, %ymm4, %ymm4
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm3, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm4, %ymm4
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm1, %ymm3
+	vpblendd	$48, %ymm6, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm5, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm5, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm3, %ymm2
+	vpermq	$-115, %ymm4, %ymm3
+	vpermq	$114, %ymm12, %ymm4
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm0, %ymm6
+	vpxor	%ymm13, %ymm5, %ymm5
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rcx,%rdx), %ymm5, %ymm5
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L__crypto_kem_enc_derand_jazz$62
+	vmovdqu	%ymm5, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vmovdqu	%ymm1, 256(%rsp)
+	vmovdqu	%ymm2, 288(%rsp)
+	vmovdqu	%ymm6, 320(%rsp)
+	vmovdqu	%ymm3, 352(%rsp)
+	vmovdqu	%ymm4, 384(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 128(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 136(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 144(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 152(%rax)
+	movq	glob_data + 6360(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 160(%rax)
+	leaq	584(%rsp), %rax
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+L__crypto_kem_enc_derand_jazz$61:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm3, %ymm7
+	vpxor	%ymm4, %ymm6, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm5, %ymm5
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%rsi), %ymm6, %ymm7
+	vpsrlvq	96(%rdi), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm6
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm6, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm4, %ymm4
+	vpermq	$-115, %ymm1, %ymm6
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm4, %ymm1
+	vpsrlvq	160(%rdi), %ymm4, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm3, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm3
+	vpblendd	$12, %ymm7, %ymm6, %ymm4
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm3, %ymm3
+	vpblendd	$48, %ymm10, %ymm4, %ymm4
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm3, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm4, %ymm4
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm1, %ymm3
+	vpblendd	$48, %ymm6, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm5, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm5, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm3, %ymm2
+	vpermq	$-115, %ymm4, %ymm3
+	vpermq	$114, %ymm12, %ymm4
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm0, %ymm6
+	vpxor	%ymm13, %ymm5, %ymm5
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rcx,%rdx), %ymm5, %ymm5
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L__crypto_kem_enc_derand_jazz$61
+	vmovdqu	%ymm5, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vmovdqu	%ymm1, 256(%rsp)
+	vmovdqu	%ymm2, 288(%rsp)
+	vmovdqu	%ymm6, 320(%rsp)
+	vmovdqu	%ymm3, 352(%rsp)
+	vmovdqu	%ymm4, 384(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 128(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 136(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 144(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 152(%rax)
+	movq	glob_data + 6360(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 160(%rax)
+	leaq	752(%rsp), %rax
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+L__crypto_kem_enc_derand_jazz$60:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm3, %ymm7
+	vpxor	%ymm4, %ymm6, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm5, %ymm5
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%rsi), %ymm6, %ymm7
+	vpsrlvq	96(%rdi), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm6
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm6, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm4, %ymm4
+	vpermq	$-115, %ymm1, %ymm6
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm4, %ymm1
+	vpsrlvq	160(%rdi), %ymm4, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm3, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm3
+	vpblendd	$12, %ymm7, %ymm6, %ymm4
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm3, %ymm3
+	vpblendd	$48, %ymm10, %ymm4, %ymm4
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm3, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm4, %ymm4
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm1, %ymm3
+	vpblendd	$48, %ymm6, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm5, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm5, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm3, %ymm2
+	vpermq	$-115, %ymm4, %ymm3
+	vpermq	$114, %ymm12, %ymm4
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm0, %ymm6
+	vpxor	%ymm13, %ymm5, %ymm5
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rcx,%rdx), %ymm5, %ymm5
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L__crypto_kem_enc_derand_jazz$60
+	vmovdqu	%ymm5, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vmovdqu	%ymm1, 256(%rsp)
+	vmovdqu	%ymm2, 288(%rsp)
+	vmovdqu	%ymm6, 320(%rsp)
+	vmovdqu	%ymm3, 352(%rsp)
+	vmovdqu	%ymm4, 384(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 128(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 136(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 144(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 152(%rax)
+	movq	glob_data + 6360(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 160(%rax)
+	vmovdqu	%ymm5, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vmovdqu	%ymm1, 256(%rsp)
+	vmovdqu	%ymm2, 288(%rsp)
+	vmovdqu	%ymm6, 320(%rsp)
+	vmovdqu	%ymm3, 352(%rsp)
+	vmovdqu	%ymm4, 384(%rsp)
+	leaq	15552(%rsp), %r11
+	leaq	416(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_enc_derand_jazz$59:
+	cmpq	$255, %r12
+	setbe	%al
+	vmovdqu	192(%rsp), %ymm6
+	vmovdqu	224(%rsp), %ymm0
+	vmovdqu	256(%rsp), %ymm1
+	vmovdqu	288(%rsp), %ymm2
+	vmovdqu	320(%rsp), %ymm3
+	vmovdqu	352(%rsp), %ymm4
+	vmovdqu	384(%rsp), %ymm5
+	jmp 	L__crypto_kem_enc_derand_jazz$51
+L__crypto_kem_enc_derand_jazz$52:
+	leaq	416(%rsp), %rax
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+L__crypto_kem_enc_derand_jazz$58:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm4, %ymm7
+	vpxor	%ymm5, %ymm3, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm6, %ymm6
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	96(%rsi), %ymm3, %ymm7
+	vpsrlvq	96(%rdi), %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm10
+	vpxor	%ymm9, %ymm4, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm4
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm4
+	vpxor	%ymm9, %ymm5, %ymm5
+	vpermq	$-115, %ymm1, %ymm3
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm5, %ymm1
+	vpsrlvq	160(%rdi), %ymm5, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm4, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm4
+	vpblendd	$12, %ymm7, %ymm3, %ymm5
+	vpblendd	$12, %ymm3, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm4, %ymm4
+	vpblendd	$48, %ymm10, %ymm5, %ymm5
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm4, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm5, %ymm5
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm3, %ymm12
+	vpxor	%ymm3, %ymm1, %ymm4
+	vpblendd	$48, %ymm3, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm6, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm3, %ymm13, %ymm13
+	vpblendd	$-64, %ymm3, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm4, %ymm2
+	vpermq	$-115, %ymm5, %ymm4
+	vpermq	$114, %ymm12, %ymm5
+	vpblendd	$12, %ymm3, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm3, %ymm9, %ymm3
+	vpandn	%ymm3, %ymm0, %ymm3
+	vpxor	%ymm13, %ymm6, %ymm6
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm3, %ymm3
+	vpxor	(%rcx,%rdx), %ymm6, %ymm6
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L__crypto_kem_enc_derand_jazz$58
+	vmovdqu	%ymm6, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vmovdqu	%ymm1, 256(%rsp)
+	vmovdqu	%ymm2, 288(%rsp)
+	vmovdqu	%ymm3, 320(%rsp)
+	vmovdqu	%ymm4, 352(%rsp)
+	vmovdqu	%ymm5, 384(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 128(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 136(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 144(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 152(%rax)
+	movq	glob_data + 6360(%rip), %rcx
+	movq	192(%rsp,%rcx,8), %rcx
+	movq	%rcx, 160(%rax)
+	leaq	15552(%rsp), %rax
+	leaq	416(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%dil
+	testb	%dil, %sil
+	jmp 	L__crypto_kem_enc_derand_jazz$53
+L__crypto_kem_enc_derand_jazz$54:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_enc_derand_jazz$57
+	movw	%si, (%rax,%r12,2)
+	incq	%r12
+L__crypto_kem_enc_derand_jazz$57:
+	cmpq	$256, %r12
+	jnb 	L__crypto_kem_enc_derand_jazz$55
+	cmpw	$3329, %r8w
+	jnb 	L__crypto_kem_enc_derand_jazz$55
+	movw	%r8w, (%rax,%r12,2)
+	incq	%r12
+L__crypto_kem_enc_derand_jazz$56:
+L__crypto_kem_enc_derand_jazz$55:
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%dil
+	testb	%dil, %sil
+L__crypto_kem_enc_derand_jazz$53:
+	jne 	L__crypto_kem_enc_derand_jazz$54
+	cmpq	$255, %r12
+	setbe	%al
+L__crypto_kem_enc_derand_jazz$51:
+	cmpb	$0, %al
+	jne 	L__crypto_kem_enc_derand_jazz$52
+	leaq	11456(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$50:
+	leaq	11968(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$49:
+	leaq	12480(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$48:
+	leaq	12992(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$47:
+	leaq	13504(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$46:
+	leaq	14016(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$45:
+	leaq	14528(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$44:
+	leaq	15040(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$43:
+	leaq	15552(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_enc_derand_jazz$42:
+	movq	16064(%rsp), %r10
+	movb	$0, %cl
+	leaq	8384(%rsp), %rax
+	leaq	8896(%rsp), %rdi
+	leaq	9408(%rsp), %r8
+	leaq	6848(%rsp), %r9
+	leaq	-1496(%rsp), %rsp
+	call	L_poly_getnoise_eta1_4x$1
+L__crypto_kem_enc_derand_jazz$41:
+	leaq	1496(%rsp), %rsp
+	movb	$4, %cl
+	leaq	7360(%rsp), %rax
+	leaq	7872(%rsp), %rdi
+	leaq	2976(%rsp), %r8
+	leaq	9920(%rsp), %r9
+	leaq	-1496(%rsp), %rsp
+	call	L_poly_getnoise_eta1_4x$1
+L__crypto_kem_enc_derand_jazz$40:
+	leaq	1496(%rsp), %rsp
+	leaq	8384(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_enc_derand_jazz$39:
+	leaq	8896(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_enc_derand_jazz$38:
+	leaq	9408(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_enc_derand_jazz$37:
+	leaq	9920(%rsp), %rcx
+	leaq	11456(%rsp), %rsi
+	leaq	8384(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$36:
+	leaq	3488(%rsp), %rcx
+	leaq	11968(%rsp), %rsi
+	leaq	8896(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$35:
+	leaq	9920(%rsp), %rcx
+	leaq	3488(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$34:
+	leaq	3488(%rsp), %rcx
+	leaq	12480(%rsp), %rsi
+	leaq	9408(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$33:
+	leaq	9920(%rsp), %rcx
+	leaq	3488(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$32:
+	leaq	10432(%rsp), %rcx
+	leaq	12992(%rsp), %rsi
+	leaq	8384(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$31:
+	leaq	3488(%rsp), %rcx
+	leaq	13504(%rsp), %rsi
+	leaq	8896(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$30:
+	leaq	10432(%rsp), %rcx
+	leaq	3488(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$29:
+	leaq	3488(%rsp), %rcx
+	leaq	14016(%rsp), %rsi
+	leaq	9408(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$28:
+	leaq	10432(%rsp), %rcx
+	leaq	3488(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$27:
+	leaq	10944(%rsp), %rcx
+	leaq	14528(%rsp), %rsi
+	leaq	8384(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$26:
+	leaq	3488(%rsp), %rcx
+	leaq	15040(%rsp), %rsi
+	leaq	8896(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$25:
+	leaq	10944(%rsp), %rcx
+	leaq	3488(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$24:
+	leaq	3488(%rsp), %rcx
+	leaq	15552(%rsp), %rsi
+	leaq	9408(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$23:
+	leaq	10944(%rsp), %rcx
+	leaq	3488(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$22:
+	leaq	3488(%rsp), %rcx
+	leaq	5312(%rsp), %rsi
+	leaq	8384(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$21:
+	leaq	4000(%rsp), %rcx
+	leaq	5824(%rsp), %rsi
+	leaq	8896(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$20:
+	leaq	3488(%rsp), %rcx
+	leaq	4000(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$19:
+	leaq	4000(%rsp), %rcx
+	leaq	6336(%rsp), %rsi
+	leaq	9408(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_enc_derand_jazz$18:
+	leaq	3488(%rsp), %rcx
+	leaq	4000(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$17:
+	leaq	9920(%rsp), %rcx
+	call	L_poly_invntt$1
+L__crypto_kem_enc_derand_jazz$16:
+	leaq	10432(%rsp), %rcx
+	call	L_poly_invntt$1
+L__crypto_kem_enc_derand_jazz$15:
+	leaq	10944(%rsp), %rcx
+	call	L_poly_invntt$1
+L__crypto_kem_enc_derand_jazz$14:
+	leaq	3488(%rsp), %rcx
+	call	L_poly_invntt$1
+L__crypto_kem_enc_derand_jazz$13:
+	leaq	9920(%rsp), %rcx
+	leaq	6848(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$12:
+	leaq	10432(%rsp), %rcx
+	leaq	7360(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$11:
+	leaq	10944(%rsp), %rcx
+	leaq	7872(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$10:
+	leaq	3488(%rsp), %rcx
+	leaq	2976(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$9:
+	leaq	3488(%rsp), %rcx
+	leaq	2464(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_enc_derand_jazz$8:
+	leaq	9920(%rsp), %rax
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	10432(%rsp), %rax
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	10944(%rsp), %rax
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	3488(%rsp), %rax
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	movq	16072(%rsp), %rax
+	leaq	9920(%rsp), %rcx
+	call	L_poly_csubq$1
+L__crypto_kem_enc_derand_jazz$7:
+	leaq	10432(%rsp), %rcx
+	call	L_poly_csubq$1
+L__crypto_kem_enc_derand_jazz$6:
+	leaq	10944(%rsp), %rcx
+	call	L_poly_csubq$1
+L__crypto_kem_enc_derand_jazz$5:
+	leaq	glob_data + 384(%rip), %rcx
+	vmovdqu	(%rcx), %ymm0
+	vpsllw	$3, %ymm0, %ymm1
+	vpbroadcastw	glob_data + 6422(%rip), %ymm2
+	vpbroadcastw	glob_data + 6420(%rip), %ymm3
+	vpbroadcastw	glob_data + 6418(%rip), %ymm4
+	vpbroadcastq	glob_data + 6184(%rip), %ymm5
+	vpbroadcastq	glob_data + 6176(%rip), %ymm6
+	vmovdqu	glob_data + 32(%rip), %ymm7
+	vmovdqu	9920(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, (%rax)
+	vpextrd	$0, %xmm8, 16(%rax)
+	vmovdqu	9952(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 20(%rax)
+	vpextrd	$0, %xmm8, 36(%rax)
+	vmovdqu	9984(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 40(%rax)
+	vpextrd	$0, %xmm8, 56(%rax)
+	vmovdqu	10016(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 60(%rax)
+	vpextrd	$0, %xmm8, 76(%rax)
+	vmovdqu	10048(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 80(%rax)
+	vpextrd	$0, %xmm8, 96(%rax)
+	vmovdqu	10080(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 100(%rax)
+	vpextrd	$0, %xmm8, 116(%rax)
+	vmovdqu	10112(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 120(%rax)
+	vpextrd	$0, %xmm8, 136(%rax)
+	vmovdqu	10144(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 140(%rax)
+	vpextrd	$0, %xmm8, 156(%rax)
+	vmovdqu	10176(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 160(%rax)
+	vpextrd	$0, %xmm8, 176(%rax)
+	vmovdqu	10208(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 180(%rax)
+	vpextrd	$0, %xmm8, 196(%rax)
+	vmovdqu	10240(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 200(%rax)
+	vpextrd	$0, %xmm8, 216(%rax)
+	vmovdqu	10272(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 220(%rax)
+	vpextrd	$0, %xmm8, 236(%rax)
+	vmovdqu	10304(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 240(%rax)
+	vpextrd	$0, %xmm8, 256(%rax)
+	vmovdqu	10336(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 260(%rax)
+	vpextrd	$0, %xmm8, 276(%rax)
+	vmovdqu	10368(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 280(%rax)
+	vpextrd	$0, %xmm8, 296(%rax)
+	vmovdqu	10400(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 300(%rax)
+	vpextrd	$0, %xmm8, 316(%rax)
+	vmovdqu	10432(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 320(%rax)
+	vpextrd	$0, %xmm8, 336(%rax)
+	vmovdqu	10464(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 340(%rax)
+	vpextrd	$0, %xmm8, 356(%rax)
+	vmovdqu	10496(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 360(%rax)
+	vpextrd	$0, %xmm8, 376(%rax)
+	vmovdqu	10528(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 380(%rax)
+	vpextrd	$0, %xmm8, 396(%rax)
+	vmovdqu	10560(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 400(%rax)
+	vpextrd	$0, %xmm8, 416(%rax)
+	vmovdqu	10592(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 420(%rax)
+	vpextrd	$0, %xmm8, 436(%rax)
+	vmovdqu	10624(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 440(%rax)
+	vpextrd	$0, %xmm8, 456(%rax)
+	vmovdqu	10656(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 460(%rax)
+	vpextrd	$0, %xmm8, 476(%rax)
+	vmovdqu	10688(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 480(%rax)
+	vpextrd	$0, %xmm8, 496(%rax)
+	vmovdqu	10720(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 500(%rax)
+	vpextrd	$0, %xmm8, 516(%rax)
+	vmovdqu	10752(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 520(%rax)
+	vpextrd	$0, %xmm8, 536(%rax)
+	vmovdqu	10784(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 540(%rax)
+	vpextrd	$0, %xmm8, 556(%rax)
+	vmovdqu	10816(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 560(%rax)
+	vpextrd	$0, %xmm8, 576(%rax)
+	vmovdqu	10848(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 580(%rax)
+	vpextrd	$0, %xmm8, 596(%rax)
+	vmovdqu	10880(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 600(%rax)
+	vpextrd	$0, %xmm8, 616(%rax)
+	vmovdqu	10912(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 620(%rax)
+	vpextrd	$0, %xmm8, 636(%rax)
+	vmovdqu	10944(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 640(%rax)
+	vpextrd	$0, %xmm8, 656(%rax)
+	vmovdqu	10976(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 660(%rax)
+	vpextrd	$0, %xmm8, 676(%rax)
+	vmovdqu	11008(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 680(%rax)
+	vpextrd	$0, %xmm8, 696(%rax)
+	vmovdqu	11040(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 700(%rax)
+	vpextrd	$0, %xmm8, 716(%rax)
+	vmovdqu	11072(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 720(%rax)
+	vpextrd	$0, %xmm8, 736(%rax)
+	vmovdqu	11104(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 740(%rax)
+	vpextrd	$0, %xmm8, 756(%rax)
+	vmovdqu	11136(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 760(%rax)
+	vpextrd	$0, %xmm8, 776(%rax)
+	vmovdqu	11168(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 780(%rax)
+	vpextrd	$0, %xmm8, 796(%rax)
+	vmovdqu	11200(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 800(%rax)
+	vpextrd	$0, %xmm8, 816(%rax)
+	vmovdqu	11232(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 820(%rax)
+	vpextrd	$0, %xmm8, 836(%rax)
+	vmovdqu	11264(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 840(%rax)
+	vpextrd	$0, %xmm8, 856(%rax)
+	vmovdqu	11296(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 860(%rax)
+	vpextrd	$0, %xmm8, 876(%rax)
+	vmovdqu	11328(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 880(%rax)
+	vpextrd	$0, %xmm8, 896(%rax)
+	vmovdqu	11360(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 900(%rax)
+	vpextrd	$0, %xmm8, 916(%rax)
+	vmovdqu	11392(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm9
+	vpaddw	%ymm2, %ymm8, %ymm10
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm9, %ymm10
+	vpandn	%ymm10, %ymm9, %ymm9
+	vpsrlw	$15, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm8, %ymm8
+	vpmulhrsw	%ymm3, %ymm8, %ymm8
+	vpand	%ymm4, %ymm8, %ymm8
+	vpmaddwd	%ymm5, %ymm8, %ymm8
+	vpsllvd	%ymm6, %ymm8, %ymm8
+	vpsrlq	$12, %ymm8, %ymm8
+	vpshufb	%ymm7, %ymm8, %ymm8
+	vmovdqu	%xmm8, %xmm9
+	vextracti128	$1, %ymm8, %xmm8
+	vpblendw	$-32, %xmm8, %xmm9, %xmm9
+	vmovdqu	%xmm9, 920(%rax)
+	vpextrd	$0, %xmm8, 936(%rax)
+	vmovdqu	11424(%rsp), %ymm8
+	vpmullw	%ymm1, %ymm8, %ymm1
+	vpaddw	%ymm2, %ymm8, %ymm2
+	vpsllw	$3, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm8, %ymm0
+	vpsubw	%ymm2, %ymm1, %ymm2
+	vpandn	%ymm2, %ymm1, %ymm1
+	vpsrlw	$15, %ymm1, %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vpmulhrsw	%ymm3, %ymm0, %ymm0
+	vpand	%ymm4, %ymm0, %ymm0
+	vpmaddwd	%ymm5, %ymm0, %ymm0
+	vpsllvd	%ymm6, %ymm0, %ymm0
+	vpsrlq	$12, %ymm0, %ymm0
+	vpshufb	%ymm7, %ymm0, %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vextracti128	$1, %ymm0, %xmm0
+	vpblendw	$-32, %xmm0, %xmm1, %xmm1
+	vmovdqu	%xmm1, 940(%rax)
+	vpextrd	$0, %xmm0, 956(%rax)
+	addq	$960, %rax
+	leaq	3488(%rsp), %rcx
+	call	L_poly_compress$1
+L__crypto_kem_enc_derand_jazz$4:
+	movq	16072(%rsp), %r8
+	movq	$1088, %rdi
+	leaq	160(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_256$1
+L__crypto_kem_enc_derand_jazz$3:
+	leaq	248(%rsp), %rsp
+	movq	16080(%rsp), %rdx
+	movq	$32, %rcx
+	leaq	128(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_shake256_64$1
+L__crypto_kem_enc_derand_jazz$2:
+	leaq	248(%rsp), %rsp
+	ret
+L__crypto_kem_keypair_derand_jazz$1:
+	movq	%rax, 12928(%rsp)
+	movq	%rbx, 12936(%rsp)
+	movq	%rbp, 12944(%rsp)
+	movq	%rax, %rcx
+	movq	%rbx, 12952(%rsp)
+	movq	%rbp, 12960(%rsp)
+	leaq	12968(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_512_32$1
+L__crypto_kem_keypair_derand_jazz$121:
+	leaq	248(%rsp), %rsp
+	movq	12968(%rsp), %rax
+	movq	%rax, 64(%rsp)
+	movq	13000(%rsp), %rax
+	movq	%rax, 32(%rsp)
+	movq	12976(%rsp), %rax
+	movq	%rax, 72(%rsp)
+	movq	13008(%rsp), %rax
+	movq	%rax, 40(%rsp)
+	movq	12984(%rsp), %rax
+	movq	%rax, 80(%rsp)
+	movq	13016(%rsp), %rax
+	movq	%rax, 48(%rsp)
+	movq	12992(%rsp), %rax
+	movq	%rax, 88(%rsp)
+	movq	13024(%rsp), %rax
+	movq	%rax, 56(%rsp)
+	vmovdqu	64(%rsp), %ymm0
+	vmovdqu	%ymm0, 352(%rsp)
+	vmovdqu	%ymm0, 864(%rsp)
+	vmovdqu	%ymm0, 1376(%rsp)
+	vmovdqu	%ymm0, 1888(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	movb	$0, 384(%rsp)
+	movb	$0, 385(%rsp)
+	movb	$1, 896(%rsp)
+	movb	$0, 897(%rsp)
+	movb	$2, 1408(%rsp)
+	movb	$0, 1409(%rsp)
+	movb	$0, 1920(%rsp)
+	movb	$1, 1921(%rsp)
+	leaq	2912(%rsp), %rax
+	leaq	352(%rsp), %rcx
+	leaq	864(%rsp), %rdx
+	leaq	1376(%rsp), %rsi
+	leaq	1888(%rsp), %rdi
+	call	L_shake128_absorb4x_34$1
+L__crypto_kem_keypair_derand_jazz$120:
+	leaq	2912(%rsp), %rax
+	leaq	352(%rsp), %rdi
+	leaq	864(%rsp), %r8
+	leaq	1376(%rsp), %r9
+	leaq	1888(%rsp), %r10
+	movq	%rdi, %r11
+	movq	%r8, %rbx
+	movq	%r9, %rbp
+	movq	%r10, %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_keypair_derand_jazz$119:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	168(%rdi), %r11
+	leaq	168(%r8), %rbx
+	leaq	168(%r9), %rbp
+	leaq	168(%r10), %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_keypair_derand_jazz$118:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	336(%rdi), %rdi
+	leaq	336(%r8), %r8
+	leaq	336(%r9), %r9
+	leaq	336(%r10), %r10
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_keypair_derand_jazz$117:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%rdi)
+	vmovhpd	%xmm1, (%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r9)
+	vmovhpd	%xmm0, (%r10)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%rdi)
+	vmovhpd	%xmm1, 8(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r9)
+	vmovhpd	%xmm0, 8(%r10)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%rdi)
+	vmovhpd	%xmm1, 16(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r9)
+	vmovhpd	%xmm0, 16(%r10)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%rdi)
+	vmovhpd	%xmm1, 24(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r9)
+	vmovhpd	%xmm0, 24(%r10)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%rdi)
+	vmovhpd	%xmm1, 32(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r9)
+	vmovhpd	%xmm0, 32(%r10)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%rdi)
+	vmovhpd	%xmm1, 40(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r9)
+	vmovhpd	%xmm0, 40(%r10)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%rdi)
+	vmovhpd	%xmm1, 48(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r9)
+	vmovhpd	%xmm0, 48(%r10)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%rdi)
+	vmovhpd	%xmm1, 56(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r9)
+	vmovhpd	%xmm0, 56(%r10)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%rdi)
+	vmovhpd	%xmm1, 64(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r9)
+	vmovhpd	%xmm0, 64(%r10)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%rdi)
+	vmovhpd	%xmm1, 72(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r9)
+	vmovhpd	%xmm0, 72(%r10)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%rdi)
+	vmovhpd	%xmm1, 80(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r9)
+	vmovhpd	%xmm0, 80(%r10)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%rdi)
+	vmovhpd	%xmm1, 88(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r9)
+	vmovhpd	%xmm0, 88(%r10)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%rdi)
+	vmovhpd	%xmm1, 96(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r9)
+	vmovhpd	%xmm0, 96(%r10)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%rdi)
+	vmovhpd	%xmm1, 104(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r9)
+	vmovhpd	%xmm0, 104(%r10)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%rdi)
+	vmovhpd	%xmm1, 112(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r9)
+	vmovhpd	%xmm0, 112(%r10)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%rdi)
+	vmovhpd	%xmm1, 120(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r9)
+	vmovhpd	%xmm0, 120(%r10)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%rdi)
+	vmovhpd	%xmm1, 128(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r9)
+	vmovhpd	%xmm0, 128(%r10)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%rdi)
+	vmovhpd	%xmm1, 136(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%r9)
+	vmovhpd	%xmm0, 136(%r10)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%rdi)
+	vmovhpd	%xmm1, 144(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%r9)
+	vmovhpd	%xmm0, 144(%r10)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%rdi)
+	vmovhpd	%xmm1, 152(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%r9)
+	vmovhpd	%xmm0, 152(%r10)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%rdi)
+	vmovhpd	%xmm1, 160(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%r9)
+	vmovhpd	%xmm0, 160(%r10)
+	leaq	8320(%rsp), %r11
+	leaq	352(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$116:
+	movq	%r12, %r9
+	leaq	8832(%rsp), %r11
+	leaq	864(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$115:
+	movq	%r12, %rdi
+	leaq	9344(%rsp), %r11
+	leaq	1376(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$114:
+	movq	%r12, %r8
+	leaq	9856(%rsp), %r11
+	leaq	1888(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$113:
+	cmpq	$255, %r9
+	setbe	%al
+	cmpq	$255, %rdi
+	setbe	%cl
+	orb 	%cl, %al
+	cmpq	$255, %r8
+	setbe	%cl
+	cmpq	$255, %r12
+	setbe	%dl
+	orb 	%dl, %cl
+	orb 	%al, %cl
+	jmp 	L__crypto_kem_keypair_derand_jazz$90
+L__crypto_kem_keypair_derand_jazz$91:
+	leaq	2912(%rsp), %rax
+	leaq	352(%rsp), %r10
+	leaq	864(%rsp), %r11
+	leaq	1376(%rsp), %rbx
+	leaq	1888(%rsp), %rbp
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_keypair_derand_jazz$112:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r10)
+	vmovhpd	%xmm1, (%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbx)
+	vmovhpd	%xmm0, (%rbp)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r10)
+	vmovhpd	%xmm1, 8(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbx)
+	vmovhpd	%xmm0, 8(%rbp)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r10)
+	vmovhpd	%xmm1, 16(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbx)
+	vmovhpd	%xmm0, 16(%rbp)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r10)
+	vmovhpd	%xmm1, 24(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbx)
+	vmovhpd	%xmm0, 24(%rbp)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r10)
+	vmovhpd	%xmm1, 32(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbx)
+	vmovhpd	%xmm0, 32(%rbp)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r10)
+	vmovhpd	%xmm1, 40(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbx)
+	vmovhpd	%xmm0, 40(%rbp)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r10)
+	vmovhpd	%xmm1, 48(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbx)
+	vmovhpd	%xmm0, 48(%rbp)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r10)
+	vmovhpd	%xmm1, 56(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbx)
+	vmovhpd	%xmm0, 56(%rbp)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r10)
+	vmovhpd	%xmm1, 64(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbx)
+	vmovhpd	%xmm0, 64(%rbp)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r10)
+	vmovhpd	%xmm1, 72(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbx)
+	vmovhpd	%xmm0, 72(%rbp)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r10)
+	vmovhpd	%xmm1, 80(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbx)
+	vmovhpd	%xmm0, 80(%rbp)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r10)
+	vmovhpd	%xmm1, 88(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbx)
+	vmovhpd	%xmm0, 88(%rbp)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r10)
+	vmovhpd	%xmm1, 96(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbx)
+	vmovhpd	%xmm0, 96(%rbp)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r10)
+	vmovhpd	%xmm1, 104(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbx)
+	vmovhpd	%xmm0, 104(%rbp)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r10)
+	vmovhpd	%xmm1, 112(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbx)
+	vmovhpd	%xmm0, 112(%rbp)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r10)
+	vmovhpd	%xmm1, 120(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbx)
+	vmovhpd	%xmm0, 120(%rbp)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r10)
+	vmovhpd	%xmm1, 128(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbx)
+	vmovhpd	%xmm0, 128(%rbp)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r10)
+	vmovhpd	%xmm1, 136(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbx)
+	vmovhpd	%xmm0, 136(%rbp)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r10)
+	vmovhpd	%xmm1, 144(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbx)
+	vmovhpd	%xmm0, 144(%rbp)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r10)
+	vmovhpd	%xmm1, 152(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbx)
+	vmovhpd	%xmm0, 152(%rbp)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r10)
+	vmovhpd	%xmm1, 160(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbx)
+	vmovhpd	%xmm0, 160(%rbp)
+	leaq	8320(%rsp), %rax
+	leaq	352(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r9
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_keypair_derand_jazz$107
+L__crypto_kem_keypair_derand_jazz$108:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_keypair_derand_jazz$111
+	movw	%si, (%rax,%r9,2)
+	incq	%r9
+L__crypto_kem_keypair_derand_jazz$111:
+	cmpq	$256, %r9
+	jnb 	L__crypto_kem_keypair_derand_jazz$109
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_keypair_derand_jazz$109
+	movw	%r11w, (%rax,%r9,2)
+	incq	%r9
+L__crypto_kem_keypair_derand_jazz$110:
+L__crypto_kem_keypair_derand_jazz$109:
+	cmpq	$255, %r9
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_keypair_derand_jazz$107:
+	jne 	L__crypto_kem_keypair_derand_jazz$108
+	leaq	8832(%rsp), %rax
+	leaq	864(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %rdi
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_keypair_derand_jazz$102
+L__crypto_kem_keypair_derand_jazz$103:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_keypair_derand_jazz$106
+	movw	%si, (%rax,%rdi,2)
+	incq	%rdi
+L__crypto_kem_keypair_derand_jazz$106:
+	cmpq	$256, %rdi
+	jnb 	L__crypto_kem_keypair_derand_jazz$104
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_keypair_derand_jazz$104
+	movw	%r11w, (%rax,%rdi,2)
+	incq	%rdi
+L__crypto_kem_keypair_derand_jazz$105:
+L__crypto_kem_keypair_derand_jazz$104:
+	cmpq	$255, %rdi
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_keypair_derand_jazz$102:
+	jne 	L__crypto_kem_keypair_derand_jazz$103
+	leaq	9344(%rsp), %rax
+	leaq	1376(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r8
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_keypair_derand_jazz$97
+L__crypto_kem_keypair_derand_jazz$98:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_keypair_derand_jazz$101
+	movw	%si, (%rax,%r8,2)
+	incq	%r8
+L__crypto_kem_keypair_derand_jazz$101:
+	cmpq	$256, %r8
+	jnb 	L__crypto_kem_keypair_derand_jazz$99
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_keypair_derand_jazz$99
+	movw	%r11w, (%rax,%r8,2)
+	incq	%r8
+L__crypto_kem_keypair_derand_jazz$100:
+L__crypto_kem_keypair_derand_jazz$99:
+	cmpq	$255, %r8
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_keypair_derand_jazz$97:
+	jne 	L__crypto_kem_keypair_derand_jazz$98
+	leaq	9856(%rsp), %rax
+	leaq	1888(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_keypair_derand_jazz$92
+L__crypto_kem_keypair_derand_jazz$93:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_keypair_derand_jazz$96
+	movw	%si, (%rax,%r12,2)
+	incq	%r12
+L__crypto_kem_keypair_derand_jazz$96:
+	cmpq	$256, %r12
+	jnb 	L__crypto_kem_keypair_derand_jazz$94
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_keypair_derand_jazz$94
+	movw	%r11w, (%rax,%r12,2)
+	incq	%r12
+L__crypto_kem_keypair_derand_jazz$95:
+L__crypto_kem_keypair_derand_jazz$94:
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_keypair_derand_jazz$92:
+	jne 	L__crypto_kem_keypair_derand_jazz$93
+	cmpq	$255, %r9
+	setbe	%al
+	cmpq	$255, %rdi
+	setbe	%cl
+	orb 	%cl, %al
+	cmpq	$255, %r8
+	setbe	%cl
+	cmpq	$255, %r12
+	setbe	%dl
+	orb 	%dl, %cl
+	orb 	%al, %cl
+L__crypto_kem_keypair_derand_jazz$90:
+	jne 	L__crypto_kem_keypair_derand_jazz$91
+	vmovdqu	96(%rsp), %ymm0
+	vmovdqu	%ymm0, 352(%rsp)
+	vmovdqu	%ymm0, 864(%rsp)
+	vmovdqu	%ymm0, 1376(%rsp)
+	vmovdqu	%ymm0, 1888(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	movb	$1, 384(%rsp)
+	movb	$1, 385(%rsp)
+	movb	$2, 896(%rsp)
+	movb	$1, 897(%rsp)
+	movb	$0, 1408(%rsp)
+	movb	$2, 1409(%rsp)
+	movb	$1, 1920(%rsp)
+	movb	$2, 1921(%rsp)
+	leaq	2912(%rsp), %rax
+	leaq	352(%rsp), %rcx
+	leaq	864(%rsp), %rdx
+	leaq	1376(%rsp), %rsi
+	leaq	1888(%rsp), %rdi
+	call	L_shake128_absorb4x_34$1
+L__crypto_kem_keypair_derand_jazz$89:
+	leaq	2912(%rsp), %rax
+	leaq	352(%rsp), %rdi
+	leaq	864(%rsp), %r8
+	leaq	1376(%rsp), %r9
+	leaq	1888(%rsp), %r10
+	movq	%rdi, %r11
+	movq	%r8, %rbx
+	movq	%r9, %rbp
+	movq	%r10, %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_keypair_derand_jazz$88:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	168(%rdi), %r11
+	leaq	168(%r8), %rbx
+	leaq	168(%r9), %rbp
+	leaq	168(%r10), %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_keypair_derand_jazz$87:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r11)
+	vmovhpd	%xmm1, (%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbp)
+	vmovhpd	%xmm0, (%r12)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r11)
+	vmovhpd	%xmm1, 8(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbp)
+	vmovhpd	%xmm0, 8(%r12)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r11)
+	vmovhpd	%xmm1, 16(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbp)
+	vmovhpd	%xmm0, 16(%r12)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r11)
+	vmovhpd	%xmm1, 24(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbp)
+	vmovhpd	%xmm0, 24(%r12)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r11)
+	vmovhpd	%xmm1, 32(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbp)
+	vmovhpd	%xmm0, 32(%r12)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r11)
+	vmovhpd	%xmm1, 40(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbp)
+	vmovhpd	%xmm0, 40(%r12)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r11)
+	vmovhpd	%xmm1, 48(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbp)
+	vmovhpd	%xmm0, 48(%r12)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r11)
+	vmovhpd	%xmm1, 56(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbp)
+	vmovhpd	%xmm0, 56(%r12)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r11)
+	vmovhpd	%xmm1, 64(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbp)
+	vmovhpd	%xmm0, 64(%r12)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r11)
+	vmovhpd	%xmm1, 72(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbp)
+	vmovhpd	%xmm0, 72(%r12)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r11)
+	vmovhpd	%xmm1, 80(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbp)
+	vmovhpd	%xmm0, 80(%r12)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r11)
+	vmovhpd	%xmm1, 88(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbp)
+	vmovhpd	%xmm0, 88(%r12)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r11)
+	vmovhpd	%xmm1, 96(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbp)
+	vmovhpd	%xmm0, 96(%r12)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r11)
+	vmovhpd	%xmm1, 104(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbp)
+	vmovhpd	%xmm0, 104(%r12)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r11)
+	vmovhpd	%xmm1, 112(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbp)
+	vmovhpd	%xmm0, 112(%r12)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r11)
+	vmovhpd	%xmm1, 120(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbp)
+	vmovhpd	%xmm0, 120(%r12)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r11)
+	vmovhpd	%xmm1, 128(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbp)
+	vmovhpd	%xmm0, 128(%r12)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r11)
+	vmovhpd	%xmm1, 136(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbp)
+	vmovhpd	%xmm0, 136(%r12)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r11)
+	vmovhpd	%xmm1, 144(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbp)
+	vmovhpd	%xmm0, 144(%r12)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r11)
+	vmovhpd	%xmm1, 152(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbp)
+	vmovhpd	%xmm0, 152(%r12)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r11)
+	vmovhpd	%xmm1, 160(%rbx)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbp)
+	vmovhpd	%xmm0, 160(%r12)
+	leaq	336(%rdi), %rdi
+	leaq	336(%r8), %r8
+	leaq	336(%r9), %r9
+	leaq	336(%r10), %r10
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_keypair_derand_jazz$86:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%rdi)
+	vmovhpd	%xmm1, (%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r9)
+	vmovhpd	%xmm0, (%r10)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%rdi)
+	vmovhpd	%xmm1, 8(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r9)
+	vmovhpd	%xmm0, 8(%r10)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%rdi)
+	vmovhpd	%xmm1, 16(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r9)
+	vmovhpd	%xmm0, 16(%r10)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%rdi)
+	vmovhpd	%xmm1, 24(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r9)
+	vmovhpd	%xmm0, 24(%r10)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%rdi)
+	vmovhpd	%xmm1, 32(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r9)
+	vmovhpd	%xmm0, 32(%r10)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%rdi)
+	vmovhpd	%xmm1, 40(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r9)
+	vmovhpd	%xmm0, 40(%r10)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%rdi)
+	vmovhpd	%xmm1, 48(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r9)
+	vmovhpd	%xmm0, 48(%r10)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%rdi)
+	vmovhpd	%xmm1, 56(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r9)
+	vmovhpd	%xmm0, 56(%r10)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%rdi)
+	vmovhpd	%xmm1, 64(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r9)
+	vmovhpd	%xmm0, 64(%r10)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%rdi)
+	vmovhpd	%xmm1, 72(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r9)
+	vmovhpd	%xmm0, 72(%r10)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%rdi)
+	vmovhpd	%xmm1, 80(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r9)
+	vmovhpd	%xmm0, 80(%r10)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%rdi)
+	vmovhpd	%xmm1, 88(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r9)
+	vmovhpd	%xmm0, 88(%r10)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%rdi)
+	vmovhpd	%xmm1, 96(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r9)
+	vmovhpd	%xmm0, 96(%r10)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%rdi)
+	vmovhpd	%xmm1, 104(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r9)
+	vmovhpd	%xmm0, 104(%r10)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%rdi)
+	vmovhpd	%xmm1, 112(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r9)
+	vmovhpd	%xmm0, 112(%r10)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%rdi)
+	vmovhpd	%xmm1, 120(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r9)
+	vmovhpd	%xmm0, 120(%r10)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%rdi)
+	vmovhpd	%xmm1, 128(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r9)
+	vmovhpd	%xmm0, 128(%r10)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%rdi)
+	vmovhpd	%xmm1, 136(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%r9)
+	vmovhpd	%xmm0, 136(%r10)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%rdi)
+	vmovhpd	%xmm1, 144(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%r9)
+	vmovhpd	%xmm0, 144(%r10)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%rdi)
+	vmovhpd	%xmm1, 152(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%r9)
+	vmovhpd	%xmm0, 152(%r10)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%rdi)
+	vmovhpd	%xmm1, 160(%r8)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%r9)
+	vmovhpd	%xmm0, 160(%r10)
+	leaq	10368(%rsp), %r11
+	leaq	352(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$85:
+	movq	%r12, %rdi
+	leaq	10880(%rsp), %r11
+	leaq	864(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$84:
+	movq	%r12, %r9
+	leaq	11392(%rsp), %r11
+	leaq	1376(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$83:
+	movq	%r12, %r8
+	leaq	11904(%rsp), %r11
+	leaq	1888(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$82:
+	cmpq	$255, %rdi
+	setbe	%al
+	cmpq	$255, %r9
+	setbe	%cl
+	orb 	%cl, %al
+	cmpq	$255, %r8
+	setbe	%cl
+	cmpq	$255, %r12
+	setbe	%dl
+	orb 	%dl, %cl
+	orb 	%al, %cl
+	jmp 	L__crypto_kem_keypair_derand_jazz$59
+L__crypto_kem_keypair_derand_jazz$60:
+	leaq	2912(%rsp), %rax
+	leaq	352(%rsp), %r10
+	leaq	864(%rsp), %r11
+	leaq	1376(%rsp), %rbx
+	leaq	1888(%rsp), %rbp
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L__crypto_kem_keypair_derand_jazz$81:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%r10)
+	vmovhpd	%xmm1, (%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%rbx)
+	vmovhpd	%xmm0, (%rbp)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%r10)
+	vmovhpd	%xmm1, 8(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%rbx)
+	vmovhpd	%xmm0, 8(%rbp)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%r10)
+	vmovhpd	%xmm1, 16(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%rbx)
+	vmovhpd	%xmm0, 16(%rbp)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%r10)
+	vmovhpd	%xmm1, 24(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%rbx)
+	vmovhpd	%xmm0, 24(%rbp)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%r10)
+	vmovhpd	%xmm1, 32(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%rbx)
+	vmovhpd	%xmm0, 32(%rbp)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%r10)
+	vmovhpd	%xmm1, 40(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%rbx)
+	vmovhpd	%xmm0, 40(%rbp)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%r10)
+	vmovhpd	%xmm1, 48(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%rbx)
+	vmovhpd	%xmm0, 48(%rbp)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%r10)
+	vmovhpd	%xmm1, 56(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%rbx)
+	vmovhpd	%xmm0, 56(%rbp)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%r10)
+	vmovhpd	%xmm1, 64(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%rbx)
+	vmovhpd	%xmm0, 64(%rbp)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%r10)
+	vmovhpd	%xmm1, 72(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%rbx)
+	vmovhpd	%xmm0, 72(%rbp)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%r10)
+	vmovhpd	%xmm1, 80(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%rbx)
+	vmovhpd	%xmm0, 80(%rbp)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%r10)
+	vmovhpd	%xmm1, 88(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%rbx)
+	vmovhpd	%xmm0, 88(%rbp)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%r10)
+	vmovhpd	%xmm1, 96(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%rbx)
+	vmovhpd	%xmm0, 96(%rbp)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%r10)
+	vmovhpd	%xmm1, 104(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%rbx)
+	vmovhpd	%xmm0, 104(%rbp)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%r10)
+	vmovhpd	%xmm1, 112(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%rbx)
+	vmovhpd	%xmm0, 112(%rbp)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%r10)
+	vmovhpd	%xmm1, 120(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%rbx)
+	vmovhpd	%xmm0, 120(%rbp)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%r10)
+	vmovhpd	%xmm1, 128(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%rbx)
+	vmovhpd	%xmm0, 128(%rbp)
+	vmovdqu	544(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 136(%r10)
+	vmovhpd	%xmm1, 136(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 136(%rbx)
+	vmovhpd	%xmm0, 136(%rbp)
+	vmovdqu	576(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 144(%r10)
+	vmovhpd	%xmm1, 144(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 144(%rbx)
+	vmovhpd	%xmm0, 144(%rbp)
+	vmovdqu	608(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 152(%r10)
+	vmovhpd	%xmm1, 152(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 152(%rbx)
+	vmovhpd	%xmm0, 152(%rbp)
+	vmovdqu	640(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 160(%r10)
+	vmovhpd	%xmm1, 160(%r11)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 160(%rbx)
+	vmovhpd	%xmm0, 160(%rbp)
+	leaq	10368(%rsp), %rax
+	leaq	352(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %rdi
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_keypair_derand_jazz$76
+L__crypto_kem_keypair_derand_jazz$77:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_keypair_derand_jazz$80
+	movw	%si, (%rax,%rdi,2)
+	incq	%rdi
+L__crypto_kem_keypair_derand_jazz$80:
+	cmpq	$256, %rdi
+	jnb 	L__crypto_kem_keypair_derand_jazz$78
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_keypair_derand_jazz$78
+	movw	%r11w, (%rax,%rdi,2)
+	incq	%rdi
+L__crypto_kem_keypair_derand_jazz$79:
+L__crypto_kem_keypair_derand_jazz$78:
+	cmpq	$255, %rdi
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_keypair_derand_jazz$76:
+	jne 	L__crypto_kem_keypair_derand_jazz$77
+	leaq	10880(%rsp), %rax
+	leaq	864(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r9
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_keypair_derand_jazz$71
+L__crypto_kem_keypair_derand_jazz$72:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_keypair_derand_jazz$75
+	movw	%si, (%rax,%r9,2)
+	incq	%r9
+L__crypto_kem_keypair_derand_jazz$75:
+	cmpq	$256, %r9
+	jnb 	L__crypto_kem_keypair_derand_jazz$73
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_keypair_derand_jazz$73
+	movw	%r11w, (%rax,%r9,2)
+	incq	%r9
+L__crypto_kem_keypair_derand_jazz$74:
+L__crypto_kem_keypair_derand_jazz$73:
+	cmpq	$255, %r9
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_keypair_derand_jazz$71:
+	jne 	L__crypto_kem_keypair_derand_jazz$72
+	leaq	11392(%rsp), %rax
+	leaq	1376(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r8
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_keypair_derand_jazz$66
+L__crypto_kem_keypair_derand_jazz$67:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_keypair_derand_jazz$70
+	movw	%si, (%rax,%r8,2)
+	incq	%r8
+L__crypto_kem_keypair_derand_jazz$70:
+	cmpq	$256, %r8
+	jnb 	L__crypto_kem_keypair_derand_jazz$68
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_keypair_derand_jazz$68
+	movw	%r11w, (%rax,%r8,2)
+	incq	%r8
+L__crypto_kem_keypair_derand_jazz$69:
+L__crypto_kem_keypair_derand_jazz$68:
+	cmpq	$255, %r8
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_keypair_derand_jazz$66:
+	jne 	L__crypto_kem_keypair_derand_jazz$67
+	leaq	11904(%rsp), %rax
+	leaq	1888(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+	jmp 	L__crypto_kem_keypair_derand_jazz$61
+L__crypto_kem_keypair_derand_jazz$62:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	movw	%r10w, %r11w
+	shrw	$4, %r11w
+	andw	$15, %r10w
+	shlw	$8, %r10w
+	orw 	%r10w, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %r10w
+	shlw	$4, %r10w
+	orw 	%r10w, %r11w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_keypair_derand_jazz$65
+	movw	%si, (%rax,%r12,2)
+	incq	%r12
+L__crypto_kem_keypair_derand_jazz$65:
+	cmpq	$256, %r12
+	jnb 	L__crypto_kem_keypair_derand_jazz$63
+	cmpw	$3329, %r11w
+	jnb 	L__crypto_kem_keypair_derand_jazz$63
+	movw	%r11w, (%rax,%r12,2)
+	incq	%r12
+L__crypto_kem_keypair_derand_jazz$64:
+L__crypto_kem_keypair_derand_jazz$63:
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%r10b
+	testb	%r10b, %sil
+L__crypto_kem_keypair_derand_jazz$61:
+	jne 	L__crypto_kem_keypair_derand_jazz$62
+	cmpq	$255, %rdi
+	setbe	%al
+	cmpq	$255, %r9
+	setbe	%cl
+	orb 	%cl, %al
+	cmpq	$255, %r8
+	setbe	%cl
+	cmpq	$255, %r12
+	setbe	%dl
+	orb 	%dl, %cl
+	orb 	%al, %cl
+L__crypto_kem_keypair_derand_jazz$59:
+	jne 	L__crypto_kem_keypair_derand_jazz$60
+	vmovdqu	96(%rsp), %ymm0
+	vmovdqu	%ymm0, 352(%rsp)
+	movb	$2, 384(%rsp)
+	movb	$2, 385(%rsp)
+	leaq	352(%rsp), %rax
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vmovdqu	%ymm0, 256(%rsp)
+	vmovdqu	%ymm0, 288(%rsp)
+	vmovdqu	%ymm0, 320(%rsp)
+	vpbroadcastq	(%rax), %ymm5
+	movq	8(%rax), %rcx
+	movq	glob_data + 6208(%rip), %rdx
+	movq	%rcx, 128(%rsp,%rdx,8)
+	movq	16(%rax), %rcx
+	movq	glob_data + 6216(%rip), %rdx
+	movq	%rcx, 128(%rsp,%rdx,8)
+	movq	24(%rax), %rcx
+	movq	glob_data + 6224(%rip), %rdx
+	movq	%rcx, 128(%rsp,%rdx,8)
+	movb	32(%rax), %cl
+	movq	glob_data + 6232(%rip), %rdx
+	shlq	$3, %rdx
+	movb	%cl, 128(%rsp,%rdx)
+	movb	33(%rax), %al
+	incq	%rdx
+	movb	%al, 128(%rsp,%rdx)
+	incq	%rdx
+	movb	$31, 128(%rsp,%rdx)
+	movq	glob_data + 6360(%rip), %rax
+	shlq	$3, %rax
+	movq	$167, %rcx
+	andq	$7, %rcx
+	addq	%rcx, %rax
+	movb	$-128, 128(%rsp,%rax)
+	vmovdqu	160(%rsp), %ymm0
+	vmovdqu	192(%rsp), %ymm1
+	vmovdqu	224(%rsp), %ymm2
+	vmovdqu	256(%rsp), %ymm6
+	vmovdqu	288(%rsp), %ymm3
+	vmovdqu	320(%rsp), %ymm4
+	leaq	352(%rsp), %rax
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+L__crypto_kem_keypair_derand_jazz$58:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm3, %ymm7
+	vpxor	%ymm4, %ymm6, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm5, %ymm5
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%rsi), %ymm6, %ymm7
+	vpsrlvq	96(%rdi), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm6
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm6, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm4, %ymm4
+	vpermq	$-115, %ymm1, %ymm6
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm4, %ymm1
+	vpsrlvq	160(%rdi), %ymm4, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm3, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm3
+	vpblendd	$12, %ymm7, %ymm6, %ymm4
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm3, %ymm3
+	vpblendd	$48, %ymm10, %ymm4, %ymm4
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm3, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm4, %ymm4
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm1, %ymm3
+	vpblendd	$48, %ymm6, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm5, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm5, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm3, %ymm2
+	vpermq	$-115, %ymm4, %ymm3
+	vpermq	$114, %ymm12, %ymm4
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm0, %ymm6
+	vpxor	%ymm13, %ymm5, %ymm5
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rcx,%rdx), %ymm5, %ymm5
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L__crypto_kem_keypair_derand_jazz$58
+	vmovdqu	%ymm5, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm1, 192(%rsp)
+	vmovdqu	%ymm2, 224(%rsp)
+	vmovdqu	%ymm6, 256(%rsp)
+	vmovdqu	%ymm3, 288(%rsp)
+	vmovdqu	%ymm4, 320(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 128(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 136(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 144(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 152(%rax)
+	movq	glob_data + 6360(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 160(%rax)
+	leaq	520(%rsp), %rax
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+L__crypto_kem_keypair_derand_jazz$57:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm3, %ymm7
+	vpxor	%ymm4, %ymm6, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm5, %ymm5
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%rsi), %ymm6, %ymm7
+	vpsrlvq	96(%rdi), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm6
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm6, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm4, %ymm4
+	vpermq	$-115, %ymm1, %ymm6
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm4, %ymm1
+	vpsrlvq	160(%rdi), %ymm4, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm3, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm3
+	vpblendd	$12, %ymm7, %ymm6, %ymm4
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm3, %ymm3
+	vpblendd	$48, %ymm10, %ymm4, %ymm4
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm3, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm4, %ymm4
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm1, %ymm3
+	vpblendd	$48, %ymm6, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm5, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm5, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm3, %ymm2
+	vpermq	$-115, %ymm4, %ymm3
+	vpermq	$114, %ymm12, %ymm4
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm0, %ymm6
+	vpxor	%ymm13, %ymm5, %ymm5
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rcx,%rdx), %ymm5, %ymm5
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L__crypto_kem_keypair_derand_jazz$57
+	vmovdqu	%ymm5, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm1, 192(%rsp)
+	vmovdqu	%ymm2, 224(%rsp)
+	vmovdqu	%ymm6, 256(%rsp)
+	vmovdqu	%ymm3, 288(%rsp)
+	vmovdqu	%ymm4, 320(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 128(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 136(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 144(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 152(%rax)
+	movq	glob_data + 6360(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 160(%rax)
+	leaq	688(%rsp), %rax
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+L__crypto_kem_keypair_derand_jazz$56:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm3, %ymm7
+	vpxor	%ymm4, %ymm6, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm5, %ymm5
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%rsi), %ymm6, %ymm7
+	vpsrlvq	96(%rdi), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm6
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm6, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm4, %ymm4
+	vpermq	$-115, %ymm1, %ymm6
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm4, %ymm1
+	vpsrlvq	160(%rdi), %ymm4, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm3, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm3
+	vpblendd	$12, %ymm7, %ymm6, %ymm4
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm3, %ymm3
+	vpblendd	$48, %ymm10, %ymm4, %ymm4
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm3, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm4, %ymm4
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm1, %ymm3
+	vpblendd	$48, %ymm6, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm5, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm5, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm3, %ymm2
+	vpermq	$-115, %ymm4, %ymm3
+	vpermq	$114, %ymm12, %ymm4
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm0, %ymm6
+	vpxor	%ymm13, %ymm5, %ymm5
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rcx,%rdx), %ymm5, %ymm5
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L__crypto_kem_keypair_derand_jazz$56
+	vmovdqu	%ymm5, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm1, 192(%rsp)
+	vmovdqu	%ymm2, 224(%rsp)
+	vmovdqu	%ymm6, 256(%rsp)
+	vmovdqu	%ymm3, 288(%rsp)
+	vmovdqu	%ymm4, 320(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 128(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 136(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 144(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 152(%rax)
+	movq	glob_data + 6360(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 160(%rax)
+	vmovdqu	%ymm5, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm1, 192(%rsp)
+	vmovdqu	%ymm2, 224(%rsp)
+	vmovdqu	%ymm6, 256(%rsp)
+	vmovdqu	%ymm3, 288(%rsp)
+	vmovdqu	%ymm4, 320(%rsp)
+	leaq	12416(%rsp), %r11
+	leaq	352(%rsp), %rbx
+	call	L_rej_uniform_avx$1
+L__crypto_kem_keypair_derand_jazz$55:
+	cmpq	$255, %r12
+	setbe	%al
+	vmovdqu	128(%rsp), %ymm6
+	vmovdqu	160(%rsp), %ymm0
+	vmovdqu	192(%rsp), %ymm1
+	vmovdqu	224(%rsp), %ymm2
+	vmovdqu	256(%rsp), %ymm3
+	vmovdqu	288(%rsp), %ymm4
+	vmovdqu	320(%rsp), %ymm5
+	jmp 	L__crypto_kem_keypair_derand_jazz$47
+L__crypto_kem_keypair_derand_jazz$48:
+	leaq	352(%rsp), %rax
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+L__crypto_kem_keypair_derand_jazz$54:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm4, %ymm7
+	vpxor	%ymm5, %ymm3, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm6, %ymm6
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	96(%rsi), %ymm3, %ymm7
+	vpsrlvq	96(%rdi), %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm10
+	vpxor	%ymm9, %ymm4, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm4
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm4
+	vpxor	%ymm9, %ymm5, %ymm5
+	vpermq	$-115, %ymm1, %ymm3
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm5, %ymm1
+	vpsrlvq	160(%rdi), %ymm5, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm4, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm4
+	vpblendd	$12, %ymm7, %ymm3, %ymm5
+	vpblendd	$12, %ymm3, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm4, %ymm4
+	vpblendd	$48, %ymm10, %ymm5, %ymm5
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm4, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm5, %ymm5
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm3, %ymm12
+	vpxor	%ymm3, %ymm1, %ymm4
+	vpblendd	$48, %ymm3, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm6, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm3, %ymm13, %ymm13
+	vpblendd	$-64, %ymm3, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm4, %ymm2
+	vpermq	$-115, %ymm5, %ymm4
+	vpermq	$114, %ymm12, %ymm5
+	vpblendd	$12, %ymm3, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm3, %ymm9, %ymm3
+	vpandn	%ymm3, %ymm0, %ymm3
+	vpxor	%ymm13, %ymm6, %ymm6
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm3, %ymm3
+	vpxor	(%rcx,%rdx), %ymm6, %ymm6
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L__crypto_kem_keypair_derand_jazz$54
+	vmovdqu	%ymm6, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm1, 192(%rsp)
+	vmovdqu	%ymm2, 224(%rsp)
+	vmovdqu	%ymm3, 256(%rsp)
+	vmovdqu	%ymm4, 288(%rsp)
+	vmovdqu	%ymm5, 320(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	movq	glob_data + 6264(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 64(%rax)
+	movq	glob_data + 6272(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 72(%rax)
+	movq	glob_data + 6280(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 80(%rax)
+	movq	glob_data + 6288(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 88(%rax)
+	movq	glob_data + 6296(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 96(%rax)
+	movq	glob_data + 6304(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 104(%rax)
+	movq	glob_data + 6312(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 112(%rax)
+	movq	glob_data + 6320(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 120(%rax)
+	movq	glob_data + 6328(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 128(%rax)
+	movq	glob_data + 6336(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 136(%rax)
+	movq	glob_data + 6344(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 144(%rax)
+	movq	glob_data + 6352(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 152(%rax)
+	movq	glob_data + 6360(%rip), %rcx
+	movq	128(%rsp,%rcx,8), %rcx
+	movq	%rcx, 160(%rax)
+	leaq	12416(%rsp), %rax
+	leaq	352(%rsp), %rcx
+	movq	$0, %rdx
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%dil
+	testb	%dil, %sil
+	jmp 	L__crypto_kem_keypair_derand_jazz$49
+L__crypto_kem_keypair_derand_jazz$50:
+	movzbw	(%rcx,%rdx), %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	(%rcx,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L__crypto_kem_keypair_derand_jazz$53
+	movw	%si, (%rax,%r12,2)
+	incq	%r12
+L__crypto_kem_keypair_derand_jazz$53:
+	cmpq	$256, %r12
+	jnb 	L__crypto_kem_keypair_derand_jazz$51
+	cmpw	$3329, %r8w
+	jnb 	L__crypto_kem_keypair_derand_jazz$51
+	movw	%r8w, (%rax,%r12,2)
+	incq	%r12
+L__crypto_kem_keypair_derand_jazz$52:
+L__crypto_kem_keypair_derand_jazz$51:
+	cmpq	$255, %r12
+	setbe	%sil
+	cmpq	$165, %rdx
+	setbe	%dil
+	testb	%dil, %sil
+L__crypto_kem_keypair_derand_jazz$49:
+	jne 	L__crypto_kem_keypair_derand_jazz$50
+	cmpq	$255, %r12
+	setbe	%al
+L__crypto_kem_keypair_derand_jazz$47:
+	cmpb	$0, %al
+	jne 	L__crypto_kem_keypair_derand_jazz$48
+	leaq	8320(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$46:
+	leaq	8832(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$45:
+	leaq	9344(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$44:
+	leaq	9856(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$43:
+	leaq	10368(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$42:
+	leaq	10880(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$41:
+	leaq	11392(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$40:
+	leaq	11904(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$39:
+	leaq	12416(%rsp), %rax
+	call	L_nttunpack$1
+L__crypto_kem_keypair_derand_jazz$38:
+	movb	$0, %cl
+	leaq	5248(%rsp), %rax
+	leaq	5760(%rsp), %rdi
+	leaq	6272(%rsp), %r8
+	leaq	3712(%rsp), %r9
+	leaq	32(%rsp), %r10
+	leaq	-1496(%rsp), %rsp
+	call	L_poly_getnoise_eta1_4x$1
+L__crypto_kem_keypair_derand_jazz$37:
+	leaq	1496(%rsp), %rsp
+	movb	$4, %cl
+	leaq	4224(%rsp), %rax
+	leaq	4736(%rsp), %rdi
+	leaq	6784(%rsp), %r8
+	leaq	7296(%rsp), %r9
+	leaq	32(%rsp), %r10
+	leaq	-1496(%rsp), %rsp
+	call	L_poly_getnoise_eta1_4x$1
+L__crypto_kem_keypair_derand_jazz$36:
+	leaq	1496(%rsp), %rsp
+	leaq	5248(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$35:
+	leaq	5760(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$34:
+	leaq	6272(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$33:
+	leaq	3712(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$32:
+	leaq	4224(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$31:
+	leaq	4736(%rsp), %rcx
+	call	L_poly_ntt$1
+L__crypto_kem_keypair_derand_jazz$30:
+	leaq	6784(%rsp), %rcx
+	leaq	8320(%rsp), %rsi
+	leaq	5248(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$29:
+	leaq	2400(%rsp), %rcx
+	leaq	8832(%rsp), %rsi
+	leaq	5760(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$28:
+	leaq	6784(%rsp), %rcx
+	leaq	2400(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$27:
+	leaq	2400(%rsp), %rcx
+	leaq	9344(%rsp), %rsi
+	leaq	6272(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$26:
+	leaq	6784(%rsp), %rcx
+	leaq	2400(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$25:
+	leaq	6784(%rsp), %rax
+	call	L_poly_frommont$1
+L__crypto_kem_keypair_derand_jazz$24:
+	leaq	7296(%rsp), %rcx
+	leaq	9856(%rsp), %rsi
+	leaq	5248(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$23:
+	leaq	2400(%rsp), %rcx
+	leaq	10368(%rsp), %rsi
+	leaq	5760(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$22:
+	leaq	7296(%rsp), %rcx
+	leaq	2400(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$21:
+	leaq	2400(%rsp), %rcx
+	leaq	10880(%rsp), %rsi
+	leaq	6272(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$20:
+	leaq	7296(%rsp), %rcx
+	leaq	2400(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$19:
+	leaq	7296(%rsp), %rax
+	call	L_poly_frommont$1
+L__crypto_kem_keypair_derand_jazz$18:
+	leaq	7808(%rsp), %rcx
+	leaq	11392(%rsp), %rsi
+	leaq	5248(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$17:
+	leaq	2400(%rsp), %rcx
+	leaq	11904(%rsp), %rsi
+	leaq	5760(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$16:
+	leaq	7808(%rsp), %rcx
+	leaq	2400(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$15:
+	leaq	2400(%rsp), %rcx
+	leaq	12416(%rsp), %rsi
+	leaq	6272(%rsp), %rdi
+	call	L_poly_basemul$1
+L__crypto_kem_keypair_derand_jazz$14:
+	leaq	7808(%rsp), %rcx
+	leaq	2400(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$13:
+	leaq	7808(%rsp), %rax
+	call	L_poly_frommont$1
+L__crypto_kem_keypair_derand_jazz$12:
+	leaq	6784(%rsp), %rcx
+	leaq	3712(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$11:
+	leaq	7296(%rsp), %rcx
+	leaq	4224(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$10:
+	leaq	7808(%rsp), %rcx
+	leaq	4736(%rsp), %rsi
+	call	L_poly_add2$1
+L__crypto_kem_keypair_derand_jazz$9:
+	leaq	6784(%rsp), %rax
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	7296(%rsp), %rax
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	7808(%rsp), %rax
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vmovdqu	32(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vmovdqu	64(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vmovdqu	96(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vmovdqu	128(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	160(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 160(%rax)
+	vmovdqu	192(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 192(%rax)
+	vmovdqu	224(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 256(%rax)
+	vmovdqu	288(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	320(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 320(%rax)
+	vmovdqu	352(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 352(%rax)
+	vmovdqu	384(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 384(%rax)
+	vmovdqu	416(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 416(%rax)
+	vmovdqu	448(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	480(%rax), %ymm2
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	movq	12952(%rsp), %rax
+	movq	12960(%rsp), %rcx
+	leaq	5248(%rsp), %rdx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$8:
+	addq	$384, %rcx
+	leaq	5760(%rsp), %rdx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$7:
+	addq	$384, %rcx
+	leaq	6272(%rsp), %rdx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$6:
+	movq	%rax, %rcx
+	leaq	6784(%rsp), %rdx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$5:
+	addq	$384, %rcx
+	leaq	7296(%rsp), %rdx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$4:
+	addq	$384, %rcx
+	leaq	7808(%rsp), %rdx
+	call	L_poly_tobytes$1
+L__crypto_kem_keypair_derand_jazz$3:
+	addq	$1152, %rax
+	movq	64(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	72(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	80(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	88(%rsp), %rcx
+	movq	%rcx, (%rax)
+	movq	12944(%rsp), %rax
+	addq	$1152, %rax
+	movq	12936(%rsp), %rcx
+	movq	(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	8(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	16(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	24(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	32(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	40(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	48(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	56(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	64(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	72(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	80(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	88(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	96(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	104(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	112(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	120(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	128(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	136(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	144(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	152(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	160(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	168(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	176(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	184(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	192(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	200(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	208(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	216(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	224(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	232(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	240(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	248(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	256(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	264(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	272(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	280(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	288(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	296(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	304(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	312(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	320(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	328(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	336(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	344(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	352(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	360(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	368(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	376(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	384(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	392(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	400(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	408(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	416(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	424(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	432(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	440(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	448(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	456(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	464(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	472(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	480(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	488(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	496(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	504(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	512(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	520(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	528(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	536(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	544(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	552(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	560(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	568(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	576(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	584(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	592(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	600(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	608(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	616(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	624(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	632(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	640(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	648(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	656(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	664(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	672(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	680(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	688(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	696(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	704(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	712(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	720(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	728(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	736(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	744(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	752(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	760(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	768(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	776(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	784(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	792(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	800(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	808(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	816(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	824(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	832(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	840(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	848(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	856(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	864(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	872(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	880(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	888(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	896(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	904(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	912(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	920(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	928(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	936(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	944(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	952(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	960(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	968(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	976(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	984(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	992(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1000(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1008(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1016(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1024(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1032(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1040(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1048(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1056(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1064(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1072(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1080(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1088(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1096(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1104(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1112(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1120(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1128(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1136(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1144(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1152(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1160(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1168(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1176(%rcx), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	%rax, 12944(%rsp)
+	movq	12936(%rsp), %r8
+	movq	$1184, %rdi
+	leaq	64(%rsp), %rax
+	leaq	-248(%rsp), %rsp
+	call	L_sha3_256$1
+L__crypto_kem_keypair_derand_jazz$2:
+	leaq	248(%rsp), %rsp
+	movq	12944(%rsp), %rax
+	movq	12928(%rsp), %rcx
+	leaq	64(%rsp), %rdx
+	movb	(%rdx), %sil
+	movb	%sil, (%rax)
+	movb	1(%rdx), %sil
+	movb	%sil, 1(%rax)
+	movb	2(%rdx), %sil
+	movb	%sil, 2(%rax)
+	movb	3(%rdx), %sil
+	movb	%sil, 3(%rax)
+	movb	4(%rdx), %sil
+	movb	%sil, 4(%rax)
+	movb	5(%rdx), %sil
+	movb	%sil, 5(%rax)
+	movb	6(%rdx), %sil
+	movb	%sil, 6(%rax)
+	movb	7(%rdx), %sil
+	movb	%sil, 7(%rax)
+	movb	8(%rdx), %sil
+	movb	%sil, 8(%rax)
+	movb	9(%rdx), %sil
+	movb	%sil, 9(%rax)
+	movb	10(%rdx), %sil
+	movb	%sil, 10(%rax)
+	movb	11(%rdx), %sil
+	movb	%sil, 11(%rax)
+	movb	12(%rdx), %sil
+	movb	%sil, 12(%rax)
+	movb	13(%rdx), %sil
+	movb	%sil, 13(%rax)
+	movb	14(%rdx), %sil
+	movb	%sil, 14(%rax)
+	movb	15(%rdx), %sil
+	movb	%sil, 15(%rax)
+	movb	16(%rdx), %sil
+	movb	%sil, 16(%rax)
+	movb	17(%rdx), %sil
+	movb	%sil, 17(%rax)
+	movb	18(%rdx), %sil
+	movb	%sil, 18(%rax)
+	movb	19(%rdx), %sil
+	movb	%sil, 19(%rax)
+	movb	20(%rdx), %sil
+	movb	%sil, 20(%rax)
+	movb	21(%rdx), %sil
+	movb	%sil, 21(%rax)
+	movb	22(%rdx), %sil
+	movb	%sil, 22(%rax)
+	movb	23(%rdx), %sil
+	movb	%sil, 23(%rax)
+	movb	24(%rdx), %sil
+	movb	%sil, 24(%rax)
+	movb	25(%rdx), %sil
+	movb	%sil, 25(%rax)
+	movb	26(%rdx), %sil
+	movb	%sil, 26(%rax)
+	movb	27(%rdx), %sil
+	movb	%sil, 27(%rax)
+	movb	28(%rdx), %sil
+	movb	%sil, 28(%rax)
+	movb	29(%rdx), %sil
+	movb	%sil, 29(%rax)
+	movb	30(%rdx), %sil
+	movb	%sil, 30(%rax)
+	movb	31(%rdx), %dl
+	movb	%dl, 31(%rax)
+	addq	$32, %rax
+	leaq	32(%rcx), %rcx
+	movb	(%rcx), %dl
+	movb	%dl, (%rax)
+	movb	1(%rcx), %dl
+	movb	%dl, 1(%rax)
+	movb	2(%rcx), %dl
+	movb	%dl, 2(%rax)
+	movb	3(%rcx), %dl
+	movb	%dl, 3(%rax)
+	movb	4(%rcx), %dl
+	movb	%dl, 4(%rax)
+	movb	5(%rcx), %dl
+	movb	%dl, 5(%rax)
+	movb	6(%rcx), %dl
+	movb	%dl, 6(%rax)
+	movb	7(%rcx), %dl
+	movb	%dl, 7(%rax)
+	movb	8(%rcx), %dl
+	movb	%dl, 8(%rax)
+	movb	9(%rcx), %dl
+	movb	%dl, 9(%rax)
+	movb	10(%rcx), %dl
+	movb	%dl, 10(%rax)
+	movb	11(%rcx), %dl
+	movb	%dl, 11(%rax)
+	movb	12(%rcx), %dl
+	movb	%dl, 12(%rax)
+	movb	13(%rcx), %dl
+	movb	%dl, 13(%rax)
+	movb	14(%rcx), %dl
+	movb	%dl, 14(%rax)
+	movb	15(%rcx), %dl
+	movb	%dl, 15(%rax)
+	movb	16(%rcx), %dl
+	movb	%dl, 16(%rax)
+	movb	17(%rcx), %dl
+	movb	%dl, 17(%rax)
+	movb	18(%rcx), %dl
+	movb	%dl, 18(%rax)
+	movb	19(%rcx), %dl
+	movb	%dl, 19(%rax)
+	movb	20(%rcx), %dl
+	movb	%dl, 20(%rax)
+	movb	21(%rcx), %dl
+	movb	%dl, 21(%rax)
+	movb	22(%rcx), %dl
+	movb	%dl, 22(%rax)
+	movb	23(%rcx), %dl
+	movb	%dl, 23(%rax)
+	movb	24(%rcx), %dl
+	movb	%dl, 24(%rax)
+	movb	25(%rcx), %dl
+	movb	%dl, 25(%rax)
+	movb	26(%rcx), %dl
+	movb	%dl, 26(%rax)
+	movb	27(%rcx), %dl
+	movb	%dl, 27(%rax)
+	movb	28(%rcx), %dl
+	movb	%dl, 28(%rax)
+	movb	29(%rcx), %dl
+	movb	%dl, 29(%rax)
+	movb	30(%rcx), %dl
+	movb	%dl, 30(%rax)
+	movb	31(%rcx), %cl
+	movb	%cl, 31(%rax)
+	ret
+L_rej_uniform_avx$1:
+	leaq	glob_data + 4128(%rip), %r10
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	movq	$0, %r12
+	movq	$0, %rbp
+	vpbroadcastb	glob_data + 6430(%rip), %ymm1
+	vpbroadcastw	glob_data + 6416(%rip), %ymm2
+	vmovdqu	glob_data + 0(%rip), %ymm3
+	cmpq	$224, %r12
+	setbe	%al
+	cmpq	$448, %rbp
+	setbe	%cl
+	testb	%cl, %al
+	jmp 	L_rej_uniform_avx$9
+L_rej_uniform_avx$10:
+	vpermq	$-108, (%rbx,%rbp), %ymm4
+	vpermq	$-108, 24(%rbx,%rbp), %ymm5
+	vpshufb	%ymm3, %ymm4, %ymm4
+	vpshufb	%ymm3, %ymm5, %ymm5
+	vpsrlw	$4, %ymm4, %ymm6
+	vpsrlw	$4, %ymm5, %ymm7
+	vpblendw	$-86, %ymm6, %ymm4, %ymm4
+	vpblendw	$-86, %ymm7, %ymm5, %ymm5
+	vpand	%ymm2, %ymm4, %ymm4
+	vpand	%ymm2, %ymm5, %ymm5
+	vpcmpgtw	%ymm4, %ymm0, %ymm6
+	vpcmpgtw	%ymm5, %ymm0, %ymm7
+	vpacksswb	%ymm7, %ymm6, %ymm6
+	vpmovmskb	%ymm6, %rax
+	movq	%rax, %rcx
+	andq	$255, %rcx
+	vmovq	(%r10,%rcx,8), %xmm6
+	movq	%rax, %rdx
+	shrq	$16, %rdx
+	andq	$255, %rdx
+	vmovq	(%r10,%rdx,8), %xmm7
+	movq	%rax, %rsi
+	shrq	$8, %rsi
+	andq	$255, %rsi
+	vmovq	(%r10,%rsi,8), %xmm8
+	shrq	$24, %rax
+	andq	$255, %rax
+	vmovq	(%r10,%rax,8), %xmm9
+	vinserti128	$1, %xmm7, %ymm6, %ymm6
+	popcnt	%rcx, %rcx
+	popcnt	%rdx, %rdx
+	addq	%r12, %rcx
+	vinserti128	$1, %xmm9, %ymm8, %ymm7
+	addq	%rcx, %rdx
+	popcnt	%rsi, %rsi
+	addq	%rdx, %rsi
+	popcnt	%rax, %rax
+	addq	%rsi, %rax
+	vpaddb	%ymm1, %ymm6, %ymm8
+	vpunpcklbw	%ymm8, %ymm6, %ymm6
+	vpaddb	%ymm1, %ymm7, %ymm8
+	vpunpcklbw	%ymm8, %ymm7, %ymm7
+	vpshufb	%ymm6, %ymm4, %ymm4
+	vpshufb	%ymm7, %ymm5, %ymm5
+	vmovdqu	%xmm4, (%r11,%r12,2)
+	vextracti128	$1, %ymm4, (%r11,%rcx,2)
+	vmovdqu	%xmm5, (%r11,%rdx,2)
+	vextracti128	$1, %ymm5, (%r11,%rsi,2)
+	movq	%rax, %r12
+	cmpq	$224, %r12
+	setbe	%al
+	addq	$48, %rbp
+	cmpq	$448, %rbp
+	setbe	%cl
+	testb	%cl, %al
+L_rej_uniform_avx$9:
+	jne 	L_rej_uniform_avx$10
+	cmpq	$248, %r12
+	setbe	%al
+	cmpq	$488, %rbp
+	setbe	%cl
+	testb	%cl, %al
+	movq	$21845, %rax
+	jmp 	L_rej_uniform_avx$7
+L_rej_uniform_avx$8:
+	vmovdqu	(%rbx,%rbp), %xmm4
+	vpshufb	%xmm3, %xmm4, %xmm4
+	vpsrlw	$4, %xmm4, %xmm5
+	vpblendw	$-86, %xmm5, %xmm4, %xmm4
+	vpand	%xmm2, %xmm4, %xmm4
+	vpcmpgtw	%xmm4, %xmm0, %xmm5
+	vpmovmskb	%xmm5, %rcx
+	pext	%rax, %rcx, %rcx
+	vmovq	(%r10,%rcx,8), %xmm5
+	popcnt	%rcx, %rcx
+	vpaddb	%xmm1, %xmm5, %xmm6
+	vpunpcklbw	%xmm6, %xmm5, %xmm5
+	vpshufb	%xmm5, %xmm4, %xmm4
+	vmovdqu	%xmm4, (%r11,%r12,2)
+	addq	%rcx, %r12
+	addq	$12, %rbp
+	cmpq	$248, %r12
+	setbe	%cl
+	cmpq	$488, %rbp
+	setbe	%dl
+	testb	%dl, %cl
+L_rej_uniform_avx$7:
+	jne 	L_rej_uniform_avx$8
+	cmpq	$255, %r12
+	setbe	%al
+	cmpq	$501, %rbp
+	setbe	%cl
+	testb	%cl, %al
+	jmp 	L_rej_uniform_avx$2
+L_rej_uniform_avx$3:
+	movzbw	(%rbx,%rbp), %ax
+	incq	%rbp
+	movzbw	(%rbx,%rbp), %dx
+	incq	%rbp
+	movw	%dx, %cx
+	shlw	$8, %dx
+	orw 	%dx, %ax
+	andw	$4095, %ax
+	shrw	$4, %cx
+	movzbw	(%rbx,%rbp), %dx
+	incq	%rbp
+	shlw	$4, %dx
+	orw 	%dx, %cx
+	cmpw	$3329, %ax
+	jnb 	L_rej_uniform_avx$6
+	movw	%ax, (%r11,%r12,2)
+	incq	%r12
+L_rej_uniform_avx$6:
+	cmpw	$3329, %cx
+	jnb 	L_rej_uniform_avx$4
+	cmpq	$256, %r12
+	jnb 	L_rej_uniform_avx$4
+	movw	%cx, (%r11,%r12,2)
+	incq	%r12
+L_rej_uniform_avx$5:
+L_rej_uniform_avx$4:
+	cmpq	$255, %r12
+	setbe	%al
+	cmpq	$501, %rbp
+	setbe	%cl
+	testb	%cl, %al
+L_rej_uniform_avx$2:
+	jne 	L_rej_uniform_avx$3
+	ret
+L_poly_tomsg_1$1:
+	call	L_poly_csubq$1
+L_poly_tomsg_1$2:
+	leaq	glob_data + 224(%rip), %rsi
+	vmovdqu	(%rsi), %ymm0
+	leaq	glob_data + 192(%rip), %rsi
+	vmovdqu	(%rsi), %ymm1
+	vmovdqu	(%rcx), %ymm2
+	vmovdqu	32(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, (%rax)
+	vmovdqu	64(%rcx), %ymm2
+	vmovdqu	96(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, 4(%rax)
+	vmovdqu	128(%rcx), %ymm2
+	vmovdqu	160(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, 8(%rax)
+	vmovdqu	192(%rcx), %ymm2
+	vmovdqu	224(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, 12(%rax)
+	vmovdqu	256(%rcx), %ymm2
+	vmovdqu	288(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, 16(%rax)
+	vmovdqu	320(%rcx), %ymm2
+	vmovdqu	352(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, 20(%rax)
+	vmovdqu	384(%rcx), %ymm2
+	vmovdqu	416(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm3
+	vpsraw	$15, %ymm2, %ymm4
+	vpsraw	$15, %ymm3, %ymm5
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm3, %ymm3
+	vpacksswb	%ymm3, %ymm2, %ymm2
+	vpermq	$-40, %ymm2, %ymm2
+	vpmovmskb	%ymm2, %esi
+	movl	%esi, 24(%rax)
+	vmovdqu	448(%rcx), %ymm2
+	vmovdqu	480(%rcx), %ymm3
+	vpsubw	%ymm2, %ymm0, %ymm2
+	vpsubw	%ymm3, %ymm0, %ymm0
+	vpsraw	$15, %ymm2, %ymm3
+	vpsraw	$15, %ymm0, %ymm4
+	vpxor	%ymm3, %ymm2, %ymm2
+	vpxor	%ymm4, %ymm0, %ymm0
+	vpsubw	%ymm1, %ymm2, %ymm2
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vpacksswb	%ymm0, %ymm2, %ymm0
+	vpermq	$-40, %ymm0, %ymm0
+	vpmovmskb	%ymm0, %ecx
+	movl	%ecx, 28(%rax)
+	ret
+L_poly_tobytes$1:
+	leaq	glob_data + 448(%rip), %rsi
+	vmovdqu	(%rsi), %ymm0
+	vmovdqu	(%rdx), %ymm7
+	vmovdqu	32(%rdx), %ymm8
+	vmovdqu	64(%rdx), %ymm1
+	vmovdqu	96(%rdx), %ymm2
+	vmovdqu	128(%rdx), %ymm3
+	vmovdqu	160(%rdx), %ymm4
+	vmovdqu	192(%rdx), %ymm5
+	vmovdqu	224(%rdx), %ymm6
+	vpsubw	%ymm0, %ymm7, %ymm7
+	vpsraw	$15, %ymm7, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm9, %ymm7
+	vpsubw	%ymm0, %ymm8, %ymm8
+	vpsraw	$15, %ymm8, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm1, %ymm9, %ymm1
+	vpsubw	%ymm0, %ymm2, %ymm2
+	vpsraw	$15, %ymm2, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm2, %ymm9, %ymm2
+	vpsubw	%ymm0, %ymm3, %ymm3
+	vpsraw	$15, %ymm3, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm3, %ymm9, %ymm3
+	vpsubw	%ymm0, %ymm4, %ymm4
+	vpsraw	$15, %ymm4, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm4, %ymm9, %ymm4
+	vpsubw	%ymm0, %ymm5, %ymm5
+	vpsraw	$15, %ymm5, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm5, %ymm9, %ymm5
+	vpsubw	%ymm0, %ymm6, %ymm6
+	vpsraw	$15, %ymm6, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm6, %ymm9, %ymm6
+	vpsllw	$12, %ymm8, %ymm9
+	vpor	%ymm7, %ymm9, %ymm7
+	vpsrlw	$4, %ymm8, %ymm8
+	vpsllw	$8, %ymm1, %ymm9
+	vpor	%ymm9, %ymm8, %ymm8
+	vpsrlw	$8, %ymm1, %ymm1
+	vpsllw	$4, %ymm2, %ymm2
+	vpor	%ymm2, %ymm1, %ymm1
+	vpsllw	$12, %ymm4, %ymm2
+	vpor	%ymm3, %ymm2, %ymm2
+	vpsrlw	$4, %ymm4, %ymm3
+	vpsllw	$8, %ymm5, %ymm4
+	vpor	%ymm4, %ymm3, %ymm3
+	vpsrlw	$8, %ymm5, %ymm4
+	vpsllw	$4, %ymm6, %ymm5
+	vpor	%ymm5, %ymm4, %ymm4
+	vpslld	$16, %ymm8, %ymm5
+	vpblendw	$-86, %ymm5, %ymm7, %ymm5
+	vpsrld	$16, %ymm7, %ymm6
+	vpblendw	$-86, %ymm8, %ymm6, %ymm6
+	vpslld	$16, %ymm2, %ymm7
+	vpblendw	$-86, %ymm7, %ymm1, %ymm7
+	vpsrld	$16, %ymm1, %ymm1
+	vpblendw	$-86, %ymm2, %ymm1, %ymm1
+	vpslld	$16, %ymm4, %ymm2
+	vpblendw	$-86, %ymm2, %ymm3, %ymm8
+	vpsrld	$16, %ymm3, %ymm2
+	vpblendw	$-86, %ymm4, %ymm2, %ymm2
+	vmovsldup	%ymm7, %ymm3
+	vpblendd	$-86, %ymm3, %ymm5, %ymm3
+	vpsrlq	$32, %ymm5, %ymm4
+	vpblendd	$-86, %ymm7, %ymm4, %ymm4
+	vmovsldup	%ymm6, %ymm5
+	vpblendd	$-86, %ymm5, %ymm8, %ymm5
+	vpsrlq	$32, %ymm8, %ymm7
+	vpblendd	$-86, %ymm6, %ymm7, %ymm6
+	vmovsldup	%ymm2, %ymm7
+	vpblendd	$-86, %ymm7, %ymm1, %ymm7
+	vpsrlq	$32, %ymm1, %ymm1
+	vpblendd	$-86, %ymm2, %ymm1, %ymm1
+	vpunpcklqdq	%ymm5, %ymm3, %ymm2
+	vpunpckhqdq	%ymm5, %ymm3, %ymm3
+	vpunpcklqdq	%ymm4, %ymm7, %ymm5
+	vpunpckhqdq	%ymm4, %ymm7, %ymm4
+	vpunpcklqdq	%ymm1, %ymm6, %ymm7
+	vpunpckhqdq	%ymm1, %ymm6, %ymm1
+	vperm2i128	$32, %ymm5, %ymm2, %ymm6
+	vperm2i128	$49, %ymm5, %ymm2, %ymm2
+	vperm2i128	$32, %ymm3, %ymm7, %ymm5
+	vperm2i128	$49, %ymm3, %ymm7, %ymm3
+	vperm2i128	$32, %ymm1, %ymm4, %ymm7
+	vperm2i128	$49, %ymm1, %ymm4, %ymm1
+	vmovdqu	%ymm6, (%rcx)
+	vmovdqu	%ymm5, 32(%rcx)
+	vmovdqu	%ymm7, 64(%rcx)
+	vmovdqu	%ymm2, 96(%rcx)
+	vmovdqu	%ymm3, 128(%rcx)
+	vmovdqu	%ymm1, 160(%rcx)
+	vmovdqu	256(%rdx), %ymm7
+	vmovdqu	288(%rdx), %ymm8
+	vmovdqu	320(%rdx), %ymm1
+	vmovdqu	352(%rdx), %ymm2
+	vmovdqu	384(%rdx), %ymm3
+	vmovdqu	416(%rdx), %ymm4
+	vmovdqu	448(%rdx), %ymm5
+	vmovdqu	480(%rdx), %ymm6
+	vpsubw	%ymm0, %ymm7, %ymm7
+	vpsraw	$15, %ymm7, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm7, %ymm9, %ymm7
+	vpsubw	%ymm0, %ymm8, %ymm8
+	vpsraw	$15, %ymm8, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm1, %ymm9, %ymm1
+	vpsubw	%ymm0, %ymm2, %ymm2
+	vpsraw	$15, %ymm2, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm2, %ymm9, %ymm2
+	vpsubw	%ymm0, %ymm3, %ymm3
+	vpsraw	$15, %ymm3, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm3, %ymm9, %ymm3
+	vpsubw	%ymm0, %ymm4, %ymm4
+	vpsraw	$15, %ymm4, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm4, %ymm9, %ymm4
+	vpsubw	%ymm0, %ymm5, %ymm5
+	vpsraw	$15, %ymm5, %ymm9
+	vpand	%ymm0, %ymm9, %ymm9
+	vpaddw	%ymm5, %ymm9, %ymm5
+	vpsubw	%ymm0, %ymm6, %ymm6
+	vpsraw	$15, %ymm6, %ymm9
+	vpand	%ymm0, %ymm9, %ymm0
+	vpaddw	%ymm6, %ymm0, %ymm0
+	vpsllw	$12, %ymm8, %ymm6
+	vpor	%ymm7, %ymm6, %ymm6
+	vpsrlw	$4, %ymm8, %ymm7
+	vpsllw	$8, %ymm1, %ymm8
+	vpor	%ymm8, %ymm7, %ymm7
+	vpsrlw	$8, %ymm1, %ymm1
+	vpsllw	$4, %ymm2, %ymm2
+	vpor	%ymm2, %ymm1, %ymm1
+	vpsllw	$12, %ymm4, %ymm2
+	vpor	%ymm3, %ymm2, %ymm2
+	vpsrlw	$4, %ymm4, %ymm3
+	vpsllw	$8, %ymm5, %ymm4
+	vpor	%ymm4, %ymm3, %ymm3
+	vpsrlw	$8, %ymm5, %ymm4
+	vpsllw	$4, %ymm0, %ymm0
+	vpor	%ymm0, %ymm4, %ymm0
+	vpslld	$16, %ymm7, %ymm4
+	vpblendw	$-86, %ymm4, %ymm6, %ymm4
+	vpsrld	$16, %ymm6, %ymm5
+	vpblendw	$-86, %ymm7, %ymm5, %ymm5
+	vpslld	$16, %ymm2, %ymm6
+	vpblendw	$-86, %ymm6, %ymm1, %ymm6
+	vpsrld	$16, %ymm1, %ymm1
+	vpblendw	$-86, %ymm2, %ymm1, %ymm1
+	vpslld	$16, %ymm0, %ymm2
+	vpblendw	$-86, %ymm2, %ymm3, %ymm7
+	vpsrld	$16, %ymm3, %ymm2
+	vpblendw	$-86, %ymm0, %ymm2, %ymm0
+	vmovsldup	%ymm6, %ymm2
+	vpblendd	$-86, %ymm2, %ymm4, %ymm2
+	vpsrlq	$32, %ymm4, %ymm3
+	vpblendd	$-86, %ymm6, %ymm3, %ymm3
+	vmovsldup	%ymm5, %ymm4
+	vpblendd	$-86, %ymm4, %ymm7, %ymm4
+	vpsrlq	$32, %ymm7, %ymm6
+	vpblendd	$-86, %ymm5, %ymm6, %ymm5
+	vmovsldup	%ymm0, %ymm6
+	vpblendd	$-86, %ymm6, %ymm1, %ymm6
+	vpsrlq	$32, %ymm1, %ymm1
+	vpblendd	$-86, %ymm0, %ymm1, %ymm0
+	vpunpcklqdq	%ymm4, %ymm2, %ymm1
+	vpunpckhqdq	%ymm4, %ymm2, %ymm2
+	vpunpcklqdq	%ymm3, %ymm6, %ymm4
+	vpunpckhqdq	%ymm3, %ymm6, %ymm3
+	vpunpcklqdq	%ymm0, %ymm5, %ymm6
+	vpunpckhqdq	%ymm0, %ymm5, %ymm0
+	vperm2i128	$32, %ymm4, %ymm1, %ymm5
+	vperm2i128	$49, %ymm4, %ymm1, %ymm1
+	vperm2i128	$32, %ymm2, %ymm6, %ymm4
+	vperm2i128	$49, %ymm2, %ymm6, %ymm2
+	vperm2i128	$32, %ymm0, %ymm3, %ymm6
+	vperm2i128	$49, %ymm0, %ymm3, %ymm0
+	vmovdqu	%ymm5, 192(%rcx)
+	vmovdqu	%ymm4, 224(%rcx)
+	vmovdqu	%ymm6, 256(%rcx)
+	vmovdqu	%ymm1, 288(%rcx)
+	vmovdqu	%ymm2, 320(%rcx)
+	vmovdqu	%ymm0, 352(%rcx)
+	ret
+L_poly_sub$1:
+	vmovdqu	(%rsi), %ymm0
+	vmovdqu	(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, (%rcx)
+	vmovdqu	32(%rsi), %ymm0
+	vmovdqu	32(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rcx)
+	vmovdqu	64(%rsi), %ymm0
+	vmovdqu	64(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 64(%rcx)
+	vmovdqu	96(%rsi), %ymm0
+	vmovdqu	96(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 96(%rcx)
+	vmovdqu	128(%rsi), %ymm0
+	vmovdqu	128(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 128(%rcx)
+	vmovdqu	160(%rsi), %ymm0
+	vmovdqu	160(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 160(%rcx)
+	vmovdqu	192(%rsi), %ymm0
+	vmovdqu	192(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 192(%rcx)
+	vmovdqu	224(%rsi), %ymm0
+	vmovdqu	224(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 224(%rcx)
+	vmovdqu	256(%rsi), %ymm0
+	vmovdqu	256(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 256(%rcx)
+	vmovdqu	288(%rsi), %ymm0
+	vmovdqu	288(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 288(%rcx)
+	vmovdqu	320(%rsi), %ymm0
+	vmovdqu	320(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 320(%rcx)
+	vmovdqu	352(%rsi), %ymm0
+	vmovdqu	352(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 352(%rcx)
+	vmovdqu	384(%rsi), %ymm0
+	vmovdqu	384(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 384(%rcx)
+	vmovdqu	416(%rsi), %ymm0
+	vmovdqu	416(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 416(%rcx)
+	vmovdqu	448(%rsi), %ymm0
+	vmovdqu	448(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 448(%rcx)
+	vmovdqu	480(%rsi), %ymm0
+	vmovdqu	480(%rdi), %ymm1
+	vpsubw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 480(%rcx)
+	ret
+L_poly_ntt$1:
+	leaq	glob_data + 1280(%rip), %rsi
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vpbroadcastd	(%rsi), %ymm1
+	vpbroadcastd	4(%rsi), %ymm2
+	vmovdqu	(%rcx), %ymm3
+	vmovdqu	32(%rcx), %ymm14
+	vmovdqu	64(%rcx), %ymm4
+	vmovdqu	96(%rcx), %ymm5
+	vmovdqu	256(%rcx), %ymm6
+	vmovdqu	288(%rcx), %ymm7
+	vmovdqu	320(%rcx), %ymm12
+	vmovdqu	352(%rcx), %ymm8
+	vpmullw	%ymm6, %ymm1, %ymm9
+	vpmulhw	%ymm6, %ymm2, %ymm6
+	vpmullw	%ymm7, %ymm1, %ymm10
+	vpmulhw	%ymm7, %ymm2, %ymm15
+	vpmullw	%ymm12, %ymm1, %ymm11
+	vpmulhw	%ymm12, %ymm2, %ymm7
+	vpmullw	%ymm8, %ymm1, %ymm12
+	vpmulhw	%ymm8, %ymm2, %ymm8
+	vpmulhw	%ymm0, %ymm9, %ymm9
+	vpmulhw	%ymm0, %ymm10, %ymm10
+	vpmulhw	%ymm0, %ymm11, %ymm11
+	vpmulhw	%ymm0, %ymm12, %ymm12
+	vpsubw	%ymm15, %ymm14, %ymm13
+	vpaddw	%ymm14, %ymm15, %ymm14
+	vpsubw	%ymm6, %ymm3, %ymm15
+	vpaddw	%ymm3, %ymm6, %ymm3
+	vpsubw	%ymm8, %ymm5, %ymm6
+	vpaddw	%ymm5, %ymm8, %ymm5
+	vpsubw	%ymm7, %ymm4, %ymm8
+	vpaddw	%ymm4, %ymm7, %ymm4
+	vpaddw	%ymm15, %ymm9, %ymm7
+	vpsubw	%ymm9, %ymm3, %ymm3
+	vpaddw	%ymm13, %ymm10, %ymm9
+	vpsubw	%ymm10, %ymm14, %ymm10
+	vpaddw	%ymm8, %ymm11, %ymm8
+	vpsubw	%ymm11, %ymm4, %ymm4
+	vpaddw	%ymm6, %ymm12, %ymm6
+	vpsubw	%ymm12, %ymm5, %ymm5
+	vmovdqu	%ymm3, (%rcx)
+	vmovdqu	%ymm10, 32(%rcx)
+	vmovdqu	%ymm4, 64(%rcx)
+	vmovdqu	%ymm5, 96(%rcx)
+	vmovdqu	%ymm7, 256(%rcx)
+	vmovdqu	%ymm9, 288(%rcx)
+	vmovdqu	%ymm8, 320(%rcx)
+	vmovdqu	%ymm6, 352(%rcx)
+	vmovdqu	128(%rcx), %ymm3
+	vmovdqu	160(%rcx), %ymm12
+	vmovdqu	192(%rcx), %ymm4
+	vmovdqu	224(%rcx), %ymm5
+	vmovdqu	384(%rcx), %ymm6
+	vmovdqu	416(%rcx), %ymm7
+	vmovdqu	448(%rcx), %ymm10
+	vmovdqu	480(%rcx), %ymm11
+	vpmullw	%ymm6, %ymm1, %ymm14
+	vpmulhw	%ymm6, %ymm2, %ymm6
+	vpmullw	%ymm7, %ymm1, %ymm8
+	vpmulhw	%ymm7, %ymm2, %ymm13
+	vpmullw	%ymm10, %ymm1, %ymm9
+	vpmulhw	%ymm10, %ymm2, %ymm7
+	vpmullw	%ymm11, %ymm1, %ymm10
+	vpmulhw	%ymm11, %ymm2, %ymm1
+	vpmulhw	%ymm0, %ymm14, %ymm2
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhw	%ymm0, %ymm9, %ymm9
+	vpmulhw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm6, %ymm3, %ymm13
+	vpaddw	%ymm3, %ymm6, %ymm3
+	vpsubw	%ymm1, %ymm5, %ymm6
+	vpaddw	%ymm5, %ymm1, %ymm1
+	vpsubw	%ymm7, %ymm4, %ymm5
+	vpaddw	%ymm4, %ymm7, %ymm4
+	vpaddw	%ymm13, %ymm2, %ymm7
+	vpsubw	%ymm2, %ymm3, %ymm2
+	vpaddw	%ymm11, %ymm8, %ymm3
+	vpsubw	%ymm8, %ymm12, %ymm8
+	vpaddw	%ymm5, %ymm9, %ymm5
+	vpsubw	%ymm9, %ymm4, %ymm9
+	vpaddw	%ymm6, %ymm10, %ymm4
+	vpsubw	%ymm10, %ymm1, %ymm14
+	vmovdqu	%ymm7, 384(%rcx)
+	vmovdqu	%ymm3, 416(%rcx)
+	vmovdqu	%ymm5, 448(%rcx)
+	vmovdqu	%ymm4, 480(%rcx)
+	vpbroadcastd	8(%rsi), %ymm1
+	vpbroadcastd	12(%rsi), %ymm4
+	vmovdqu	%ymm8, %ymm10
+	vmovdqu	%ymm9, %ymm3
+	vmovdqu	(%rcx), %ymm6
+	vmovdqu	32(%rcx), %ymm5
+	vmovdqu	64(%rcx), %ymm9
+	vmovdqu	96(%rcx), %ymm7
+	vpmullw	%ymm2, %ymm1, %ymm11
+	vpmulhw	%ymm2, %ymm4, %ymm8
+	vpmullw	%ymm10, %ymm1, %ymm13
+	vpmulhw	%ymm10, %ymm4, %ymm12
+	vpmullw	%ymm3, %ymm1, %ymm2
+	vpmulhw	%ymm3, %ymm4, %ymm10
+	vpmullw	%ymm14, %ymm1, %ymm3
+	vpmulhw	%ymm14, %ymm4, %ymm14
+	vpmulhw	%ymm0, %ymm11, %ymm11
+	vpmulhw	%ymm0, %ymm13, %ymm1
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm12, %ymm5, %ymm4
+	vpaddw	%ymm5, %ymm12, %ymm5
+	vpsubw	%ymm8, %ymm6, %ymm12
+	vpaddw	%ymm6, %ymm8, %ymm13
+	vpsubw	%ymm14, %ymm7, %ymm6
+	vpaddw	%ymm7, %ymm14, %ymm7
+	vpsubw	%ymm10, %ymm9, %ymm8
+	vpaddw	%ymm9, %ymm10, %ymm9
+	vpaddw	%ymm12, %ymm11, %ymm10
+	vpsubw	%ymm11, %ymm13, %ymm12
+	vpaddw	%ymm4, %ymm1, %ymm4
+	vpsubw	%ymm1, %ymm5, %ymm5
+	vpaddw	%ymm8, %ymm2, %ymm8
+	vpsubw	%ymm2, %ymm9, %ymm2
+	vpaddw	%ymm6, %ymm3, %ymm13
+	vpsubw	%ymm3, %ymm7, %ymm7
+	vmovdqu	16(%rsi), %ymm3
+	vmovdqu	48(%rsi), %ymm6
+	vperm2i128	$32, %ymm10, %ymm12, %ymm11
+	vperm2i128	$49, %ymm10, %ymm12, %ymm9
+	vperm2i128	$32, %ymm4, %ymm5, %ymm1
+	vperm2i128	$49, %ymm4, %ymm5, %ymm12
+	vperm2i128	$32, %ymm8, %ymm2, %ymm5
+	vperm2i128	$49, %ymm8, %ymm2, %ymm8
+	vperm2i128	$32, %ymm13, %ymm7, %ymm2
+	vperm2i128	$49, %ymm13, %ymm7, %ymm13
+	vpmullw	%ymm5, %ymm3, %ymm4
+	vpmulhw	%ymm5, %ymm6, %ymm10
+	vpmullw	%ymm8, %ymm3, %ymm14
+	vpmulhw	%ymm8, %ymm6, %ymm8
+	vpmullw	%ymm2, %ymm3, %ymm5
+	vpmulhw	%ymm2, %ymm6, %ymm2
+	vpmullw	%ymm13, %ymm3, %ymm7
+	vpmulhw	%ymm13, %ymm6, %ymm13
+	vpmulhw	%ymm0, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm14, %ymm4
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm7, %ymm6
+	vpsubw	%ymm8, %ymm9, %ymm7
+	vpaddw	%ymm9, %ymm8, %ymm8
+	vpsubw	%ymm10, %ymm11, %ymm9
+	vpaddw	%ymm11, %ymm10, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm2, %ymm1, %ymm13
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vpaddw	%ymm9, %ymm3, %ymm2
+	vpsubw	%ymm3, %ymm10, %ymm9
+	vpaddw	%ymm7, %ymm4, %ymm3
+	vpsubw	%ymm4, %ymm8, %ymm4
+	vpaddw	%ymm13, %ymm5, %ymm7
+	vpsubw	%ymm5, %ymm1, %ymm13
+	vpaddw	%ymm11, %ymm6, %ymm11
+	vpsubw	%ymm6, %ymm12, %ymm14
+	vmovdqu	80(%rsi), %ymm1
+	vmovdqu	112(%rsi), %ymm10
+	vpunpcklqdq	%ymm2, %ymm9, %ymm5
+	vpunpckhqdq	%ymm2, %ymm9, %ymm12
+	vpunpcklqdq	%ymm3, %ymm4, %ymm8
+	vpunpckhqdq	%ymm3, %ymm4, %ymm6
+	vpunpcklqdq	%ymm7, %ymm13, %ymm2
+	vpunpckhqdq	%ymm7, %ymm13, %ymm4
+	vpunpcklqdq	%ymm11, %ymm14, %ymm3
+	vpunpckhqdq	%ymm11, %ymm14, %ymm7
+	vpmullw	%ymm2, %ymm1, %ymm11
+	vpmulhw	%ymm2, %ymm10, %ymm13
+	vpmullw	%ymm4, %ymm1, %ymm14
+	vpmulhw	%ymm4, %ymm10, %ymm4
+	vpmullw	%ymm3, %ymm1, %ymm2
+	vpmulhw	%ymm3, %ymm10, %ymm9
+	vpmullw	%ymm7, %ymm1, %ymm3
+	vpmulhw	%ymm7, %ymm10, %ymm7
+	vpmulhw	%ymm0, %ymm11, %ymm10
+	vpmulhw	%ymm0, %ymm14, %ymm1
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm4, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm4, %ymm4
+	vpsubw	%ymm13, %ymm5, %ymm12
+	vpaddw	%ymm5, %ymm13, %ymm13
+	vpsubw	%ymm7, %ymm6, %ymm5
+	vpaddw	%ymm6, %ymm7, %ymm6
+	vpsubw	%ymm9, %ymm8, %ymm7
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpaddw	%ymm12, %ymm10, %ymm9
+	vpsubw	%ymm10, %ymm13, %ymm12
+	vpaddw	%ymm11, %ymm1, %ymm10
+	vpsubw	%ymm1, %ymm4, %ymm4
+	vpaddw	%ymm7, %ymm2, %ymm7
+	vpsubw	%ymm2, %ymm8, %ymm2
+	vpaddw	%ymm5, %ymm3, %ymm13
+	vpsubw	%ymm3, %ymm6, %ymm6
+	vmovdqu	144(%rsi), %ymm3
+	vmovdqu	176(%rsi), %ymm5
+	vmovsldup	%ymm9, %ymm1
+	vpblendd	$-86, %ymm1, %ymm12, %ymm11
+	vpsrlq	$32, %ymm12, %ymm1
+	vpblendd	$-86, %ymm9, %ymm1, %ymm8
+	vmovsldup	%ymm10, %ymm1
+	vpblendd	$-86, %ymm1, %ymm4, %ymm1
+	vpsrlq	$32, %ymm4, %ymm4
+	vpblendd	$-86, %ymm10, %ymm4, %ymm12
+	vmovsldup	%ymm7, %ymm4
+	vpblendd	$-86, %ymm4, %ymm2, %ymm9
+	vpsrlq	$32, %ymm2, %ymm2
+	vpblendd	$-86, %ymm7, %ymm2, %ymm7
+	vmovsldup	%ymm13, %ymm2
+	vpblendd	$-86, %ymm2, %ymm6, %ymm2
+	vpsrlq	$32, %ymm6, %ymm4
+	vpblendd	$-86, %ymm13, %ymm4, %ymm13
+	vpmullw	%ymm9, %ymm3, %ymm4
+	vpmulhw	%ymm9, %ymm5, %ymm10
+	vpmullw	%ymm7, %ymm3, %ymm14
+	vpmulhw	%ymm7, %ymm5, %ymm9
+	vpmullw	%ymm2, %ymm3, %ymm6
+	vpmulhw	%ymm2, %ymm5, %ymm2
+	vpmullw	%ymm13, %ymm3, %ymm7
+	vpmulhw	%ymm13, %ymm5, %ymm13
+	vpmulhw	%ymm0, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm14, %ymm4
+	vpmulhw	%ymm0, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm7, %ymm6
+	vpsubw	%ymm9, %ymm8, %ymm7
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpsubw	%ymm10, %ymm11, %ymm9
+	vpaddw	%ymm11, %ymm10, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm2, %ymm1, %ymm13
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vpaddw	%ymm9, %ymm3, %ymm2
+	vpsubw	%ymm3, %ymm10, %ymm9
+	vpaddw	%ymm7, %ymm4, %ymm3
+	vpsubw	%ymm4, %ymm8, %ymm4
+	vpaddw	%ymm13, %ymm5, %ymm7
+	vpsubw	%ymm5, %ymm1, %ymm13
+	vpaddw	%ymm11, %ymm6, %ymm11
+	vpsubw	%ymm6, %ymm12, %ymm14
+	vmovdqu	208(%rsi), %ymm5
+	vmovdqu	240(%rsi), %ymm6
+	vpslld	$16, %ymm2, %ymm1
+	vpblendw	$-86, %ymm1, %ymm9, %ymm10
+	vpsrld	$16, %ymm9, %ymm1
+	vpblendw	$-86, %ymm2, %ymm1, %ymm8
+	vpslld	$16, %ymm3, %ymm1
+	vpblendw	$-86, %ymm1, %ymm4, %ymm1
+	vpsrld	$16, %ymm4, %ymm2
+	vpblendw	$-86, %ymm3, %ymm2, %ymm12
+	vpslld	$16, %ymm7, %ymm2
+	vpblendw	$-86, %ymm2, %ymm13, %ymm4
+	vpsrld	$16, %ymm13, %ymm2
+	vpblendw	$-86, %ymm7, %ymm2, %ymm7
+	vpslld	$16, %ymm11, %ymm2
+	vpblendw	$-86, %ymm2, %ymm14, %ymm2
+	vpsrld	$16, %ymm14, %ymm3
+	vpblendw	$-86, %ymm11, %ymm3, %ymm13
+	vpmullw	%ymm4, %ymm5, %ymm3
+	vpmulhw	%ymm4, %ymm6, %ymm11
+	vpmullw	%ymm7, %ymm5, %ymm4
+	vpmulhw	%ymm7, %ymm6, %ymm9
+	vpmullw	%ymm2, %ymm5, %ymm7
+	vpmulhw	%ymm2, %ymm6, %ymm2
+	vpmullw	%ymm13, %ymm5, %ymm14
+	vpmulhw	%ymm13, %ymm6, %ymm13
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm4, %ymm4
+	vpmulhw	%ymm0, %ymm7, %ymm5
+	vpmulhw	%ymm0, %ymm14, %ymm6
+	vpsubw	%ymm9, %ymm8, %ymm7
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpsubw	%ymm11, %ymm10, %ymm9
+	vpaddw	%ymm10, %ymm11, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm2, %ymm1, %ymm13
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vpaddw	%ymm9, %ymm3, %ymm2
+	vpsubw	%ymm3, %ymm10, %ymm3
+	vpaddw	%ymm7, %ymm4, %ymm7
+	vpsubw	%ymm4, %ymm8, %ymm4
+	vpaddw	%ymm13, %ymm5, %ymm8
+	vpsubw	%ymm5, %ymm1, %ymm1
+	vpaddw	%ymm11, %ymm6, %ymm5
+	vpsubw	%ymm6, %ymm12, %ymm10
+	vmovdqu	272(%rsi), %ymm9
+	vmovdqu	304(%rsi), %ymm13
+	vmovdqu	336(%rsi), %ymm11
+	vmovdqu	368(%rsi), %ymm6
+	vpmullw	%ymm1, %ymm9, %ymm14
+	vpmulhw	%ymm1, %ymm13, %ymm12
+	vpmullw	%ymm10, %ymm9, %ymm9
+	vpmulhw	%ymm10, %ymm13, %ymm13
+	vpmullw	%ymm8, %ymm11, %ymm10
+	vpmulhw	%ymm8, %ymm6, %ymm1
+	vpmullw	%ymm5, %ymm11, %ymm11
+	vpmulhw	%ymm5, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm14, %ymm6
+	vpmulhw	%ymm0, %ymm9, %ymm8
+	vpmulhw	%ymm0, %ymm10, %ymm9
+	vpmulhw	%ymm0, %ymm11, %ymm10
+	vpsubw	%ymm13, %ymm4, %ymm11
+	vpaddw	%ymm4, %ymm13, %ymm4
+	vpsubw	%ymm12, %ymm3, %ymm13
+	vpaddw	%ymm3, %ymm12, %ymm3
+	vpsubw	%ymm5, %ymm7, %ymm12
+	vpaddw	%ymm7, %ymm5, %ymm5
+	vpsubw	%ymm1, %ymm2, %ymm7
+	vpaddw	%ymm2, %ymm1, %ymm1
+	vpaddw	%ymm13, %ymm6, %ymm2
+	vpsubw	%ymm6, %ymm3, %ymm3
+	vpaddw	%ymm11, %ymm8, %ymm6
+	vpsubw	%ymm8, %ymm4, %ymm4
+	vpaddw	%ymm7, %ymm9, %ymm7
+	vpsubw	%ymm9, %ymm1, %ymm8
+	vpaddw	%ymm12, %ymm10, %ymm1
+	vpsubw	%ymm10, %ymm5, %ymm5
+	vmovdqu	glob_data + 384(%rip), %ymm9
+	vpmulhw	%ymm9, %ymm3, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm3, %ymm3
+	vpmulhw	%ymm9, %ymm4, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm4, %ymm4
+	vpmulhw	%ymm9, %ymm8, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm8, %ymm8
+	vpmulhw	%ymm9, %ymm5, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm5, %ymm5
+	vpmulhw	%ymm9, %ymm2, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm2, %ymm2
+	vpmulhw	%ymm9, %ymm6, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm6, %ymm6
+	vpmulhw	%ymm9, %ymm7, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm7, %ymm7
+	vpmulhw	%ymm9, %ymm1, %ymm9
+	vpsraw	$10, %ymm9, %ymm9
+	vpmullw	%ymm0, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm1, %ymm1
+	vmovdqu	%ymm3, (%rcx)
+	vmovdqu	%ymm4, 32(%rcx)
+	vmovdqu	%ymm2, 64(%rcx)
+	vmovdqu	%ymm6, 96(%rcx)
+	vmovdqu	%ymm8, 128(%rcx)
+	vmovdqu	%ymm5, 160(%rcx)
+	vmovdqu	%ymm7, 192(%rcx)
+	vmovdqu	%ymm1, 224(%rcx)
+	vpbroadcastd	400(%rsi), %ymm5
+	vpbroadcastd	404(%rsi), %ymm8
+	vmovdqu	384(%rcx), %ymm1
+	vmovdqu	416(%rcx), %ymm2
+	vmovdqu	448(%rcx), %ymm10
+	vmovdqu	480(%rcx), %ymm9
+	vmovdqu	256(%rcx), %ymm3
+	vmovdqu	288(%rcx), %ymm7
+	vmovdqu	320(%rcx), %ymm6
+	vmovdqu	352(%rcx), %ymm4
+	vpmullw	%ymm1, %ymm5, %ymm14
+	vpmulhw	%ymm1, %ymm8, %ymm12
+	vpmullw	%ymm2, %ymm5, %ymm1
+	vpmulhw	%ymm2, %ymm8, %ymm11
+	vpmullw	%ymm10, %ymm5, %ymm2
+	vpmulhw	%ymm10, %ymm8, %ymm13
+	vpmullw	%ymm9, %ymm5, %ymm10
+	vpmulhw	%ymm9, %ymm8, %ymm5
+	vpmulhw	%ymm0, %ymm14, %ymm8
+	vpmulhw	%ymm0, %ymm1, %ymm9
+	vpmulhw	%ymm0, %ymm2, %ymm1
+	vpmulhw	%ymm0, %ymm10, %ymm2
+	vpsubw	%ymm11, %ymm7, %ymm10
+	vpaddw	%ymm7, %ymm11, %ymm11
+	vpsubw	%ymm12, %ymm3, %ymm7
+	vpaddw	%ymm3, %ymm12, %ymm12
+	vpsubw	%ymm5, %ymm4, %ymm3
+	vpaddw	%ymm4, %ymm5, %ymm4
+	vpsubw	%ymm13, %ymm6, %ymm5
+	vpaddw	%ymm6, %ymm13, %ymm6
+	vpaddw	%ymm7, %ymm8, %ymm7
+	vpsubw	%ymm8, %ymm12, %ymm12
+	vpaddw	%ymm10, %ymm9, %ymm8
+	vpsubw	%ymm9, %ymm11, %ymm9
+	vpaddw	%ymm5, %ymm1, %ymm5
+	vpsubw	%ymm1, %ymm6, %ymm6
+	vpaddw	%ymm3, %ymm2, %ymm13
+	vpsubw	%ymm2, %ymm4, %ymm2
+	vmovdqu	408(%rsi), %ymm3
+	vmovdqu	440(%rsi), %ymm4
+	vperm2i128	$32, %ymm7, %ymm12, %ymm10
+	vperm2i128	$49, %ymm7, %ymm12, %ymm11
+	vperm2i128	$32, %ymm8, %ymm9, %ymm1
+	vperm2i128	$49, %ymm8, %ymm9, %ymm12
+	vperm2i128	$32, %ymm5, %ymm6, %ymm8
+	vperm2i128	$49, %ymm5, %ymm6, %ymm5
+	vperm2i128	$32, %ymm13, %ymm2, %ymm6
+	vperm2i128	$49, %ymm13, %ymm2, %ymm13
+	vpmullw	%ymm8, %ymm3, %ymm7
+	vpmulhw	%ymm8, %ymm4, %ymm14
+	vpmullw	%ymm5, %ymm3, %ymm9
+	vpmulhw	%ymm5, %ymm4, %ymm8
+	vpmullw	%ymm6, %ymm3, %ymm5
+	vpmulhw	%ymm6, %ymm4, %ymm2
+	vpmullw	%ymm13, %ymm3, %ymm6
+	vpmulhw	%ymm13, %ymm4, %ymm13
+	vpmulhw	%ymm0, %ymm7, %ymm3
+	vpmulhw	%ymm0, %ymm9, %ymm4
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm8, %ymm11, %ymm7
+	vpaddw	%ymm11, %ymm8, %ymm8
+	vpsubw	%ymm14, %ymm10, %ymm9
+	vpaddw	%ymm10, %ymm14, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm2, %ymm1, %ymm13
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vpaddw	%ymm9, %ymm3, %ymm2
+	vpsubw	%ymm3, %ymm10, %ymm9
+	vpaddw	%ymm7, %ymm4, %ymm3
+	vpsubw	%ymm4, %ymm8, %ymm4
+	vpaddw	%ymm13, %ymm5, %ymm7
+	vpsubw	%ymm5, %ymm1, %ymm13
+	vpaddw	%ymm11, %ymm6, %ymm11
+	vpsubw	%ymm6, %ymm12, %ymm14
+	vmovdqu	472(%rsi), %ymm1
+	vmovdqu	504(%rsi), %ymm10
+	vpunpcklqdq	%ymm2, %ymm9, %ymm5
+	vpunpckhqdq	%ymm2, %ymm9, %ymm12
+	vpunpcklqdq	%ymm3, %ymm4, %ymm8
+	vpunpckhqdq	%ymm3, %ymm4, %ymm6
+	vpunpcklqdq	%ymm7, %ymm13, %ymm2
+	vpunpckhqdq	%ymm7, %ymm13, %ymm4
+	vpunpcklqdq	%ymm11, %ymm14, %ymm3
+	vpunpckhqdq	%ymm11, %ymm14, %ymm7
+	vpmullw	%ymm2, %ymm1, %ymm11
+	vpmulhw	%ymm2, %ymm10, %ymm13
+	vpmullw	%ymm4, %ymm1, %ymm14
+	vpmulhw	%ymm4, %ymm10, %ymm4
+	vpmullw	%ymm3, %ymm1, %ymm2
+	vpmulhw	%ymm3, %ymm10, %ymm9
+	vpmullw	%ymm7, %ymm1, %ymm3
+	vpmulhw	%ymm7, %ymm10, %ymm7
+	vpmulhw	%ymm0, %ymm11, %ymm10
+	vpmulhw	%ymm0, %ymm14, %ymm1
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm4, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm4, %ymm4
+	vpsubw	%ymm13, %ymm5, %ymm12
+	vpaddw	%ymm5, %ymm13, %ymm13
+	vpsubw	%ymm7, %ymm6, %ymm5
+	vpaddw	%ymm6, %ymm7, %ymm6
+	vpsubw	%ymm9, %ymm8, %ymm7
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpaddw	%ymm12, %ymm10, %ymm9
+	vpsubw	%ymm10, %ymm13, %ymm12
+	vpaddw	%ymm11, %ymm1, %ymm10
+	vpsubw	%ymm1, %ymm4, %ymm4
+	vpaddw	%ymm7, %ymm2, %ymm7
+	vpsubw	%ymm2, %ymm8, %ymm2
+	vpaddw	%ymm5, %ymm3, %ymm13
+	vpsubw	%ymm3, %ymm6, %ymm6
+	vmovdqu	536(%rsi), %ymm3
+	vmovdqu	568(%rsi), %ymm5
+	vmovsldup	%ymm9, %ymm1
+	vpblendd	$-86, %ymm1, %ymm12, %ymm11
+	vpsrlq	$32, %ymm12, %ymm1
+	vpblendd	$-86, %ymm9, %ymm1, %ymm8
+	vmovsldup	%ymm10, %ymm1
+	vpblendd	$-86, %ymm1, %ymm4, %ymm1
+	vpsrlq	$32, %ymm4, %ymm4
+	vpblendd	$-86, %ymm10, %ymm4, %ymm12
+	vmovsldup	%ymm7, %ymm4
+	vpblendd	$-86, %ymm4, %ymm2, %ymm9
+	vpsrlq	$32, %ymm2, %ymm2
+	vpblendd	$-86, %ymm7, %ymm2, %ymm7
+	vmovsldup	%ymm13, %ymm2
+	vpblendd	$-86, %ymm2, %ymm6, %ymm2
+	vpsrlq	$32, %ymm6, %ymm4
+	vpblendd	$-86, %ymm13, %ymm4, %ymm13
+	vpmullw	%ymm9, %ymm3, %ymm4
+	vpmulhw	%ymm9, %ymm5, %ymm10
+	vpmullw	%ymm7, %ymm3, %ymm14
+	vpmulhw	%ymm7, %ymm5, %ymm9
+	vpmullw	%ymm2, %ymm3, %ymm6
+	vpmulhw	%ymm2, %ymm5, %ymm2
+	vpmullw	%ymm13, %ymm3, %ymm7
+	vpmulhw	%ymm13, %ymm5, %ymm13
+	vpmulhw	%ymm0, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm14, %ymm4
+	vpmulhw	%ymm0, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm7, %ymm6
+	vpsubw	%ymm9, %ymm8, %ymm7
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpsubw	%ymm10, %ymm11, %ymm9
+	vpaddw	%ymm11, %ymm10, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm2, %ymm1, %ymm13
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vpaddw	%ymm9, %ymm3, %ymm2
+	vpsubw	%ymm3, %ymm10, %ymm9
+	vpaddw	%ymm7, %ymm4, %ymm3
+	vpsubw	%ymm4, %ymm8, %ymm4
+	vpaddw	%ymm13, %ymm5, %ymm7
+	vpsubw	%ymm5, %ymm1, %ymm13
+	vpaddw	%ymm11, %ymm6, %ymm11
+	vpsubw	%ymm6, %ymm12, %ymm14
+	vmovdqu	600(%rsi), %ymm5
+	vmovdqu	632(%rsi), %ymm6
+	vpslld	$16, %ymm2, %ymm1
+	vpblendw	$-86, %ymm1, %ymm9, %ymm10
+	vpsrld	$16, %ymm9, %ymm1
+	vpblendw	$-86, %ymm2, %ymm1, %ymm8
+	vpslld	$16, %ymm3, %ymm1
+	vpblendw	$-86, %ymm1, %ymm4, %ymm1
+	vpsrld	$16, %ymm4, %ymm2
+	vpblendw	$-86, %ymm3, %ymm2, %ymm12
+	vpslld	$16, %ymm7, %ymm2
+	vpblendw	$-86, %ymm2, %ymm13, %ymm4
+	vpsrld	$16, %ymm13, %ymm2
+	vpblendw	$-86, %ymm7, %ymm2, %ymm7
+	vpslld	$16, %ymm11, %ymm2
+	vpblendw	$-86, %ymm2, %ymm14, %ymm2
+	vpsrld	$16, %ymm14, %ymm3
+	vpblendw	$-86, %ymm11, %ymm3, %ymm13
+	vpmullw	%ymm4, %ymm5, %ymm3
+	vpmulhw	%ymm4, %ymm6, %ymm11
+	vpmullw	%ymm7, %ymm5, %ymm4
+	vpmulhw	%ymm7, %ymm6, %ymm9
+	vpmullw	%ymm2, %ymm5, %ymm7
+	vpmulhw	%ymm2, %ymm6, %ymm2
+	vpmullw	%ymm13, %ymm5, %ymm14
+	vpmulhw	%ymm13, %ymm6, %ymm13
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm4, %ymm4
+	vpmulhw	%ymm0, %ymm7, %ymm5
+	vpmulhw	%ymm0, %ymm14, %ymm6
+	vpsubw	%ymm9, %ymm8, %ymm7
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpsubw	%ymm11, %ymm10, %ymm9
+	vpaddw	%ymm10, %ymm11, %ymm10
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpsubw	%ymm2, %ymm1, %ymm13
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vpaddw	%ymm9, %ymm3, %ymm2
+	vpsubw	%ymm3, %ymm10, %ymm3
+	vpaddw	%ymm7, %ymm4, %ymm7
+	vpsubw	%ymm4, %ymm8, %ymm4
+	vpaddw	%ymm13, %ymm5, %ymm8
+	vpsubw	%ymm5, %ymm1, %ymm1
+	vpaddw	%ymm11, %ymm6, %ymm5
+	vpsubw	%ymm6, %ymm12, %ymm10
+	vmovdqu	664(%rsi), %ymm9
+	vmovdqu	696(%rsi), %ymm13
+	vmovdqu	728(%rsi), %ymm11
+	vmovdqu	760(%rsi), %ymm6
+	vpmullw	%ymm1, %ymm9, %ymm14
+	vpmulhw	%ymm1, %ymm13, %ymm12
+	vpmullw	%ymm10, %ymm9, %ymm9
+	vpmulhw	%ymm10, %ymm13, %ymm13
+	vpmullw	%ymm8, %ymm11, %ymm10
+	vpmulhw	%ymm8, %ymm6, %ymm1
+	vpmullw	%ymm5, %ymm11, %ymm11
+	vpmulhw	%ymm5, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm14, %ymm6
+	vpmulhw	%ymm0, %ymm9, %ymm8
+	vpmulhw	%ymm0, %ymm10, %ymm9
+	vpmulhw	%ymm0, %ymm11, %ymm10
+	vpsubw	%ymm13, %ymm4, %ymm11
+	vpaddw	%ymm4, %ymm13, %ymm4
+	vpsubw	%ymm12, %ymm3, %ymm13
+	vpaddw	%ymm3, %ymm12, %ymm3
+	vpsubw	%ymm5, %ymm7, %ymm12
+	vpaddw	%ymm7, %ymm5, %ymm5
+	vpsubw	%ymm1, %ymm2, %ymm7
+	vpaddw	%ymm2, %ymm1, %ymm1
+	vpaddw	%ymm13, %ymm6, %ymm2
+	vpsubw	%ymm6, %ymm3, %ymm3
+	vpaddw	%ymm11, %ymm8, %ymm6
+	vpsubw	%ymm8, %ymm4, %ymm4
+	vpaddw	%ymm7, %ymm9, %ymm7
+	vpsubw	%ymm9, %ymm1, %ymm8
+	vpaddw	%ymm12, %ymm10, %ymm1
+	vpsubw	%ymm10, %ymm5, %ymm5
+	vmovdqu	glob_data + 384(%rip), %ymm9
+	vpmulhw	%ymm9, %ymm3, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm3, %ymm3
+	vpmulhw	%ymm9, %ymm4, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm4, %ymm4
+	vpmulhw	%ymm9, %ymm8, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm8, %ymm8
+	vpmulhw	%ymm9, %ymm5, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm5, %ymm5
+	vpmulhw	%ymm9, %ymm2, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm2, %ymm2
+	vpmulhw	%ymm9, %ymm6, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm6, %ymm6
+	vpmulhw	%ymm9, %ymm7, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm7, %ymm7
+	vpmulhw	%ymm9, %ymm1, %ymm9
+	vpsraw	$10, %ymm9, %ymm9
+	vpmullw	%ymm0, %ymm9, %ymm0
+	vpsubw	%ymm0, %ymm1, %ymm0
+	vmovdqu	%ymm3, 256(%rcx)
+	vmovdqu	%ymm4, 288(%rcx)
+	vmovdqu	%ymm2, 320(%rcx)
+	vmovdqu	%ymm6, 352(%rcx)
+	vmovdqu	%ymm8, 384(%rcx)
+	vmovdqu	%ymm5, 416(%rcx)
+	vmovdqu	%ymm7, 448(%rcx)
+	vmovdqu	%ymm0, 480(%rcx)
+	ret
+L_poly_invntt$1:
+	leaq	glob_data + 480(%rip), %rsi
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	(%rsi), %ymm12
+	vmovdqu	64(%rsi), %ymm1
+	vmovdqu	32(%rsi), %ymm2
+	vmovdqu	96(%rsi), %ymm5
+	vmovdqu	(%rcx), %ymm3
+	vmovdqu	32(%rcx), %ymm4
+	vmovdqu	64(%rcx), %ymm15
+	vmovdqu	96(%rcx), %ymm11
+	vmovdqu	128(%rcx), %ymm7
+	vmovdqu	160(%rcx), %ymm8
+	vmovdqu	192(%rcx), %ymm13
+	vmovdqu	224(%rcx), %ymm14
+	vpsubw	%ymm15, %ymm3, %ymm6
+	vpsubw	%ymm11, %ymm4, %ymm9
+	vpsubw	%ymm13, %ymm7, %ymm10
+	vpaddw	%ymm3, %ymm15, %ymm3
+	vpaddw	%ymm4, %ymm11, %ymm4
+	vpmullw	%ymm6, %ymm12, %ymm11
+	vpaddw	%ymm7, %ymm13, %ymm7
+	vpmullw	%ymm9, %ymm12, %ymm12
+	vpsubw	%ymm14, %ymm8, %ymm13
+	vpaddw	%ymm8, %ymm14, %ymm8
+	vpmullw	%ymm10, %ymm1, %ymm14
+	vpmullw	%ymm13, %ymm1, %ymm1
+	vpmulhw	%ymm6, %ymm2, %ymm6
+	vpmulhw	%ymm9, %ymm2, %ymm2
+	vpmulhw	%ymm10, %ymm5, %ymm9
+	vpmulhw	%ymm13, %ymm5, %ymm5
+	vpmulhw	%ymm11, %ymm0, %ymm10
+	vpmulhw	%ymm12, %ymm0, %ymm11
+	vpmulhw	%ymm14, %ymm0, %ymm12
+	vpmulhw	%ymm1, %ymm0, %ymm1
+	vpsubw	%ymm10, %ymm6, %ymm6
+	vpsubw	%ymm11, %ymm2, %ymm11
+	vpsubw	%ymm12, %ymm9, %ymm9
+	vpsubw	%ymm1, %ymm5, %ymm13
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	128(%rsi), %ymm2
+	vmovdqu	160(%rsi), %ymm5
+	vpmulhw	%ymm1, %ymm3, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm3, %ymm10
+	vpmulhw	%ymm1, %ymm4, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm12
+	vpmulhw	%ymm1, %ymm7, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm7, %ymm7
+	vpmulhw	%ymm1, %ymm8, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm8, %ymm8
+	vpsubw	%ymm7, %ymm10, %ymm15
+	vpsubw	%ymm8, %ymm12, %ymm3
+	vpsubw	%ymm9, %ymm6, %ymm4
+	vpaddw	%ymm10, %ymm7, %ymm7
+	vpaddw	%ymm12, %ymm8, %ymm8
+	vpmullw	%ymm15, %ymm2, %ymm10
+	vpaddw	%ymm6, %ymm9, %ymm9
+	vpmullw	%ymm3, %ymm2, %ymm6
+	vpsubw	%ymm13, %ymm11, %ymm12
+	vpaddw	%ymm11, %ymm13, %ymm11
+	vpmullw	%ymm4, %ymm2, %ymm13
+	vpmullw	%ymm12, %ymm2, %ymm14
+	vpmulhw	%ymm15, %ymm5, %ymm2
+	vpmulhw	%ymm3, %ymm5, %ymm3
+	vpmulhw	%ymm4, %ymm5, %ymm4
+	vpmulhw	%ymm12, %ymm5, %ymm5
+	vpmulhw	%ymm10, %ymm0, %ymm10
+	vpmulhw	%ymm6, %ymm0, %ymm12
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm14, %ymm0, %ymm6
+	vpsubw	%ymm10, %ymm2, %ymm2
+	vpsubw	%ymm12, %ymm3, %ymm3
+	vpsubw	%ymm13, %ymm4, %ymm4
+	vpsubw	%ymm6, %ymm5, %ymm5
+	vpslld	$16, %ymm8, %ymm6
+	vpblendw	$-86, %ymm6, %ymm7, %ymm6
+	vpsrld	$16, %ymm7, %ymm7
+	vpblendw	$-86, %ymm8, %ymm7, %ymm7
+	vpslld	$16, %ymm11, %ymm8
+	vpblendw	$-86, %ymm8, %ymm9, %ymm10
+	vpsrld	$16, %ymm9, %ymm8
+	vpblendw	$-86, %ymm11, %ymm8, %ymm11
+	vpslld	$16, %ymm3, %ymm8
+	vpblendw	$-86, %ymm8, %ymm2, %ymm8
+	vpsrld	$16, %ymm2, %ymm2
+	vpblendw	$-86, %ymm3, %ymm2, %ymm9
+	vpslld	$16, %ymm5, %ymm2
+	vpblendw	$-86, %ymm2, %ymm4, %ymm12
+	vpsrld	$16, %ymm4, %ymm2
+	vpblendw	$-86, %ymm5, %ymm2, %ymm13
+	vmovdqu	192(%rsi), %ymm2
+	vmovdqu	224(%rsi), %ymm5
+	vpsubw	%ymm7, %ymm6, %ymm15
+	vpsubw	%ymm11, %ymm10, %ymm3
+	vpsubw	%ymm9, %ymm8, %ymm4
+	vpaddw	%ymm6, %ymm7, %ymm6
+	vpaddw	%ymm10, %ymm11, %ymm7
+	vpmullw	%ymm15, %ymm2, %ymm10
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpmullw	%ymm3, %ymm2, %ymm9
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpmullw	%ymm4, %ymm2, %ymm13
+	vpmullw	%ymm11, %ymm2, %ymm14
+	vpmulhw	%ymm15, %ymm5, %ymm2
+	vpmulhw	%ymm3, %ymm5, %ymm3
+	vpmulhw	%ymm4, %ymm5, %ymm4
+	vpmulhw	%ymm11, %ymm5, %ymm5
+	vpmulhw	%ymm10, %ymm0, %ymm10
+	vpmulhw	%ymm9, %ymm0, %ymm11
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm14, %ymm0, %ymm9
+	vpsubw	%ymm10, %ymm2, %ymm2
+	vpsubw	%ymm11, %ymm3, %ymm3
+	vpsubw	%ymm13, %ymm4, %ymm4
+	vpsubw	%ymm9, %ymm5, %ymm5
+	vpmulhw	%ymm1, %ymm6, %ymm9
+	vpsraw	$10, %ymm9, %ymm9
+	vpmullw	%ymm0, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm6, %ymm6
+	vmovsldup	%ymm7, %ymm9
+	vpblendd	$-86, %ymm9, %ymm6, %ymm9
+	vpsrlq	$32, %ymm6, %ymm6
+	vpblendd	$-86, %ymm7, %ymm6, %ymm10
+	vmovsldup	%ymm12, %ymm6
+	vpblendd	$-86, %ymm6, %ymm8, %ymm11
+	vpsrlq	$32, %ymm8, %ymm6
+	vpblendd	$-86, %ymm12, %ymm6, %ymm14
+	vmovsldup	%ymm3, %ymm6
+	vpblendd	$-86, %ymm6, %ymm2, %ymm12
+	vpsrlq	$32, %ymm2, %ymm2
+	vpblendd	$-86, %ymm3, %ymm2, %ymm13
+	vmovsldup	%ymm5, %ymm2
+	vpblendd	$-86, %ymm2, %ymm4, %ymm2
+	vpsrlq	$32, %ymm4, %ymm3
+	vpblendd	$-86, %ymm5, %ymm3, %ymm3
+	vmovdqu	256(%rsi), %ymm4
+	vmovdqu	288(%rsi), %ymm5
+	vpsubw	%ymm10, %ymm9, %ymm6
+	vpsubw	%ymm14, %ymm11, %ymm7
+	vpsubw	%ymm13, %ymm12, %ymm8
+	vpaddw	%ymm9, %ymm10, %ymm9
+	vpaddw	%ymm11, %ymm14, %ymm10
+	vpmullw	%ymm6, %ymm4, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpmullw	%ymm7, %ymm4, %ymm13
+	vpsubw	%ymm3, %ymm2, %ymm14
+	vpaddw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm8, %ymm4, %ymm3
+	vpmullw	%ymm14, %ymm4, %ymm4
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpmulhw	%ymm7, %ymm5, %ymm7
+	vpmulhw	%ymm8, %ymm5, %ymm8
+	vpmulhw	%ymm14, %ymm5, %ymm5
+	vpmulhw	%ymm11, %ymm0, %ymm11
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm3, %ymm0, %ymm3
+	vpmulhw	%ymm4, %ymm0, %ymm4
+	vpsubw	%ymm11, %ymm6, %ymm6
+	vpsubw	%ymm13, %ymm7, %ymm7
+	vpsubw	%ymm3, %ymm8, %ymm3
+	vpsubw	%ymm4, %ymm5, %ymm4
+	vpmulhw	%ymm1, %ymm9, %ymm5
+	vpsraw	$10, %ymm5, %ymm5
+	vpmullw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm9, %ymm8
+	vpunpcklqdq	%ymm10, %ymm8, %ymm5
+	vpunpckhqdq	%ymm10, %ymm8, %ymm8
+	vpunpcklqdq	%ymm2, %ymm12, %ymm9
+	vpunpckhqdq	%ymm2, %ymm12, %ymm2
+	vpunpcklqdq	%ymm7, %ymm6, %ymm10
+	vpunpckhqdq	%ymm7, %ymm6, %ymm6
+	vpunpcklqdq	%ymm4, %ymm3, %ymm7
+	vpunpckhqdq	%ymm4, %ymm3, %ymm3
+	vmovdqu	320(%rsi), %ymm4
+	vmovdqu	352(%rsi), %ymm11
+	vpsubw	%ymm8, %ymm5, %ymm12
+	vpsubw	%ymm2, %ymm9, %ymm13
+	vpsubw	%ymm6, %ymm10, %ymm14
+	vpaddw	%ymm5, %ymm8, %ymm5
+	vpaddw	%ymm9, %ymm2, %ymm2
+	vpmullw	%ymm12, %ymm4, %ymm8
+	vpaddw	%ymm10, %ymm6, %ymm6
+	vpmullw	%ymm13, %ymm4, %ymm9
+	vpsubw	%ymm3, %ymm7, %ymm10
+	vpaddw	%ymm7, %ymm3, %ymm3
+	vpmullw	%ymm14, %ymm4, %ymm7
+	vpmullw	%ymm10, %ymm4, %ymm4
+	vpmulhw	%ymm12, %ymm11, %ymm12
+	vpmulhw	%ymm13, %ymm11, %ymm13
+	vpmulhw	%ymm14, %ymm11, %ymm14
+	vpmulhw	%ymm10, %ymm11, %ymm10
+	vpmulhw	%ymm8, %ymm0, %ymm8
+	vpmulhw	%ymm9, %ymm0, %ymm9
+	vpmulhw	%ymm7, %ymm0, %ymm7
+	vpmulhw	%ymm4, %ymm0, %ymm4
+	vpsubw	%ymm8, %ymm12, %ymm8
+	vpsubw	%ymm9, %ymm13, %ymm9
+	vpsubw	%ymm7, %ymm14, %ymm7
+	vpsubw	%ymm4, %ymm10, %ymm4
+	vpmulhw	%ymm1, %ymm5, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm5, %ymm10
+	vperm2i128	$32, %ymm2, %ymm10, %ymm5
+	vperm2i128	$49, %ymm2, %ymm10, %ymm2
+	vperm2i128	$32, %ymm3, %ymm6, %ymm10
+	vperm2i128	$49, %ymm3, %ymm6, %ymm3
+	vperm2i128	$32, %ymm9, %ymm8, %ymm6
+	vperm2i128	$49, %ymm9, %ymm8, %ymm8
+	vperm2i128	$32, %ymm4, %ymm7, %ymm9
+	vperm2i128	$49, %ymm4, %ymm7, %ymm4
+	vpbroadcastd	384(%rsi), %ymm7
+	vpbroadcastd	388(%rsi), %ymm11
+	vpsubw	%ymm2, %ymm5, %ymm12
+	vpsubw	%ymm3, %ymm10, %ymm13
+	vpsubw	%ymm8, %ymm6, %ymm14
+	vpaddw	%ymm5, %ymm2, %ymm2
+	vpaddw	%ymm10, %ymm3, %ymm3
+	vpmullw	%ymm12, %ymm7, %ymm5
+	vpaddw	%ymm6, %ymm8, %ymm6
+	vpmullw	%ymm13, %ymm7, %ymm8
+	vpsubw	%ymm4, %ymm9, %ymm10
+	vpaddw	%ymm9, %ymm4, %ymm4
+	vpmullw	%ymm14, %ymm7, %ymm9
+	vpmullw	%ymm10, %ymm7, %ymm7
+	vpmulhw	%ymm12, %ymm11, %ymm12
+	vpmulhw	%ymm13, %ymm11, %ymm13
+	vpmulhw	%ymm14, %ymm11, %ymm14
+	vpmulhw	%ymm10, %ymm11, %ymm10
+	vpmulhw	%ymm5, %ymm0, %ymm5
+	vpmulhw	%ymm8, %ymm0, %ymm8
+	vpmulhw	%ymm9, %ymm0, %ymm9
+	vpmulhw	%ymm7, %ymm0, %ymm7
+	vpsubw	%ymm5, %ymm12, %ymm5
+	vpsubw	%ymm8, %ymm13, %ymm8
+	vpsubw	%ymm9, %ymm14, %ymm9
+	vpsubw	%ymm7, %ymm10, %ymm7
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm1
+	vpsubw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, (%rcx)
+	vmovdqu	%ymm3, 32(%rcx)
+	vmovdqu	%ymm6, 64(%rcx)
+	vmovdqu	%ymm4, 96(%rcx)
+	vmovdqu	%ymm5, 128(%rcx)
+	vmovdqu	%ymm8, 160(%rcx)
+	vmovdqu	%ymm9, 192(%rcx)
+	vmovdqu	%ymm7, 224(%rcx)
+	vmovdqu	392(%rsi), %ymm12
+	vmovdqu	456(%rsi), %ymm1
+	vmovdqu	424(%rsi), %ymm2
+	vmovdqu	488(%rsi), %ymm5
+	vmovdqu	256(%rcx), %ymm3
+	vmovdqu	288(%rcx), %ymm4
+	vmovdqu	320(%rcx), %ymm15
+	vmovdqu	352(%rcx), %ymm11
+	vmovdqu	384(%rcx), %ymm7
+	vmovdqu	416(%rcx), %ymm8
+	vmovdqu	448(%rcx), %ymm13
+	vmovdqu	480(%rcx), %ymm14
+	vpsubw	%ymm15, %ymm3, %ymm6
+	vpsubw	%ymm11, %ymm4, %ymm9
+	vpsubw	%ymm13, %ymm7, %ymm10
+	vpaddw	%ymm3, %ymm15, %ymm3
+	vpaddw	%ymm4, %ymm11, %ymm4
+	vpmullw	%ymm6, %ymm12, %ymm11
+	vpaddw	%ymm7, %ymm13, %ymm7
+	vpmullw	%ymm9, %ymm12, %ymm12
+	vpsubw	%ymm14, %ymm8, %ymm13
+	vpaddw	%ymm8, %ymm14, %ymm8
+	vpmullw	%ymm10, %ymm1, %ymm14
+	vpmullw	%ymm13, %ymm1, %ymm1
+	vpmulhw	%ymm6, %ymm2, %ymm6
+	vpmulhw	%ymm9, %ymm2, %ymm2
+	vpmulhw	%ymm10, %ymm5, %ymm9
+	vpmulhw	%ymm13, %ymm5, %ymm5
+	vpmulhw	%ymm11, %ymm0, %ymm10
+	vpmulhw	%ymm12, %ymm0, %ymm11
+	vpmulhw	%ymm14, %ymm0, %ymm12
+	vpmulhw	%ymm1, %ymm0, %ymm1
+	vpsubw	%ymm10, %ymm6, %ymm6
+	vpsubw	%ymm11, %ymm2, %ymm11
+	vpsubw	%ymm12, %ymm9, %ymm9
+	vpsubw	%ymm1, %ymm5, %ymm13
+	vmovdqu	glob_data + 384(%rip), %ymm1
+	vmovdqu	520(%rsi), %ymm2
+	vmovdqu	552(%rsi), %ymm5
+	vpmulhw	%ymm1, %ymm3, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm3, %ymm10
+	vpmulhw	%ymm1, %ymm4, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm12
+	vpmulhw	%ymm1, %ymm7, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm7, %ymm7
+	vpmulhw	%ymm1, %ymm8, %ymm3
+	vpsraw	$10, %ymm3, %ymm3
+	vpmullw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm8, %ymm8
+	vpsubw	%ymm7, %ymm10, %ymm15
+	vpsubw	%ymm8, %ymm12, %ymm3
+	vpsubw	%ymm9, %ymm6, %ymm4
+	vpaddw	%ymm10, %ymm7, %ymm7
+	vpaddw	%ymm12, %ymm8, %ymm8
+	vpmullw	%ymm15, %ymm2, %ymm10
+	vpaddw	%ymm6, %ymm9, %ymm9
+	vpmullw	%ymm3, %ymm2, %ymm6
+	vpsubw	%ymm13, %ymm11, %ymm12
+	vpaddw	%ymm11, %ymm13, %ymm11
+	vpmullw	%ymm4, %ymm2, %ymm13
+	vpmullw	%ymm12, %ymm2, %ymm14
+	vpmulhw	%ymm15, %ymm5, %ymm2
+	vpmulhw	%ymm3, %ymm5, %ymm3
+	vpmulhw	%ymm4, %ymm5, %ymm4
+	vpmulhw	%ymm12, %ymm5, %ymm5
+	vpmulhw	%ymm10, %ymm0, %ymm10
+	vpmulhw	%ymm6, %ymm0, %ymm12
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm14, %ymm0, %ymm6
+	vpsubw	%ymm10, %ymm2, %ymm2
+	vpsubw	%ymm12, %ymm3, %ymm3
+	vpsubw	%ymm13, %ymm4, %ymm4
+	vpsubw	%ymm6, %ymm5, %ymm5
+	vpslld	$16, %ymm8, %ymm6
+	vpblendw	$-86, %ymm6, %ymm7, %ymm6
+	vpsrld	$16, %ymm7, %ymm7
+	vpblendw	$-86, %ymm8, %ymm7, %ymm7
+	vpslld	$16, %ymm11, %ymm8
+	vpblendw	$-86, %ymm8, %ymm9, %ymm10
+	vpsrld	$16, %ymm9, %ymm8
+	vpblendw	$-86, %ymm11, %ymm8, %ymm11
+	vpslld	$16, %ymm3, %ymm8
+	vpblendw	$-86, %ymm8, %ymm2, %ymm8
+	vpsrld	$16, %ymm2, %ymm2
+	vpblendw	$-86, %ymm3, %ymm2, %ymm9
+	vpslld	$16, %ymm5, %ymm2
+	vpblendw	$-86, %ymm2, %ymm4, %ymm12
+	vpsrld	$16, %ymm4, %ymm2
+	vpblendw	$-86, %ymm5, %ymm2, %ymm13
+	vmovdqu	584(%rsi), %ymm2
+	vmovdqu	616(%rsi), %ymm5
+	vpsubw	%ymm7, %ymm6, %ymm15
+	vpsubw	%ymm11, %ymm10, %ymm3
+	vpsubw	%ymm9, %ymm8, %ymm4
+	vpaddw	%ymm6, %ymm7, %ymm6
+	vpaddw	%ymm10, %ymm11, %ymm7
+	vpmullw	%ymm15, %ymm2, %ymm10
+	vpaddw	%ymm8, %ymm9, %ymm8
+	vpmullw	%ymm3, %ymm2, %ymm9
+	vpsubw	%ymm13, %ymm12, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpmullw	%ymm4, %ymm2, %ymm13
+	vpmullw	%ymm11, %ymm2, %ymm14
+	vpmulhw	%ymm15, %ymm5, %ymm2
+	vpmulhw	%ymm3, %ymm5, %ymm3
+	vpmulhw	%ymm4, %ymm5, %ymm4
+	vpmulhw	%ymm11, %ymm5, %ymm5
+	vpmulhw	%ymm10, %ymm0, %ymm10
+	vpmulhw	%ymm9, %ymm0, %ymm11
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm14, %ymm0, %ymm9
+	vpsubw	%ymm10, %ymm2, %ymm2
+	vpsubw	%ymm11, %ymm3, %ymm3
+	vpsubw	%ymm13, %ymm4, %ymm4
+	vpsubw	%ymm9, %ymm5, %ymm5
+	vpmulhw	%ymm1, %ymm6, %ymm9
+	vpsraw	$10, %ymm9, %ymm9
+	vpmullw	%ymm0, %ymm9, %ymm9
+	vpsubw	%ymm9, %ymm6, %ymm6
+	vmovsldup	%ymm7, %ymm9
+	vpblendd	$-86, %ymm9, %ymm6, %ymm9
+	vpsrlq	$32, %ymm6, %ymm6
+	vpblendd	$-86, %ymm7, %ymm6, %ymm10
+	vmovsldup	%ymm12, %ymm6
+	vpblendd	$-86, %ymm6, %ymm8, %ymm11
+	vpsrlq	$32, %ymm8, %ymm6
+	vpblendd	$-86, %ymm12, %ymm6, %ymm14
+	vmovsldup	%ymm3, %ymm6
+	vpblendd	$-86, %ymm6, %ymm2, %ymm12
+	vpsrlq	$32, %ymm2, %ymm2
+	vpblendd	$-86, %ymm3, %ymm2, %ymm13
+	vmovsldup	%ymm5, %ymm2
+	vpblendd	$-86, %ymm2, %ymm4, %ymm2
+	vpsrlq	$32, %ymm4, %ymm3
+	vpblendd	$-86, %ymm5, %ymm3, %ymm3
+	vmovdqu	648(%rsi), %ymm4
+	vmovdqu	680(%rsi), %ymm5
+	vpsubw	%ymm10, %ymm9, %ymm6
+	vpsubw	%ymm14, %ymm11, %ymm7
+	vpsubw	%ymm13, %ymm12, %ymm8
+	vpaddw	%ymm9, %ymm10, %ymm9
+	vpaddw	%ymm11, %ymm14, %ymm10
+	vpmullw	%ymm6, %ymm4, %ymm11
+	vpaddw	%ymm12, %ymm13, %ymm12
+	vpmullw	%ymm7, %ymm4, %ymm13
+	vpsubw	%ymm3, %ymm2, %ymm14
+	vpaddw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm8, %ymm4, %ymm3
+	vpmullw	%ymm14, %ymm4, %ymm4
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpmulhw	%ymm7, %ymm5, %ymm7
+	vpmulhw	%ymm8, %ymm5, %ymm8
+	vpmulhw	%ymm14, %ymm5, %ymm5
+	vpmulhw	%ymm11, %ymm0, %ymm11
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm3, %ymm0, %ymm3
+	vpmulhw	%ymm4, %ymm0, %ymm4
+	vpsubw	%ymm11, %ymm6, %ymm6
+	vpsubw	%ymm13, %ymm7, %ymm7
+	vpsubw	%ymm3, %ymm8, %ymm3
+	vpsubw	%ymm4, %ymm5, %ymm4
+	vpmulhw	%ymm1, %ymm9, %ymm5
+	vpsraw	$10, %ymm5, %ymm5
+	vpmullw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm9, %ymm8
+	vpunpcklqdq	%ymm10, %ymm8, %ymm5
+	vpunpckhqdq	%ymm10, %ymm8, %ymm8
+	vpunpcklqdq	%ymm2, %ymm12, %ymm9
+	vpunpckhqdq	%ymm2, %ymm12, %ymm2
+	vpunpcklqdq	%ymm7, %ymm6, %ymm10
+	vpunpckhqdq	%ymm7, %ymm6, %ymm6
+	vpunpcklqdq	%ymm4, %ymm3, %ymm7
+	vpunpckhqdq	%ymm4, %ymm3, %ymm3
+	vmovdqu	712(%rsi), %ymm4
+	vmovdqu	744(%rsi), %ymm11
+	vpsubw	%ymm8, %ymm5, %ymm12
+	vpsubw	%ymm2, %ymm9, %ymm13
+	vpsubw	%ymm6, %ymm10, %ymm14
+	vpaddw	%ymm5, %ymm8, %ymm5
+	vpaddw	%ymm9, %ymm2, %ymm2
+	vpmullw	%ymm12, %ymm4, %ymm8
+	vpaddw	%ymm10, %ymm6, %ymm6
+	vpmullw	%ymm13, %ymm4, %ymm9
+	vpsubw	%ymm3, %ymm7, %ymm10
+	vpaddw	%ymm7, %ymm3, %ymm3
+	vpmullw	%ymm14, %ymm4, %ymm7
+	vpmullw	%ymm10, %ymm4, %ymm4
+	vpmulhw	%ymm12, %ymm11, %ymm12
+	vpmulhw	%ymm13, %ymm11, %ymm13
+	vpmulhw	%ymm14, %ymm11, %ymm14
+	vpmulhw	%ymm10, %ymm11, %ymm10
+	vpmulhw	%ymm8, %ymm0, %ymm8
+	vpmulhw	%ymm9, %ymm0, %ymm9
+	vpmulhw	%ymm7, %ymm0, %ymm7
+	vpmulhw	%ymm4, %ymm0, %ymm4
+	vpsubw	%ymm8, %ymm12, %ymm8
+	vpsubw	%ymm9, %ymm13, %ymm9
+	vpsubw	%ymm7, %ymm14, %ymm7
+	vpsubw	%ymm4, %ymm10, %ymm4
+	vpmulhw	%ymm1, %ymm5, %ymm10
+	vpsraw	$10, %ymm10, %ymm10
+	vpmullw	%ymm0, %ymm10, %ymm10
+	vpsubw	%ymm10, %ymm5, %ymm10
+	vperm2i128	$32, %ymm2, %ymm10, %ymm5
+	vperm2i128	$49, %ymm2, %ymm10, %ymm2
+	vperm2i128	$32, %ymm3, %ymm6, %ymm10
+	vperm2i128	$49, %ymm3, %ymm6, %ymm3
+	vperm2i128	$32, %ymm9, %ymm8, %ymm6
+	vperm2i128	$49, %ymm9, %ymm8, %ymm8
+	vperm2i128	$32, %ymm4, %ymm7, %ymm9
+	vperm2i128	$49, %ymm4, %ymm7, %ymm4
+	vpbroadcastd	776(%rsi), %ymm7
+	vpbroadcastd	780(%rsi), %ymm11
+	vpsubw	%ymm2, %ymm5, %ymm12
+	vpsubw	%ymm3, %ymm10, %ymm13
+	vpsubw	%ymm8, %ymm6, %ymm14
+	vpaddw	%ymm5, %ymm2, %ymm2
+	vpaddw	%ymm10, %ymm3, %ymm3
+	vpmullw	%ymm12, %ymm7, %ymm5
+	vpaddw	%ymm6, %ymm8, %ymm6
+	vpmullw	%ymm13, %ymm7, %ymm8
+	vpsubw	%ymm4, %ymm9, %ymm10
+	vpaddw	%ymm9, %ymm4, %ymm4
+	vpmullw	%ymm14, %ymm7, %ymm9
+	vpmullw	%ymm10, %ymm7, %ymm7
+	vpmulhw	%ymm12, %ymm11, %ymm12
+	vpmulhw	%ymm13, %ymm11, %ymm13
+	vpmulhw	%ymm14, %ymm11, %ymm14
+	vpmulhw	%ymm10, %ymm11, %ymm10
+	vpmulhw	%ymm5, %ymm0, %ymm5
+	vpmulhw	%ymm8, %ymm0, %ymm8
+	vpmulhw	%ymm9, %ymm0, %ymm9
+	vpmulhw	%ymm7, %ymm0, %ymm7
+	vpsubw	%ymm5, %ymm12, %ymm5
+	vpsubw	%ymm8, %ymm13, %ymm8
+	vpsubw	%ymm9, %ymm14, %ymm9
+	vpsubw	%ymm7, %ymm10, %ymm7
+	vpmulhw	%ymm1, %ymm2, %ymm1
+	vpsraw	$10, %ymm1, %ymm1
+	vpmullw	%ymm0, %ymm1, %ymm1
+	vpsubw	%ymm1, %ymm2, %ymm10
+	vmovdqu	%ymm5, 384(%rcx)
+	vmovdqu	%ymm8, 416(%rcx)
+	vmovdqu	%ymm9, 448(%rcx)
+	vmovdqu	%ymm7, 480(%rcx)
+	vpbroadcastd	784(%rsi), %ymm1
+	vpbroadcastd	788(%rsi), %ymm2
+	vmovdqu	%ymm4, %ymm7
+	vmovdqu	%ymm3, %ymm4
+	vmovdqu	%ymm10, %ymm3
+	vmovdqu	(%rcx), %ymm9
+	vmovdqu	32(%rcx), %ymm13
+	vmovdqu	64(%rcx), %ymm5
+	vmovdqu	96(%rcx), %ymm8
+	vpsubw	%ymm3, %ymm9, %ymm10
+	vpsubw	%ymm4, %ymm13, %ymm11
+	vpsubw	%ymm6, %ymm5, %ymm12
+	vpaddw	%ymm9, %ymm3, %ymm3
+	vpaddw	%ymm13, %ymm4, %ymm4
+	vpmullw	%ymm10, %ymm1, %ymm13
+	vpaddw	%ymm5, %ymm6, %ymm5
+	vpmullw	%ymm11, %ymm1, %ymm6
+	vpsubw	%ymm7, %ymm8, %ymm14
+	vpaddw	%ymm8, %ymm7, %ymm7
+	vpmullw	%ymm12, %ymm1, %ymm8
+	vpmullw	%ymm14, %ymm1, %ymm9
+	vpmulhw	%ymm10, %ymm2, %ymm10
+	vpmulhw	%ymm11, %ymm2, %ymm11
+	vpmulhw	%ymm12, %ymm2, %ymm12
+	vpmulhw	%ymm14, %ymm2, %ymm14
+	vpmulhw	%ymm13, %ymm0, %ymm13
+	vpmulhw	%ymm6, %ymm0, %ymm6
+	vpmulhw	%ymm8, %ymm0, %ymm8
+	vpmulhw	%ymm9, %ymm0, %ymm9
+	vpsubw	%ymm13, %ymm10, %ymm10
+	vpsubw	%ymm6, %ymm11, %ymm6
+	vpsubw	%ymm8, %ymm12, %ymm11
+	vpsubw	%ymm9, %ymm14, %ymm12
+	vmovdqu	glob_data + 320(%rip), %ymm8
+	vmovdqu	glob_data + 352(%rip), %ymm9
+	vmovdqu	%ymm10, 256(%rcx)
+	vmovdqu	%ymm6, 288(%rcx)
+	vmovdqu	%ymm11, 320(%rcx)
+	vmovdqu	%ymm12, 352(%rcx)
+	vpmullw	%ymm3, %ymm8, %ymm6
+	vpmulhw	%ymm3, %ymm9, %ymm3
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm3, %ymm3
+	vpmullw	%ymm4, %ymm8, %ymm6
+	vpmulhw	%ymm4, %ymm9, %ymm4
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm4, %ymm4
+	vpmullw	%ymm5, %ymm8, %ymm6
+	vpmulhw	%ymm5, %ymm9, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm5, %ymm5
+	vpmullw	%ymm7, %ymm8, %ymm6
+	vpmulhw	%ymm7, %ymm9, %ymm7
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm7, %ymm6
+	vmovdqu	%ymm3, (%rcx)
+	vmovdqu	%ymm4, 32(%rcx)
+	vmovdqu	%ymm5, 64(%rcx)
+	vmovdqu	%ymm6, 96(%rcx)
+	vmovdqu	384(%rcx), %ymm4
+	vmovdqu	416(%rcx), %ymm5
+	vmovdqu	448(%rcx), %ymm7
+	vmovdqu	480(%rcx), %ymm10
+	vmovdqu	128(%rcx), %ymm6
+	vmovdqu	160(%rcx), %ymm9
+	vmovdqu	192(%rcx), %ymm8
+	vmovdqu	224(%rcx), %ymm11
+	vpsubw	%ymm4, %ymm6, %ymm12
+	vpsubw	%ymm5, %ymm9, %ymm13
+	vpsubw	%ymm7, %ymm8, %ymm3
+	vpaddw	%ymm6, %ymm4, %ymm4
+	vpaddw	%ymm9, %ymm5, %ymm5
+	vpmullw	%ymm12, %ymm1, %ymm6
+	vpaddw	%ymm8, %ymm7, %ymm7
+	vpmullw	%ymm13, %ymm1, %ymm8
+	vpsubw	%ymm10, %ymm11, %ymm9
+	vpaddw	%ymm11, %ymm10, %ymm10
+	vpmullw	%ymm3, %ymm1, %ymm11
+	vpmullw	%ymm9, %ymm1, %ymm1
+	vpmulhw	%ymm12, %ymm2, %ymm12
+	vpmulhw	%ymm13, %ymm2, %ymm13
+	vpmulhw	%ymm3, %ymm2, %ymm3
+	vpmulhw	%ymm9, %ymm2, %ymm2
+	vpmulhw	%ymm6, %ymm0, %ymm6
+	vpmulhw	%ymm8, %ymm0, %ymm8
+	vpmulhw	%ymm11, %ymm0, %ymm9
+	vpmulhw	%ymm1, %ymm0, %ymm11
+	vpsubw	%ymm6, %ymm12, %ymm1
+	vpsubw	%ymm8, %ymm13, %ymm6
+	vpsubw	%ymm9, %ymm3, %ymm8
+	vpsubw	%ymm11, %ymm2, %ymm9
+	vmovdqu	glob_data + 320(%rip), %ymm2
+	vmovdqu	glob_data + 352(%rip), %ymm3
+	vmovdqu	%ymm1, 384(%rcx)
+	vmovdqu	%ymm6, 416(%rcx)
+	vmovdqu	%ymm8, 448(%rcx)
+	vmovdqu	%ymm9, 480(%rcx)
+	vpmullw	%ymm4, %ymm2, %ymm1
+	vpmulhw	%ymm4, %ymm3, %ymm4
+	vpmulhw	%ymm0, %ymm1, %ymm1
+	vpsubw	%ymm1, %ymm4, %ymm1
+	vpmullw	%ymm5, %ymm2, %ymm4
+	vpmulhw	%ymm5, %ymm3, %ymm5
+	vpmulhw	%ymm0, %ymm4, %ymm4
+	vpsubw	%ymm4, %ymm5, %ymm4
+	vpmullw	%ymm7, %ymm2, %ymm5
+	vpmulhw	%ymm7, %ymm3, %ymm6
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm6, %ymm5
+	vpmullw	%ymm10, %ymm2, %ymm2
+	vpmulhw	%ymm10, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm2, %ymm0
+	vpsubw	%ymm0, %ymm3, %ymm0
+	vmovdqu	%ymm1, 128(%rcx)
+	vmovdqu	%ymm4, 160(%rcx)
+	vmovdqu	%ymm5, 192(%rcx)
+	vmovdqu	%ymm0, 224(%rcx)
+	ret
+L_poly_getnoise_eta1_4x$1:
+	movq	%rax, 1472(%rsp)
+	vmovdqu	(%r10), %ymm0
+	vmovdqu	%ymm0, 32(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 352(%rsp)
+	vmovdqu	%ymm0, 512(%rsp)
+	movb	%cl, 64(%rsp)
+	incb	%cl
+	movb	%cl, 224(%rsp)
+	incb	%cl
+	movb	%cl, 384(%rsp)
+	incb	%cl
+	movb	%cl, 544(%rsp)
+	leaq	672(%rsp), %rax
+	leaq	32(%rsp), %rcx
+	leaq	192(%rsp), %rdx
+	leaq	352(%rsp), %rsi
+	leaq	512(%rsp), %r11
+	call	L_shake256_absorb4x_33$1
+L_poly_getnoise_eta1_4x$3:
+	leaq	672(%rsp), %rax
+	leaq	32(%rsp), %rcx
+	leaq	192(%rsp), %rdx
+	leaq	352(%rsp), %rsi
+	leaq	512(%rsp), %r11
+	movq	%rcx, %rbx
+	movq	%rdx, %rbp
+	movq	%rsi, %r12
+	leaq	-824(%rsp), %rsp
+	call	L_keccakf1600_4x_avx2$1
+L_poly_getnoise_eta1_4x$2:
+	leaq	824(%rsp), %rsp
+	vmovdqu	(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, (%rbx)
+	vmovhpd	%xmm1, (%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, (%r12)
+	vmovhpd	%xmm0, (%r11)
+	vmovdqu	32(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 8(%rbx)
+	vmovhpd	%xmm1, 8(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 8(%r12)
+	vmovhpd	%xmm0, 8(%r11)
+	vmovdqu	64(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 16(%rbx)
+	vmovhpd	%xmm1, 16(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 16(%r12)
+	vmovhpd	%xmm0, 16(%r11)
+	vmovdqu	96(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 24(%rbx)
+	vmovhpd	%xmm1, 24(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 24(%r12)
+	vmovhpd	%xmm0, 24(%r11)
+	vmovdqu	128(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 32(%rbx)
+	vmovhpd	%xmm1, 32(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 32(%r12)
+	vmovhpd	%xmm0, 32(%r11)
+	vmovdqu	160(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 40(%rbx)
+	vmovhpd	%xmm1, 40(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 40(%r12)
+	vmovhpd	%xmm0, 40(%r11)
+	vmovdqu	192(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 48(%rbx)
+	vmovhpd	%xmm1, 48(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 48(%r12)
+	vmovhpd	%xmm0, 48(%r11)
+	vmovdqu	224(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 56(%rbx)
+	vmovhpd	%xmm1, 56(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 56(%r12)
+	vmovhpd	%xmm0, 56(%r11)
+	vmovdqu	256(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 64(%rbx)
+	vmovhpd	%xmm1, 64(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 64(%r12)
+	vmovhpd	%xmm0, 64(%r11)
+	vmovdqu	288(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 72(%rbx)
+	vmovhpd	%xmm1, 72(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 72(%r12)
+	vmovhpd	%xmm0, 72(%r11)
+	vmovdqu	320(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 80(%rbx)
+	vmovhpd	%xmm1, 80(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 80(%r12)
+	vmovhpd	%xmm0, 80(%r11)
+	vmovdqu	352(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 88(%rbx)
+	vmovhpd	%xmm1, 88(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 88(%r12)
+	vmovhpd	%xmm0, 88(%r11)
+	vmovdqu	384(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 96(%rbx)
+	vmovhpd	%xmm1, 96(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 96(%r12)
+	vmovhpd	%xmm0, 96(%r11)
+	vmovdqu	416(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 104(%rbx)
+	vmovhpd	%xmm1, 104(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 104(%r12)
+	vmovhpd	%xmm0, 104(%r11)
+	vmovdqu	448(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 112(%rbx)
+	vmovhpd	%xmm1, 112(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 112(%r12)
+	vmovhpd	%xmm0, 112(%r11)
+	vmovdqu	480(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 120(%rbx)
+	vmovhpd	%xmm1, 120(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 120(%r12)
+	vmovhpd	%xmm0, 120(%r11)
+	vmovdqu	512(%rax), %ymm0
+	vmovdqu	%xmm0, %xmm1
+	vmovlpd	%xmm1, 128(%rbx)
+	vmovhpd	%xmm1, 128(%rbp)
+	vextracti128	$1, %ymm0, %xmm0
+	vmovlpd	%xmm0, 128(%r12)
+	vmovhpd	%xmm0, 128(%r11)
+	movq	1472(%rsp), %rax
+	leaq	32(%rsp), %rcx
+	movl	$1431655765, 1480(%rsp)
+	movl	$858993459, 1484(%rsp)
+	movl	$50529027, 1488(%rsp)
+	movl	$252645135, 1492(%rsp)
+	vpbroadcastd	1480(%rsp), %ymm0
+	vpbroadcastd	1484(%rsp), %ymm1
+	vpbroadcastd	1488(%rsp), %ymm2
+	vpbroadcastd	1492(%rsp), %ymm3
+	vmovdqu	(%rcx), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, (%rax)
+	vmovdqu	%ymm7, 32(%rax)
+	vmovdqu	%ymm6, 64(%rax)
+	vmovdqu	%ymm4, 96(%rax)
+	vmovdqu	32(%rcx), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 128(%rax)
+	vmovdqu	%ymm7, 160(%rax)
+	vmovdqu	%ymm6, 192(%rax)
+	vmovdqu	%ymm4, 224(%rax)
+	vmovdqu	64(%rcx), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 256(%rax)
+	vmovdqu	%ymm7, 288(%rax)
+	vmovdqu	%ymm6, 320(%rax)
+	vmovdqu	%ymm4, 352(%rax)
+	vmovdqu	96(%rcx), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm0
+	vpaddb	%ymm0, %ymm4, %ymm0
+	vpsrlw	$2, %ymm0, %ymm4
+	vpand	%ymm0, %ymm1, %ymm0
+	vpand	%ymm4, %ymm1, %ymm4
+	vpaddb	%ymm1, %ymm0, %ymm0
+	vpsubb	%ymm4, %ymm0, %ymm0
+	vpsrlw	$4, %ymm0, %ymm1
+	vpand	%ymm0, %ymm3, %ymm0
+	vpand	%ymm1, %ymm3, %ymm1
+	vpsubb	%ymm2, %ymm0, %ymm0
+	vpsubb	%ymm2, %ymm1, %ymm1
+	vpunpcklbw	%ymm1, %ymm0, %ymm2
+	vpunpckhbw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%xmm2, %xmm1
+	vpmovsxbw	%xmm1, %ymm1
+	vextracti128	$1, %ymm2, %xmm2
+	vpmovsxbw	%xmm2, %ymm2
+	vmovdqu	%xmm0, %xmm3
+	vpmovsxbw	%xmm3, %ymm3
+	vextracti128	$1, %ymm0, %xmm0
+	vpmovsxbw	%xmm0, %ymm0
+	vmovdqu	%ymm1, 384(%rax)
+	vmovdqu	%ymm3, 416(%rax)
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	%ymm0, 480(%rax)
+	leaq	192(%rsp), %rax
+	movl	$1431655765, 1492(%rsp)
+	movl	$858993459, 1488(%rsp)
+	movl	$50529027, 1484(%rsp)
+	movl	$252645135, 1480(%rsp)
+	vpbroadcastd	1492(%rsp), %ymm0
+	vpbroadcastd	1488(%rsp), %ymm1
+	vpbroadcastd	1484(%rsp), %ymm2
+	vpbroadcastd	1480(%rsp), %ymm3
+	vmovdqu	(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, (%rdi)
+	vmovdqu	%ymm7, 32(%rdi)
+	vmovdqu	%ymm6, 64(%rdi)
+	vmovdqu	%ymm4, 96(%rdi)
+	vmovdqu	32(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 128(%rdi)
+	vmovdqu	%ymm7, 160(%rdi)
+	vmovdqu	%ymm6, 192(%rdi)
+	vmovdqu	%ymm4, 224(%rdi)
+	vmovdqu	64(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 256(%rdi)
+	vmovdqu	%ymm7, 288(%rdi)
+	vmovdqu	%ymm6, 320(%rdi)
+	vmovdqu	%ymm4, 352(%rdi)
+	vmovdqu	96(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm0
+	vpaddb	%ymm0, %ymm4, %ymm0
+	vpsrlw	$2, %ymm0, %ymm4
+	vpand	%ymm0, %ymm1, %ymm0
+	vpand	%ymm4, %ymm1, %ymm4
+	vpaddb	%ymm1, %ymm0, %ymm0
+	vpsubb	%ymm4, %ymm0, %ymm0
+	vpsrlw	$4, %ymm0, %ymm1
+	vpand	%ymm0, %ymm3, %ymm0
+	vpand	%ymm1, %ymm3, %ymm1
+	vpsubb	%ymm2, %ymm0, %ymm0
+	vpsubb	%ymm2, %ymm1, %ymm1
+	vpunpcklbw	%ymm1, %ymm0, %ymm2
+	vpunpckhbw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%xmm2, %xmm1
+	vpmovsxbw	%xmm1, %ymm1
+	vextracti128	$1, %ymm2, %xmm2
+	vpmovsxbw	%xmm2, %ymm2
+	vmovdqu	%xmm0, %xmm3
+	vpmovsxbw	%xmm3, %ymm3
+	vextracti128	$1, %ymm0, %xmm0
+	vpmovsxbw	%xmm0, %ymm0
+	vmovdqu	%ymm1, 384(%rdi)
+	vmovdqu	%ymm3, 416(%rdi)
+	vmovdqu	%ymm2, 448(%rdi)
+	vmovdqu	%ymm0, 480(%rdi)
+	leaq	352(%rsp), %rax
+	movl	$1431655765, 1480(%rsp)
+	movl	$858993459, 1484(%rsp)
+	movl	$50529027, 1488(%rsp)
+	movl	$252645135, 1492(%rsp)
+	vpbroadcastd	1480(%rsp), %ymm0
+	vpbroadcastd	1484(%rsp), %ymm1
+	vpbroadcastd	1488(%rsp), %ymm2
+	vpbroadcastd	1492(%rsp), %ymm3
+	vmovdqu	(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, (%r8)
+	vmovdqu	%ymm7, 32(%r8)
+	vmovdqu	%ymm6, 64(%r8)
+	vmovdqu	%ymm4, 96(%r8)
+	vmovdqu	32(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 128(%r8)
+	vmovdqu	%ymm7, 160(%r8)
+	vmovdqu	%ymm6, 192(%r8)
+	vmovdqu	%ymm4, 224(%r8)
+	vmovdqu	64(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 256(%r8)
+	vmovdqu	%ymm7, 288(%r8)
+	vmovdqu	%ymm6, 320(%r8)
+	vmovdqu	%ymm4, 352(%r8)
+	vmovdqu	96(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm0
+	vpaddb	%ymm0, %ymm4, %ymm0
+	vpsrlw	$2, %ymm0, %ymm4
+	vpand	%ymm0, %ymm1, %ymm0
+	vpand	%ymm4, %ymm1, %ymm4
+	vpaddb	%ymm1, %ymm0, %ymm0
+	vpsubb	%ymm4, %ymm0, %ymm0
+	vpsrlw	$4, %ymm0, %ymm1
+	vpand	%ymm0, %ymm3, %ymm0
+	vpand	%ymm1, %ymm3, %ymm1
+	vpsubb	%ymm2, %ymm0, %ymm0
+	vpsubb	%ymm2, %ymm1, %ymm1
+	vpunpcklbw	%ymm1, %ymm0, %ymm2
+	vpunpckhbw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%xmm2, %xmm1
+	vpmovsxbw	%xmm1, %ymm1
+	vextracti128	$1, %ymm2, %xmm2
+	vpmovsxbw	%xmm2, %ymm2
+	vmovdqu	%xmm0, %xmm3
+	vpmovsxbw	%xmm3, %ymm3
+	vextracti128	$1, %ymm0, %xmm0
+	vpmovsxbw	%xmm0, %ymm0
+	vmovdqu	%ymm1, 384(%r8)
+	vmovdqu	%ymm3, 416(%r8)
+	vmovdqu	%ymm2, 448(%r8)
+	vmovdqu	%ymm0, 480(%r8)
+	leaq	512(%rsp), %rax
+	movl	$1431655765, 1492(%rsp)
+	movl	$858993459, 1488(%rsp)
+	movl	$50529027, 1484(%rsp)
+	movl	$252645135, 1480(%rsp)
+	vpbroadcastd	1492(%rsp), %ymm0
+	vpbroadcastd	1488(%rsp), %ymm1
+	vpbroadcastd	1484(%rsp), %ymm2
+	vpbroadcastd	1480(%rsp), %ymm3
+	vmovdqu	(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, (%r9)
+	vmovdqu	%ymm7, 32(%r9)
+	vmovdqu	%ymm6, 64(%r9)
+	vmovdqu	%ymm4, 96(%r9)
+	vmovdqu	32(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 128(%r9)
+	vmovdqu	%ymm7, 160(%r9)
+	vmovdqu	%ymm6, 192(%r9)
+	vmovdqu	%ymm4, 224(%r9)
+	vmovdqu	64(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm5
+	vpaddb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$2, %ymm4, %ymm5
+	vpand	%ymm4, %ymm1, %ymm4
+	vpand	%ymm5, %ymm1, %ymm5
+	vpaddb	%ymm1, %ymm4, %ymm4
+	vpsubb	%ymm5, %ymm4, %ymm4
+	vpsrlw	$4, %ymm4, %ymm5
+	vpand	%ymm4, %ymm3, %ymm4
+	vpand	%ymm5, %ymm3, %ymm5
+	vpsubb	%ymm2, %ymm4, %ymm4
+	vpsubb	%ymm2, %ymm5, %ymm5
+	vpunpcklbw	%ymm5, %ymm4, %ymm6
+	vpunpckhbw	%ymm5, %ymm4, %ymm4
+	vmovdqu	%xmm6, %xmm5
+	vpmovsxbw	%xmm5, %ymm5
+	vextracti128	$1, %ymm6, %xmm6
+	vpmovsxbw	%xmm6, %ymm6
+	vmovdqu	%xmm4, %xmm7
+	vpmovsxbw	%xmm7, %ymm7
+	vextracti128	$1, %ymm4, %xmm4
+	vpmovsxbw	%xmm4, %ymm4
+	vmovdqu	%ymm5, 256(%r9)
+	vmovdqu	%ymm7, 288(%r9)
+	vmovdqu	%ymm6, 320(%r9)
+	vmovdqu	%ymm4, 352(%r9)
+	vmovdqu	96(%rax), %ymm4
+	vpsrlw	$1, %ymm4, %ymm5
+	vpand	%ymm4, %ymm0, %ymm4
+	vpand	%ymm5, %ymm0, %ymm0
+	vpaddb	%ymm0, %ymm4, %ymm0
+	vpsrlw	$2, %ymm0, %ymm4
+	vpand	%ymm0, %ymm1, %ymm0
+	vpand	%ymm4, %ymm1, %ymm4
+	vpaddb	%ymm1, %ymm0, %ymm0
+	vpsubb	%ymm4, %ymm0, %ymm0
+	vpsrlw	$4, %ymm0, %ymm1
+	vpand	%ymm0, %ymm3, %ymm0
+	vpand	%ymm1, %ymm3, %ymm1
+	vpsubb	%ymm2, %ymm0, %ymm0
+	vpsubb	%ymm2, %ymm1, %ymm1
+	vpunpcklbw	%ymm1, %ymm0, %ymm2
+	vpunpckhbw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%xmm2, %xmm1
+	vpmovsxbw	%xmm1, %ymm1
+	vextracti128	$1, %ymm2, %xmm2
+	vpmovsxbw	%xmm2, %ymm2
+	vmovdqu	%xmm0, %xmm3
+	vpmovsxbw	%xmm3, %ymm3
+	vextracti128	$1, %ymm0, %xmm0
+	vpmovsxbw	%xmm0, %ymm0
+	vmovdqu	%ymm1, 384(%r9)
+	vmovdqu	%ymm3, 416(%r9)
+	vmovdqu	%ymm2, 448(%r9)
+	vmovdqu	%ymm0, 480(%r9)
+	ret
+L_poly_frommsg_1$1:
+	leaq	glob_data + 256(%rip), %rsi
+	vmovdqu	(%rsi), %ymm0
+	vbroadcasti128	glob_data + 4112(%rip), %ymm1
+	vbroadcasti128	glob_data + 4096(%rip), %ymm2
+	vmovdqu	(%rdi), %ymm3
+	vpshufd	$0, %ymm3, %ymm4
+	vpsllvd	%ymm1, %ymm4, %ymm4
+	vpshufb	%ymm2, %ymm4, %ymm4
+	vpsllw	$12, %ymm4, %ymm5
+	vpsllw	$8, %ymm4, %ymm6
+	vpsllw	$4, %ymm4, %ymm7
+	vpsraw	$15, %ymm5, %ymm5
+	vpsraw	$15, %ymm6, %ymm6
+	vpsraw	$15, %ymm7, %ymm7
+	vpsraw	$15, %ymm4, %ymm4
+	vpand	%ymm0, %ymm5, %ymm5
+	vpand	%ymm0, %ymm6, %ymm6
+	vpand	%ymm0, %ymm7, %ymm7
+	vpand	%ymm0, %ymm4, %ymm4
+	vpunpcklqdq	%ymm6, %ymm5, %ymm8
+	vpunpckhqdq	%ymm6, %ymm5, %ymm5
+	vpunpcklqdq	%ymm4, %ymm7, %ymm6
+	vpunpckhqdq	%ymm4, %ymm7, %ymm4
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vperm2i128	$32, %ymm4, %ymm5, %ymm8
+	vperm2i128	$49, %ymm4, %ymm5, %ymm4
+	vmovdqu	%ymm7, (%rax)
+	vmovdqu	%ymm8, 32(%rax)
+	vmovdqu	%ymm6, 256(%rax)
+	vmovdqu	%ymm4, 288(%rax)
+	vpshufd	$85, %ymm3, %ymm4
+	vpsllvd	%ymm1, %ymm4, %ymm4
+	vpshufb	%ymm2, %ymm4, %ymm4
+	vpsllw	$12, %ymm4, %ymm5
+	vpsllw	$8, %ymm4, %ymm6
+	vpsllw	$4, %ymm4, %ymm7
+	vpsraw	$15, %ymm5, %ymm5
+	vpsraw	$15, %ymm6, %ymm6
+	vpsraw	$15, %ymm7, %ymm7
+	vpsraw	$15, %ymm4, %ymm4
+	vpand	%ymm0, %ymm5, %ymm5
+	vpand	%ymm0, %ymm6, %ymm6
+	vpand	%ymm0, %ymm7, %ymm7
+	vpand	%ymm0, %ymm4, %ymm4
+	vpunpcklqdq	%ymm6, %ymm5, %ymm8
+	vpunpckhqdq	%ymm6, %ymm5, %ymm5
+	vpunpcklqdq	%ymm4, %ymm7, %ymm6
+	vpunpckhqdq	%ymm4, %ymm7, %ymm4
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vperm2i128	$32, %ymm4, %ymm5, %ymm8
+	vperm2i128	$49, %ymm4, %ymm5, %ymm4
+	vmovdqu	%ymm7, 64(%rax)
+	vmovdqu	%ymm8, 96(%rax)
+	vmovdqu	%ymm6, 320(%rax)
+	vmovdqu	%ymm4, 352(%rax)
+	vpshufd	$-86, %ymm3, %ymm4
+	vpsllvd	%ymm1, %ymm4, %ymm4
+	vpshufb	%ymm2, %ymm4, %ymm4
+	vpsllw	$12, %ymm4, %ymm5
+	vpsllw	$8, %ymm4, %ymm6
+	vpsllw	$4, %ymm4, %ymm7
+	vpsraw	$15, %ymm5, %ymm5
+	vpsraw	$15, %ymm6, %ymm6
+	vpsraw	$15, %ymm7, %ymm7
+	vpsraw	$15, %ymm4, %ymm4
+	vpand	%ymm0, %ymm5, %ymm5
+	vpand	%ymm0, %ymm6, %ymm6
+	vpand	%ymm0, %ymm7, %ymm7
+	vpand	%ymm0, %ymm4, %ymm4
+	vpunpcklqdq	%ymm6, %ymm5, %ymm8
+	vpunpckhqdq	%ymm6, %ymm5, %ymm5
+	vpunpcklqdq	%ymm4, %ymm7, %ymm6
+	vpunpckhqdq	%ymm4, %ymm7, %ymm4
+	vperm2i128	$32, %ymm6, %ymm8, %ymm7
+	vperm2i128	$49, %ymm6, %ymm8, %ymm6
+	vperm2i128	$32, %ymm4, %ymm5, %ymm8
+	vperm2i128	$49, %ymm4, %ymm5, %ymm4
+	vmovdqu	%ymm7, 128(%rax)
+	vmovdqu	%ymm8, 160(%rax)
+	vmovdqu	%ymm6, 384(%rax)
+	vmovdqu	%ymm4, 416(%rax)
+	vpshufd	$-1, %ymm3, %ymm3
+	vpsllvd	%ymm1, %ymm3, %ymm1
+	vpshufb	%ymm2, %ymm1, %ymm1
+	vpsllw	$12, %ymm1, %ymm2
+	vpsllw	$8, %ymm1, %ymm3
+	vpsllw	$4, %ymm1, %ymm4
+	vpsraw	$15, %ymm2, %ymm2
+	vpsraw	$15, %ymm3, %ymm3
+	vpsraw	$15, %ymm4, %ymm4
+	vpsraw	$15, %ymm1, %ymm1
+	vpand	%ymm0, %ymm2, %ymm2
+	vpand	%ymm0, %ymm3, %ymm3
+	vpand	%ymm0, %ymm4, %ymm4
+	vpand	%ymm0, %ymm1, %ymm0
+	vpunpcklqdq	%ymm3, %ymm2, %ymm1
+	vpunpckhqdq	%ymm3, %ymm2, %ymm2
+	vpunpcklqdq	%ymm0, %ymm4, %ymm3
+	vpunpckhqdq	%ymm0, %ymm4, %ymm0
+	vperm2i128	$32, %ymm3, %ymm1, %ymm4
+	vperm2i128	$49, %ymm3, %ymm1, %ymm1
+	vperm2i128	$32, %ymm0, %ymm2, %ymm3
+	vperm2i128	$49, %ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm4, 192(%rax)
+	vmovdqu	%ymm3, 224(%rax)
+	vmovdqu	%ymm1, 448(%rax)
+	vmovdqu	%ymm0, 480(%rax)
+	ret
+L_poly_frommont$1:
+	leaq	glob_data + 448(%rip), %rcx
+	vmovdqu	(%rcx), %ymm0
+	leaq	glob_data + 416(%rip), %rcx
+	vmovdqu	(%rcx), %ymm1
+	leaq	glob_data + 160(%rip), %rcx
+	vmovdqu	(%rcx), %ymm2
+	vmovdqu	(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, (%rax)
+	vmovdqu	32(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 32(%rax)
+	vmovdqu	64(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 64(%rax)
+	vmovdqu	96(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 96(%rax)
+	vmovdqu	128(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 128(%rax)
+	vmovdqu	160(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 160(%rax)
+	vmovdqu	192(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 192(%rax)
+	vmovdqu	224(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 224(%rax)
+	vmovdqu	256(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 256(%rax)
+	vmovdqu	288(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 288(%rax)
+	vmovdqu	320(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 320(%rax)
+	vmovdqu	352(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 352(%rax)
+	vmovdqu	384(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 384(%rax)
+	vmovdqu	416(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 416(%rax)
+	vmovdqu	448(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm3
+	vpmullw	%ymm1, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm4, %ymm3
+	vmovdqu	%ymm3, 448(%rax)
+	vmovdqu	480(%rax), %ymm3
+	vpmulhw	%ymm2, %ymm3, %ymm4
+	vpmullw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm1, %ymm2, %ymm1
+	vpmulhw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm4, %ymm0
+	vmovdqu	%ymm0, 480(%rax)
+	ret
+L_poly_frombytes$1:
+	leaq	glob_data + 288(%rip), %r9
+	vmovdqu	(%r9), %ymm0
+	vmovdqu	(%rsi), %ymm1
+	vmovdqu	32(%rsi), %ymm2
+	vmovdqu	64(%rsi), %ymm3
+	vmovdqu	96(%rsi), %ymm4
+	vmovdqu	128(%rsi), %ymm5
+	vmovdqu	160(%rsi), %ymm6
+	vperm2i128	$32, %ymm4, %ymm1, %ymm7
+	vperm2i128	$49, %ymm4, %ymm1, %ymm4
+	vperm2i128	$32, %ymm5, %ymm2, %ymm8
+	vperm2i128	$49, %ymm5, %ymm2, %ymm1
+	vperm2i128	$32, %ymm6, %ymm3, %ymm5
+	vperm2i128	$49, %ymm6, %ymm3, %ymm3
+	vpunpcklqdq	%ymm1, %ymm7, %ymm6
+	vpunpckhqdq	%ymm1, %ymm7, %ymm1
+	vpunpcklqdq	%ymm5, %ymm4, %ymm2
+	vpunpckhqdq	%ymm5, %ymm4, %ymm5
+	vpunpcklqdq	%ymm3, %ymm8, %ymm7
+	vpunpckhqdq	%ymm3, %ymm8, %ymm3
+	vmovsldup	%ymm5, %ymm4
+	vpblendd	$-86, %ymm4, %ymm6, %ymm4
+	vpsrlq	$32, %ymm6, %ymm6
+	vpblendd	$-86, %ymm5, %ymm6, %ymm5
+	vmovsldup	%ymm7, %ymm6
+	vpblendd	$-86, %ymm6, %ymm1, %ymm6
+	vpsrlq	$32, %ymm1, %ymm1
+	vpblendd	$-86, %ymm7, %ymm1, %ymm7
+	vmovsldup	%ymm3, %ymm1
+	vpblendd	$-86, %ymm1, %ymm2, %ymm1
+	vpsrlq	$32, %ymm2, %ymm2
+	vpblendd	$-86, %ymm3, %ymm2, %ymm2
+	vpslld	$16, %ymm7, %ymm3
+	vpblendw	$-86, %ymm3, %ymm4, %ymm3
+	vpsrld	$16, %ymm4, %ymm4
+	vpblendw	$-86, %ymm7, %ymm4, %ymm4
+	vpslld	$16, %ymm1, %ymm7
+	vpblendw	$-86, %ymm7, %ymm5, %ymm7
+	vpsrld	$16, %ymm5, %ymm5
+	vpblendw	$-86, %ymm1, %ymm5, %ymm1
+	vpslld	$16, %ymm2, %ymm5
+	vpblendw	$-86, %ymm5, %ymm6, %ymm5
+	vpsrld	$16, %ymm6, %ymm6
+	vpblendw	$-86, %ymm2, %ymm6, %ymm2
+	vpsrlw	$12, %ymm3, %ymm6
+	vpsllw	$4, %ymm4, %ymm8
+	vpor	%ymm8, %ymm6, %ymm6
+	vpand	%ymm3, %ymm0, %ymm3
+	vpand	%ymm6, %ymm0, %ymm6
+	vpsrlw	$8, %ymm4, %ymm4
+	vpsllw	$8, %ymm7, %ymm8
+	vpor	%ymm8, %ymm4, %ymm4
+	vpand	%ymm4, %ymm0, %ymm4
+	vpsrlw	$4, %ymm7, %ymm7
+	vpand	%ymm7, %ymm0, %ymm7
+	vpsrlw	$12, %ymm1, %ymm8
+	vpsllw	$4, %ymm5, %ymm9
+	vpor	%ymm9, %ymm8, %ymm8
+	vpand	%ymm1, %ymm0, %ymm1
+	vpand	%ymm8, %ymm0, %ymm8
+	vpsrlw	$8, %ymm5, %ymm5
+	vpsllw	$8, %ymm2, %ymm9
+	vpor	%ymm9, %ymm5, %ymm5
+	vpand	%ymm5, %ymm0, %ymm5
+	vpsrlw	$4, %ymm2, %ymm2
+	vpand	%ymm2, %ymm0, %ymm2
+	vmovdqu	%ymm3, (%r8)
+	vmovdqu	%ymm6, 32(%r8)
+	vmovdqu	%ymm4, 64(%r8)
+	vmovdqu	%ymm7, 96(%r8)
+	vmovdqu	%ymm1, 128(%r8)
+	vmovdqu	%ymm8, 160(%r8)
+	vmovdqu	%ymm5, 192(%r8)
+	vmovdqu	%ymm2, 224(%r8)
+	vmovdqu	192(%rsi), %ymm1
+	vmovdqu	224(%rsi), %ymm2
+	vmovdqu	256(%rsi), %ymm3
+	vmovdqu	288(%rsi), %ymm4
+	vmovdqu	320(%rsi), %ymm5
+	vmovdqu	352(%rsi), %ymm6
+	vperm2i128	$32, %ymm4, %ymm1, %ymm7
+	vperm2i128	$49, %ymm4, %ymm1, %ymm4
+	vperm2i128	$32, %ymm5, %ymm2, %ymm8
+	vperm2i128	$49, %ymm5, %ymm2, %ymm1
+	vperm2i128	$32, %ymm6, %ymm3, %ymm5
+	vperm2i128	$49, %ymm6, %ymm3, %ymm3
+	vpunpcklqdq	%ymm1, %ymm7, %ymm6
+	vpunpckhqdq	%ymm1, %ymm7, %ymm1
+	vpunpcklqdq	%ymm5, %ymm4, %ymm2
+	vpunpckhqdq	%ymm5, %ymm4, %ymm5
+	vpunpcklqdq	%ymm3, %ymm8, %ymm7
+	vpunpckhqdq	%ymm3, %ymm8, %ymm3
+	vmovsldup	%ymm5, %ymm4
+	vpblendd	$-86, %ymm4, %ymm6, %ymm4
+	vpsrlq	$32, %ymm6, %ymm6
+	vpblendd	$-86, %ymm5, %ymm6, %ymm5
+	vmovsldup	%ymm7, %ymm6
+	vpblendd	$-86, %ymm6, %ymm1, %ymm6
+	vpsrlq	$32, %ymm1, %ymm1
+	vpblendd	$-86, %ymm7, %ymm1, %ymm7
+	vmovsldup	%ymm3, %ymm1
+	vpblendd	$-86, %ymm1, %ymm2, %ymm1
+	vpsrlq	$32, %ymm2, %ymm2
+	vpblendd	$-86, %ymm3, %ymm2, %ymm2
+	vpslld	$16, %ymm7, %ymm3
+	vpblendw	$-86, %ymm3, %ymm4, %ymm3
+	vpsrld	$16, %ymm4, %ymm4
+	vpblendw	$-86, %ymm7, %ymm4, %ymm4
+	vpslld	$16, %ymm1, %ymm7
+	vpblendw	$-86, %ymm7, %ymm5, %ymm7
+	vpsrld	$16, %ymm5, %ymm5
+	vpblendw	$-86, %ymm1, %ymm5, %ymm1
+	vpslld	$16, %ymm2, %ymm5
+	vpblendw	$-86, %ymm5, %ymm6, %ymm5
+	vpsrld	$16, %ymm6, %ymm6
+	vpblendw	$-86, %ymm2, %ymm6, %ymm2
+	vpsrlw	$12, %ymm3, %ymm6
+	vpsllw	$4, %ymm4, %ymm8
+	vpor	%ymm8, %ymm6, %ymm6
+	vpand	%ymm3, %ymm0, %ymm3
+	vpand	%ymm6, %ymm0, %ymm6
+	vpsrlw	$8, %ymm4, %ymm4
+	vpsllw	$8, %ymm7, %ymm8
+	vpor	%ymm8, %ymm4, %ymm4
+	vpand	%ymm4, %ymm0, %ymm4
+	vpsrlw	$4, %ymm7, %ymm7
+	vpand	%ymm7, %ymm0, %ymm7
+	vpsrlw	$12, %ymm1, %ymm8
+	vpsllw	$4, %ymm5, %ymm9
+	vpor	%ymm9, %ymm8, %ymm8
+	vpand	%ymm1, %ymm0, %ymm1
+	vpand	%ymm8, %ymm0, %ymm8
+	vpsrlw	$8, %ymm5, %ymm5
+	vpsllw	$8, %ymm2, %ymm9
+	vpor	%ymm9, %ymm5, %ymm5
+	vpand	%ymm5, %ymm0, %ymm5
+	vpsrlw	$4, %ymm2, %ymm2
+	vpand	%ymm2, %ymm0, %ymm0
+	vmovdqu	%ymm3, 256(%r8)
+	vmovdqu	%ymm6, 288(%r8)
+	vmovdqu	%ymm4, 320(%r8)
+	vmovdqu	%ymm7, 352(%r8)
+	vmovdqu	%ymm1, 384(%r8)
+	vmovdqu	%ymm8, 416(%r8)
+	vmovdqu	%ymm5, 448(%r8)
+	vmovdqu	%ymm0, 480(%r8)
+	ret
+L_poly_decompress$1:
+	leaq	glob_data + 448(%rip), %rdi
+	vmovdqu	(%rdi), %ymm0
+	leaq	glob_data + 96(%rip), %rdi
+	vmovdqu	(%rdi), %ymm1
+	vpbroadcastd	glob_data + 6412(%rip), %ymm2
+	vpbroadcastd	glob_data + 6408(%rip), %ymm3
+	vpxor	%ymm4, %ymm4, %ymm4
+	movq	(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, (%rcx)
+	movq	8(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 32(%rcx)
+	movq	16(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 64(%rcx)
+	movq	24(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 96(%rcx)
+	movq	32(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 128(%rcx)
+	movq	40(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 160(%rcx)
+	movq	48(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 192(%rcx)
+	movq	56(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 224(%rcx)
+	movq	64(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 256(%rcx)
+	movq	72(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 288(%rcx)
+	movq	80(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 320(%rcx)
+	movq	88(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 352(%rcx)
+	movq	96(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 384(%rcx)
+	movq	104(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 416(%rcx)
+	movq	112(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm4
+	vpand	%ymm2, %ymm4, %ymm4
+	vpmullw	%ymm3, %ymm4, %ymm4
+	vpmulhrsw	%ymm0, %ymm4, %ymm4
+	vmovdqu	%ymm4, 448(%rcx)
+	movq	120(%rsi), %xmm4
+	vmovdqu	%xmm4, 16(%rsp)
+	vbroadcasti128	16(%rsp), %ymm4
+	vpshufb	%ymm1, %ymm4, %ymm1
+	vpand	%ymm2, %ymm1, %ymm1
+	vpmullw	%ymm3, %ymm1, %ymm1
+	vpmulhrsw	%ymm0, %ymm1, %ymm0
+	vmovdqu	%ymm0, 480(%rcx)
+	ret
+L_poly_compress_1$1:
+	call	L_poly_csubq$1
+L_poly_compress_1$2:
+	leaq	glob_data + 384(%rip), %rdx
+	vmovdqu	(%rdx), %ymm0
+	vpbroadcastw	glob_data + 6428(%rip), %ymm1
+	vpbroadcastw	glob_data + 6426(%rip), %ymm2
+	vpbroadcastw	glob_data + 6424(%rip), %ymm3
+	vmovdqu	glob_data + 128(%rip), %ymm4
+	vmovdqu	(%rcx), %ymm5
+	vmovdqu	32(%rcx), %ymm6
+	vmovdqu	64(%rcx), %ymm7
+	vmovdqu	96(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm8, %ymm8
+	vpand	%ymm2, %ymm5, %ymm5
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm2, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpackuswb	%ymm8, %ymm7, %ymm6
+	vpmaddubsw	%ymm3, %ymm5, %ymm5
+	vpmaddubsw	%ymm3, %ymm6, %ymm6
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpermd	%ymm5, %ymm4, %ymm5
+	vmovdqu	%ymm5, (%rax)
+	vmovdqu	128(%rcx), %ymm5
+	vmovdqu	160(%rcx), %ymm6
+	vmovdqu	192(%rcx), %ymm7
+	vmovdqu	224(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm8, %ymm8
+	vpand	%ymm2, %ymm5, %ymm5
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm2, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpackuswb	%ymm8, %ymm7, %ymm6
+	vpmaddubsw	%ymm3, %ymm5, %ymm5
+	vpmaddubsw	%ymm3, %ymm6, %ymm6
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpermd	%ymm5, %ymm4, %ymm5
+	vmovdqu	%ymm5, 32(%rax)
+	vmovdqu	256(%rcx), %ymm5
+	vmovdqu	288(%rcx), %ymm6
+	vmovdqu	320(%rcx), %ymm7
+	vmovdqu	352(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm8, %ymm8
+	vpand	%ymm2, %ymm5, %ymm5
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm2, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpackuswb	%ymm8, %ymm7, %ymm6
+	vpmaddubsw	%ymm3, %ymm5, %ymm5
+	vpmaddubsw	%ymm3, %ymm6, %ymm6
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpermd	%ymm5, %ymm4, %ymm5
+	vmovdqu	%ymm5, 64(%rax)
+	vmovdqu	384(%rcx), %ymm5
+	vmovdqu	416(%rcx), %ymm6
+	vmovdqu	448(%rcx), %ymm7
+	vmovdqu	480(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm0
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm0, %ymm0
+	vpand	%ymm2, %ymm5, %ymm1
+	vpand	%ymm2, %ymm6, %ymm5
+	vpand	%ymm2, %ymm7, %ymm6
+	vpand	%ymm2, %ymm0, %ymm0
+	vpackuswb	%ymm5, %ymm1, %ymm1
+	vpackuswb	%ymm0, %ymm6, %ymm0
+	vpmaddubsw	%ymm3, %ymm1, %ymm1
+	vpmaddubsw	%ymm3, %ymm0, %ymm0
+	vpackuswb	%ymm0, %ymm1, %ymm0
+	vpermd	%ymm0, %ymm4, %ymm0
+	vmovdqu	%ymm0, 96(%rax)
+	ret
+L_poly_compress$1:
+	call	L_poly_csubq$1
+L_poly_compress$2:
+	leaq	glob_data + 384(%rip), %rdx
+	vmovdqu	(%rdx), %ymm0
+	vpbroadcastw	glob_data + 6428(%rip), %ymm1
+	vpbroadcastw	glob_data + 6426(%rip), %ymm2
+	vpbroadcastw	glob_data + 6424(%rip), %ymm3
+	vmovdqu	glob_data + 128(%rip), %ymm4
+	vmovdqu	(%rcx), %ymm5
+	vmovdqu	32(%rcx), %ymm6
+	vmovdqu	64(%rcx), %ymm7
+	vmovdqu	96(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm8, %ymm8
+	vpand	%ymm2, %ymm5, %ymm5
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm2, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpackuswb	%ymm8, %ymm7, %ymm6
+	vpmaddubsw	%ymm3, %ymm5, %ymm5
+	vpmaddubsw	%ymm3, %ymm6, %ymm6
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpermd	%ymm5, %ymm4, %ymm5
+	vmovdqu	%ymm5, (%rax)
+	vmovdqu	128(%rcx), %ymm5
+	vmovdqu	160(%rcx), %ymm6
+	vmovdqu	192(%rcx), %ymm7
+	vmovdqu	224(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm8, %ymm8
+	vpand	%ymm2, %ymm5, %ymm5
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm2, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpackuswb	%ymm8, %ymm7, %ymm6
+	vpmaddubsw	%ymm3, %ymm5, %ymm5
+	vpmaddubsw	%ymm3, %ymm6, %ymm6
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpermd	%ymm5, %ymm4, %ymm5
+	vmovdqu	%ymm5, 32(%rax)
+	vmovdqu	256(%rcx), %ymm5
+	vmovdqu	288(%rcx), %ymm6
+	vmovdqu	320(%rcx), %ymm7
+	vmovdqu	352(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm8, %ymm8
+	vpand	%ymm2, %ymm5, %ymm5
+	vpand	%ymm2, %ymm6, %ymm6
+	vpand	%ymm2, %ymm7, %ymm7
+	vpand	%ymm2, %ymm8, %ymm8
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpackuswb	%ymm8, %ymm7, %ymm6
+	vpmaddubsw	%ymm3, %ymm5, %ymm5
+	vpmaddubsw	%ymm3, %ymm6, %ymm6
+	vpackuswb	%ymm6, %ymm5, %ymm5
+	vpermd	%ymm5, %ymm4, %ymm5
+	vmovdqu	%ymm5, 64(%rax)
+	vmovdqu	384(%rcx), %ymm5
+	vmovdqu	416(%rcx), %ymm6
+	vmovdqu	448(%rcx), %ymm7
+	vmovdqu	480(%rcx), %ymm8
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpmulhw	%ymm0, %ymm7, %ymm7
+	vpmulhw	%ymm0, %ymm8, %ymm0
+	vpmulhrsw	%ymm1, %ymm5, %ymm5
+	vpmulhrsw	%ymm1, %ymm6, %ymm6
+	vpmulhrsw	%ymm1, %ymm7, %ymm7
+	vpmulhrsw	%ymm1, %ymm0, %ymm0
+	vpand	%ymm2, %ymm5, %ymm1
+	vpand	%ymm2, %ymm6, %ymm5
+	vpand	%ymm2, %ymm7, %ymm6
+	vpand	%ymm2, %ymm0, %ymm0
+	vpackuswb	%ymm5, %ymm1, %ymm1
+	vpackuswb	%ymm0, %ymm6, %ymm0
+	vpmaddubsw	%ymm3, %ymm1, %ymm1
+	vpmaddubsw	%ymm3, %ymm0, %ymm0
+	vpackuswb	%ymm0, %ymm1, %ymm0
+	vpermd	%ymm0, %ymm4, %ymm0
+	vmovdqu	%ymm0, 96(%rax)
+	ret
+L_poly_basemul$1:
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	glob_data + 416(%rip), %ymm1
+	vmovdqu	glob_data + 1552(%rip), %ymm2
+	vmovdqu	glob_data + 1584(%rip), %ymm3
+	vmovdqu	(%rsi), %ymm4
+	vmovdqu	32(%rsi), %ymm5
+	vmovdqu	(%rdi), %ymm6
+	vmovdqu	32(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm8
+	vpmulhw	%ymm5, %ymm3, %ymm9
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm8, %ymm9, %ymm8
+	vpmullw	%ymm6, %ymm4, %ymm10
+	vpmulhw	%ymm6, %ymm4, %ymm11
+	vpunpcklwd	%ymm11, %ymm10, %ymm9
+	vpunpckhwd	%ymm11, %ymm10, %ymm10
+	vpmullw	%ymm7, %ymm4, %ymm12
+	vpmulhw	%ymm7, %ymm4, %ymm4
+	vpunpcklwd	%ymm4, %ymm12, %ymm11
+	vpunpckhwd	%ymm4, %ymm12, %ymm4
+	vpmullw	%ymm6, %ymm5, %ymm12
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm12, %ymm5
+	vpunpckhwd	%ymm6, %ymm12, %ymm6
+	vpmullw	%ymm7, %ymm8, %ymm12
+	vpmulhw	%ymm7, %ymm8, %ymm7
+	vpunpcklwd	%ymm7, %ymm12, %ymm8
+	vpunpckhwd	%ymm7, %ymm12, %ymm12
+	vpaddd	%ymm8, %ymm9, %ymm7
+	vpaddd	%ymm12, %ymm10, %ymm8
+	vpaddd	%ymm11, %ymm5, %ymm5
+	vpaddd	%ymm4, %ymm6, %ymm4
+	vpxor	%ymm9, %ymm9, %ymm9
+	vpblendw	$-86, %ymm9, %ymm7, %ymm6
+	vpblendw	$-86, %ymm9, %ymm8, %ymm10
+	vpackusdw	%ymm10, %ymm6, %ymm6
+	vpsrld	$16, %ymm7, %ymm7
+	vpsrld	$16, %ymm8, %ymm8
+	vpackusdw	%ymm8, %ymm7, %ymm7
+	vpblendw	$-86, %ymm9, %ymm5, %ymm8
+	vpblendw	$-86, %ymm9, %ymm4, %ymm9
+	vpackusdw	%ymm9, %ymm8, %ymm8
+	vpsrld	$16, %ymm5, %ymm5
+	vpsrld	$16, %ymm4, %ymm4
+	vpackusdw	%ymm4, %ymm5, %ymm4
+	vpmullw	%ymm1, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm7, %ymm5
+	vpmullw	%ymm1, %ymm8, %ymm6
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm4, %ymm4
+	vmovdqu	%ymm5, (%rcx)
+	vmovdqu	%ymm4, 32(%rcx)
+	vmovdqu	64(%rsi), %ymm4
+	vmovdqu	96(%rsi), %ymm5
+	vmovdqu	64(%rdi), %ymm6
+	vmovdqu	96(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm2
+	vpmulhw	%ymm5, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpsubw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm6, %ymm4, %ymm8
+	vpmulhw	%ymm6, %ymm4, %ymm9
+	vpunpcklwd	%ymm9, %ymm8, %ymm3
+	vpunpckhwd	%ymm9, %ymm8, %ymm8
+	vpmullw	%ymm7, %ymm4, %ymm9
+	vpmulhw	%ymm7, %ymm4, %ymm10
+	vpunpcklwd	%ymm10, %ymm9, %ymm4
+	vpunpckhwd	%ymm10, %ymm9, %ymm9
+	vpmullw	%ymm6, %ymm5, %ymm10
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm10, %ymm5
+	vpunpckhwd	%ymm6, %ymm10, %ymm6
+	vpmullw	%ymm7, %ymm2, %ymm10
+	vpmulhw	%ymm7, %ymm2, %ymm2
+	vpunpcklwd	%ymm2, %ymm10, %ymm7
+	vpunpckhwd	%ymm2, %ymm10, %ymm2
+	vpsubd	%ymm7, %ymm3, %ymm7
+	vpsubd	%ymm2, %ymm8, %ymm8
+	vpaddd	%ymm4, %ymm5, %ymm2
+	vpaddd	%ymm9, %ymm6, %ymm3
+	vpxor	%ymm5, %ymm5, %ymm5
+	vpblendw	$-86, %ymm5, %ymm7, %ymm4
+	vpblendw	$-86, %ymm5, %ymm8, %ymm6
+	vpackusdw	%ymm6, %ymm4, %ymm4
+	vpsrld	$16, %ymm7, %ymm6
+	vpsrld	$16, %ymm8, %ymm7
+	vpackusdw	%ymm7, %ymm6, %ymm6
+	vpblendw	$-86, %ymm5, %ymm2, %ymm7
+	vpblendw	$-86, %ymm5, %ymm3, %ymm5
+	vpackusdw	%ymm5, %ymm7, %ymm5
+	vpsrld	$16, %ymm2, %ymm2
+	vpsrld	$16, %ymm3, %ymm3
+	vpackusdw	%ymm3, %ymm2, %ymm2
+	vpmullw	%ymm1, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm6, %ymm3
+	vpmullw	%ymm1, %ymm5, %ymm4
+	vpmulhw	%ymm0, %ymm4, %ymm4
+	vpsubw	%ymm4, %ymm2, %ymm2
+	vmovdqu	%ymm3, 64(%rcx)
+	vmovdqu	%ymm2, 96(%rcx)
+	vmovdqu	glob_data + 1616(%rip), %ymm2
+	vmovdqu	glob_data + 1648(%rip), %ymm3
+	vmovdqu	128(%rsi), %ymm4
+	vmovdqu	160(%rsi), %ymm5
+	vmovdqu	128(%rdi), %ymm6
+	vmovdqu	160(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm8
+	vpmulhw	%ymm5, %ymm3, %ymm9
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm8, %ymm9, %ymm8
+	vpmullw	%ymm6, %ymm4, %ymm10
+	vpmulhw	%ymm6, %ymm4, %ymm11
+	vpunpcklwd	%ymm11, %ymm10, %ymm9
+	vpunpckhwd	%ymm11, %ymm10, %ymm10
+	vpmullw	%ymm7, %ymm4, %ymm12
+	vpmulhw	%ymm7, %ymm4, %ymm4
+	vpunpcklwd	%ymm4, %ymm12, %ymm11
+	vpunpckhwd	%ymm4, %ymm12, %ymm4
+	vpmullw	%ymm6, %ymm5, %ymm12
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm12, %ymm5
+	vpunpckhwd	%ymm6, %ymm12, %ymm6
+	vpmullw	%ymm7, %ymm8, %ymm12
+	vpmulhw	%ymm7, %ymm8, %ymm7
+	vpunpcklwd	%ymm7, %ymm12, %ymm8
+	vpunpckhwd	%ymm7, %ymm12, %ymm12
+	vpaddd	%ymm8, %ymm9, %ymm7
+	vpaddd	%ymm12, %ymm10, %ymm8
+	vpaddd	%ymm11, %ymm5, %ymm5
+	vpaddd	%ymm4, %ymm6, %ymm4
+	vpxor	%ymm9, %ymm9, %ymm9
+	vpblendw	$-86, %ymm9, %ymm7, %ymm6
+	vpblendw	$-86, %ymm9, %ymm8, %ymm10
+	vpackusdw	%ymm10, %ymm6, %ymm6
+	vpsrld	$16, %ymm7, %ymm7
+	vpsrld	$16, %ymm8, %ymm8
+	vpackusdw	%ymm8, %ymm7, %ymm7
+	vpblendw	$-86, %ymm9, %ymm5, %ymm8
+	vpblendw	$-86, %ymm9, %ymm4, %ymm9
+	vpackusdw	%ymm9, %ymm8, %ymm8
+	vpsrld	$16, %ymm5, %ymm5
+	vpsrld	$16, %ymm4, %ymm4
+	vpackusdw	%ymm4, %ymm5, %ymm4
+	vpmullw	%ymm1, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm7, %ymm5
+	vpmullw	%ymm1, %ymm8, %ymm6
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm4, %ymm4
+	vmovdqu	%ymm5, 128(%rcx)
+	vmovdqu	%ymm4, 160(%rcx)
+	vmovdqu	192(%rsi), %ymm4
+	vmovdqu	224(%rsi), %ymm5
+	vmovdqu	192(%rdi), %ymm6
+	vmovdqu	224(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm2
+	vpmulhw	%ymm5, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpsubw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm6, %ymm4, %ymm8
+	vpmulhw	%ymm6, %ymm4, %ymm9
+	vpunpcklwd	%ymm9, %ymm8, %ymm3
+	vpunpckhwd	%ymm9, %ymm8, %ymm8
+	vpmullw	%ymm7, %ymm4, %ymm9
+	vpmulhw	%ymm7, %ymm4, %ymm10
+	vpunpcklwd	%ymm10, %ymm9, %ymm4
+	vpunpckhwd	%ymm10, %ymm9, %ymm9
+	vpmullw	%ymm6, %ymm5, %ymm10
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm10, %ymm5
+	vpunpckhwd	%ymm6, %ymm10, %ymm6
+	vpmullw	%ymm7, %ymm2, %ymm10
+	vpmulhw	%ymm7, %ymm2, %ymm2
+	vpunpcklwd	%ymm2, %ymm10, %ymm7
+	vpunpckhwd	%ymm2, %ymm10, %ymm2
+	vpsubd	%ymm7, %ymm3, %ymm7
+	vpsubd	%ymm2, %ymm8, %ymm8
+	vpaddd	%ymm4, %ymm5, %ymm2
+	vpaddd	%ymm9, %ymm6, %ymm3
+	vpxor	%ymm5, %ymm5, %ymm5
+	vpblendw	$-86, %ymm5, %ymm7, %ymm4
+	vpblendw	$-86, %ymm5, %ymm8, %ymm6
+	vpackusdw	%ymm6, %ymm4, %ymm4
+	vpsrld	$16, %ymm7, %ymm6
+	vpsrld	$16, %ymm8, %ymm7
+	vpackusdw	%ymm7, %ymm6, %ymm6
+	vpblendw	$-86, %ymm5, %ymm2, %ymm7
+	vpblendw	$-86, %ymm5, %ymm3, %ymm5
+	vpackusdw	%ymm5, %ymm7, %ymm5
+	vpsrld	$16, %ymm2, %ymm2
+	vpsrld	$16, %ymm3, %ymm3
+	vpackusdw	%ymm3, %ymm2, %ymm2
+	vpmullw	%ymm1, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm6, %ymm3
+	vpmullw	%ymm1, %ymm5, %ymm4
+	vpmulhw	%ymm0, %ymm4, %ymm4
+	vpsubw	%ymm4, %ymm2, %ymm2
+	vmovdqu	%ymm3, 192(%rcx)
+	vmovdqu	%ymm2, 224(%rcx)
+	vmovdqu	glob_data + 1944(%rip), %ymm2
+	vmovdqu	glob_data + 1976(%rip), %ymm3
+	vmovdqu	256(%rsi), %ymm4
+	vmovdqu	288(%rsi), %ymm5
+	vmovdqu	256(%rdi), %ymm6
+	vmovdqu	288(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm8
+	vpmulhw	%ymm5, %ymm3, %ymm9
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm8, %ymm9, %ymm8
+	vpmullw	%ymm6, %ymm4, %ymm10
+	vpmulhw	%ymm6, %ymm4, %ymm11
+	vpunpcklwd	%ymm11, %ymm10, %ymm9
+	vpunpckhwd	%ymm11, %ymm10, %ymm10
+	vpmullw	%ymm7, %ymm4, %ymm12
+	vpmulhw	%ymm7, %ymm4, %ymm4
+	vpunpcklwd	%ymm4, %ymm12, %ymm11
+	vpunpckhwd	%ymm4, %ymm12, %ymm4
+	vpmullw	%ymm6, %ymm5, %ymm12
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm12, %ymm5
+	vpunpckhwd	%ymm6, %ymm12, %ymm6
+	vpmullw	%ymm7, %ymm8, %ymm12
+	vpmulhw	%ymm7, %ymm8, %ymm7
+	vpunpcklwd	%ymm7, %ymm12, %ymm8
+	vpunpckhwd	%ymm7, %ymm12, %ymm12
+	vpaddd	%ymm8, %ymm9, %ymm7
+	vpaddd	%ymm12, %ymm10, %ymm8
+	vpaddd	%ymm11, %ymm5, %ymm5
+	vpaddd	%ymm4, %ymm6, %ymm4
+	vpxor	%ymm9, %ymm9, %ymm9
+	vpblendw	$-86, %ymm9, %ymm7, %ymm6
+	vpblendw	$-86, %ymm9, %ymm8, %ymm10
+	vpackusdw	%ymm10, %ymm6, %ymm6
+	vpsrld	$16, %ymm7, %ymm7
+	vpsrld	$16, %ymm8, %ymm8
+	vpackusdw	%ymm8, %ymm7, %ymm7
+	vpblendw	$-86, %ymm9, %ymm5, %ymm8
+	vpblendw	$-86, %ymm9, %ymm4, %ymm9
+	vpackusdw	%ymm9, %ymm8, %ymm8
+	vpsrld	$16, %ymm5, %ymm5
+	vpsrld	$16, %ymm4, %ymm4
+	vpackusdw	%ymm4, %ymm5, %ymm4
+	vpmullw	%ymm1, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm7, %ymm5
+	vpmullw	%ymm1, %ymm8, %ymm6
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm4, %ymm4
+	vmovdqu	%ymm5, 256(%rcx)
+	vmovdqu	%ymm4, 288(%rcx)
+	vmovdqu	320(%rsi), %ymm4
+	vmovdqu	352(%rsi), %ymm5
+	vmovdqu	320(%rdi), %ymm6
+	vmovdqu	352(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm2
+	vpmulhw	%ymm5, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpsubw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm6, %ymm4, %ymm8
+	vpmulhw	%ymm6, %ymm4, %ymm9
+	vpunpcklwd	%ymm9, %ymm8, %ymm3
+	vpunpckhwd	%ymm9, %ymm8, %ymm8
+	vpmullw	%ymm7, %ymm4, %ymm9
+	vpmulhw	%ymm7, %ymm4, %ymm10
+	vpunpcklwd	%ymm10, %ymm9, %ymm4
+	vpunpckhwd	%ymm10, %ymm9, %ymm9
+	vpmullw	%ymm6, %ymm5, %ymm10
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm10, %ymm5
+	vpunpckhwd	%ymm6, %ymm10, %ymm6
+	vpmullw	%ymm7, %ymm2, %ymm10
+	vpmulhw	%ymm7, %ymm2, %ymm2
+	vpunpcklwd	%ymm2, %ymm10, %ymm7
+	vpunpckhwd	%ymm2, %ymm10, %ymm2
+	vpsubd	%ymm7, %ymm3, %ymm7
+	vpsubd	%ymm2, %ymm8, %ymm8
+	vpaddd	%ymm4, %ymm5, %ymm2
+	vpaddd	%ymm9, %ymm6, %ymm3
+	vpxor	%ymm5, %ymm5, %ymm5
+	vpblendw	$-86, %ymm5, %ymm7, %ymm4
+	vpblendw	$-86, %ymm5, %ymm8, %ymm6
+	vpackusdw	%ymm6, %ymm4, %ymm4
+	vpsrld	$16, %ymm7, %ymm6
+	vpsrld	$16, %ymm8, %ymm7
+	vpackusdw	%ymm7, %ymm6, %ymm6
+	vpblendw	$-86, %ymm5, %ymm2, %ymm7
+	vpblendw	$-86, %ymm5, %ymm3, %ymm5
+	vpackusdw	%ymm5, %ymm7, %ymm5
+	vpsrld	$16, %ymm2, %ymm2
+	vpsrld	$16, %ymm3, %ymm3
+	vpackusdw	%ymm3, %ymm2, %ymm2
+	vpmullw	%ymm1, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm6, %ymm3
+	vpmullw	%ymm1, %ymm5, %ymm4
+	vpmulhw	%ymm0, %ymm4, %ymm4
+	vpsubw	%ymm4, %ymm2, %ymm2
+	vmovdqu	%ymm3, 320(%rcx)
+	vmovdqu	%ymm2, 352(%rcx)
+	vmovdqu	glob_data + 2008(%rip), %ymm2
+	vmovdqu	glob_data + 2040(%rip), %ymm3
+	vmovdqu	384(%rsi), %ymm4
+	vmovdqu	416(%rsi), %ymm5
+	vmovdqu	384(%rdi), %ymm6
+	vmovdqu	416(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm8
+	vpmulhw	%ymm5, %ymm3, %ymm9
+	vpmulhw	%ymm0, %ymm8, %ymm8
+	vpsubw	%ymm8, %ymm9, %ymm8
+	vpmullw	%ymm6, %ymm4, %ymm10
+	vpmulhw	%ymm6, %ymm4, %ymm11
+	vpunpcklwd	%ymm11, %ymm10, %ymm9
+	vpunpckhwd	%ymm11, %ymm10, %ymm10
+	vpmullw	%ymm7, %ymm4, %ymm12
+	vpmulhw	%ymm7, %ymm4, %ymm4
+	vpunpcklwd	%ymm4, %ymm12, %ymm11
+	vpunpckhwd	%ymm4, %ymm12, %ymm4
+	vpmullw	%ymm6, %ymm5, %ymm12
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm12, %ymm5
+	vpunpckhwd	%ymm6, %ymm12, %ymm6
+	vpmullw	%ymm7, %ymm8, %ymm12
+	vpmulhw	%ymm7, %ymm8, %ymm7
+	vpunpcklwd	%ymm7, %ymm12, %ymm8
+	vpunpckhwd	%ymm7, %ymm12, %ymm12
+	vpaddd	%ymm8, %ymm9, %ymm7
+	vpaddd	%ymm12, %ymm10, %ymm8
+	vpaddd	%ymm11, %ymm5, %ymm5
+	vpaddd	%ymm4, %ymm6, %ymm4
+	vpxor	%ymm9, %ymm9, %ymm9
+	vpblendw	$-86, %ymm9, %ymm7, %ymm6
+	vpblendw	$-86, %ymm9, %ymm8, %ymm10
+	vpackusdw	%ymm10, %ymm6, %ymm6
+	vpsrld	$16, %ymm7, %ymm7
+	vpsrld	$16, %ymm8, %ymm8
+	vpackusdw	%ymm8, %ymm7, %ymm7
+	vpblendw	$-86, %ymm9, %ymm5, %ymm8
+	vpblendw	$-86, %ymm9, %ymm4, %ymm9
+	vpackusdw	%ymm9, %ymm8, %ymm8
+	vpsrld	$16, %ymm5, %ymm5
+	vpsrld	$16, %ymm4, %ymm4
+	vpackusdw	%ymm4, %ymm5, %ymm4
+	vpmullw	%ymm1, %ymm6, %ymm5
+	vpmulhw	%ymm0, %ymm5, %ymm5
+	vpsubw	%ymm5, %ymm7, %ymm5
+	vpmullw	%ymm1, %ymm8, %ymm6
+	vpmulhw	%ymm0, %ymm6, %ymm6
+	vpsubw	%ymm6, %ymm4, %ymm4
+	vmovdqu	%ymm5, 384(%rcx)
+	vmovdqu	%ymm4, 416(%rcx)
+	vmovdqu	448(%rsi), %ymm4
+	vmovdqu	480(%rsi), %ymm5
+	vmovdqu	448(%rdi), %ymm6
+	vmovdqu	480(%rdi), %ymm7
+	vpmullw	%ymm5, %ymm2, %ymm2
+	vpmulhw	%ymm5, %ymm3, %ymm3
+	vpmulhw	%ymm0, %ymm2, %ymm2
+	vpsubw	%ymm2, %ymm3, %ymm2
+	vpmullw	%ymm6, %ymm4, %ymm8
+	vpmulhw	%ymm6, %ymm4, %ymm9
+	vpunpcklwd	%ymm9, %ymm8, %ymm3
+	vpunpckhwd	%ymm9, %ymm8, %ymm8
+	vpmullw	%ymm7, %ymm4, %ymm9
+	vpmulhw	%ymm7, %ymm4, %ymm10
+	vpunpcklwd	%ymm10, %ymm9, %ymm4
+	vpunpckhwd	%ymm10, %ymm9, %ymm9
+	vpmullw	%ymm6, %ymm5, %ymm10
+	vpmulhw	%ymm6, %ymm5, %ymm6
+	vpunpcklwd	%ymm6, %ymm10, %ymm5
+	vpunpckhwd	%ymm6, %ymm10, %ymm6
+	vpmullw	%ymm7, %ymm2, %ymm10
+	vpmulhw	%ymm7, %ymm2, %ymm2
+	vpunpcklwd	%ymm2, %ymm10, %ymm7
+	vpunpckhwd	%ymm2, %ymm10, %ymm2
+	vpsubd	%ymm7, %ymm3, %ymm7
+	vpsubd	%ymm2, %ymm8, %ymm8
+	vpaddd	%ymm4, %ymm5, %ymm2
+	vpaddd	%ymm9, %ymm6, %ymm3
+	vpxor	%ymm5, %ymm5, %ymm5
+	vpblendw	$-86, %ymm5, %ymm7, %ymm4
+	vpblendw	$-86, %ymm5, %ymm8, %ymm6
+	vpackusdw	%ymm6, %ymm4, %ymm4
+	vpsrld	$16, %ymm7, %ymm6
+	vpsrld	$16, %ymm8, %ymm7
+	vpackusdw	%ymm7, %ymm6, %ymm6
+	vpblendw	$-86, %ymm5, %ymm2, %ymm7
+	vpblendw	$-86, %ymm5, %ymm3, %ymm5
+	vpackusdw	%ymm5, %ymm7, %ymm5
+	vpsrld	$16, %ymm2, %ymm2
+	vpsrld	$16, %ymm3, %ymm3
+	vpackusdw	%ymm3, %ymm2, %ymm2
+	vpmullw	%ymm1, %ymm4, %ymm3
+	vpmulhw	%ymm0, %ymm3, %ymm3
+	vpsubw	%ymm3, %ymm6, %ymm3
+	vpmullw	%ymm1, %ymm5, %ymm1
+	vpmulhw	%ymm0, %ymm1, %ymm0
+	vpsubw	%ymm0, %ymm2, %ymm0
+	vmovdqu	%ymm3, 448(%rcx)
+	vmovdqu	%ymm0, 480(%rcx)
+	ret
+L_poly_csubq$1:
+	vmovdqu	glob_data + 448(%rip), %ymm0
+	vmovdqu	(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, (%rcx)
+	vmovdqu	32(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 32(%rcx)
+	vmovdqu	64(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 64(%rcx)
+	vmovdqu	96(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 96(%rcx)
+	vmovdqu	128(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 128(%rcx)
+	vmovdqu	160(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 160(%rcx)
+	vmovdqu	192(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 192(%rcx)
+	vmovdqu	224(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 224(%rcx)
+	vmovdqu	256(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 256(%rcx)
+	vmovdqu	288(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 288(%rcx)
+	vmovdqu	320(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 320(%rcx)
+	vmovdqu	352(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 352(%rcx)
+	vmovdqu	384(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 384(%rcx)
+	vmovdqu	416(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 416(%rcx)
+	vmovdqu	448(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm2
+	vpaddw	%ymm1, %ymm2, %ymm1
+	vmovdqu	%ymm1, 448(%rcx)
+	vmovdqu	480(%rcx), %ymm1
+	vpsubw	%ymm0, %ymm1, %ymm1
+	vpsraw	$15, %ymm1, %ymm2
+	vpand	%ymm0, %ymm2, %ymm0
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 480(%rcx)
+	ret
+L_poly_add2$1:
+	vmovdqu	(%rcx), %ymm0
+	vmovdqu	(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, (%rcx)
+	vmovdqu	32(%rcx), %ymm0
+	vmovdqu	32(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rcx)
+	vmovdqu	64(%rcx), %ymm0
+	vmovdqu	64(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 64(%rcx)
+	vmovdqu	96(%rcx), %ymm0
+	vmovdqu	96(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 96(%rcx)
+	vmovdqu	128(%rcx), %ymm0
+	vmovdqu	128(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 128(%rcx)
+	vmovdqu	160(%rcx), %ymm0
+	vmovdqu	160(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 160(%rcx)
+	vmovdqu	192(%rcx), %ymm0
+	vmovdqu	192(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 192(%rcx)
+	vmovdqu	224(%rcx), %ymm0
+	vmovdqu	224(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 224(%rcx)
+	vmovdqu	256(%rcx), %ymm0
+	vmovdqu	256(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 256(%rcx)
+	vmovdqu	288(%rcx), %ymm0
+	vmovdqu	288(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 288(%rcx)
+	vmovdqu	320(%rcx), %ymm0
+	vmovdqu	320(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 320(%rcx)
+	vmovdqu	352(%rcx), %ymm0
+	vmovdqu	352(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 352(%rcx)
+	vmovdqu	384(%rcx), %ymm0
+	vmovdqu	384(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 384(%rcx)
+	vmovdqu	416(%rcx), %ymm0
+	vmovdqu	416(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 416(%rcx)
+	vmovdqu	448(%rcx), %ymm0
+	vmovdqu	448(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 448(%rcx)
+	vmovdqu	480(%rcx), %ymm0
+	vmovdqu	480(%rsi), %ymm1
+	vpaddw	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 480(%rcx)
+	ret
+L_nttunpack$1:
+	vmovdqu	(%rax), %ymm1
+	vmovdqu	32(%rax), %ymm3
+	vmovdqu	64(%rax), %ymm4
+	vmovdqu	96(%rax), %ymm5
+	vmovdqu	128(%rax), %ymm2
+	vmovdqu	160(%rax), %ymm6
+	vmovdqu	192(%rax), %ymm7
+	vmovdqu	224(%rax), %ymm8
+	vperm2i128	$32, %ymm2, %ymm1, %ymm0
+	vperm2i128	$49, %ymm2, %ymm1, %ymm1
+	vperm2i128	$32, %ymm6, %ymm3, %ymm2
+	vperm2i128	$49, %ymm6, %ymm3, %ymm3
+	vperm2i128	$32, %ymm7, %ymm4, %ymm6
+	vperm2i128	$49, %ymm7, %ymm4, %ymm7
+	vperm2i128	$32, %ymm8, %ymm5, %ymm9
+	vperm2i128	$49, %ymm8, %ymm5, %ymm10
+	vpunpcklqdq	%ymm6, %ymm0, %ymm4
+	vpunpckhqdq	%ymm6, %ymm0, %ymm5
+	vpunpcklqdq	%ymm7, %ymm1, %ymm6
+	vpunpckhqdq	%ymm7, %ymm1, %ymm7
+	vpunpcklqdq	%ymm9, %ymm2, %ymm0
+	vpunpckhqdq	%ymm9, %ymm2, %ymm2
+	vpunpcklqdq	%ymm10, %ymm3, %ymm8
+	vpunpckhqdq	%ymm10, %ymm3, %ymm3
+	vmovsldup	%ymm0, %ymm1
+	vpblendd	$-86, %ymm1, %ymm4, %ymm9
+	vpsrlq	$32, %ymm4, %ymm1
+	vpblendd	$-86, %ymm0, %ymm1, %ymm0
+	vmovsldup	%ymm2, %ymm1
+	vpblendd	$-86, %ymm1, %ymm5, %ymm1
+	vpsrlq	$32, %ymm5, %ymm4
+	vpblendd	$-86, %ymm2, %ymm4, %ymm2
+	vmovsldup	%ymm8, %ymm4
+	vpblendd	$-86, %ymm4, %ymm6, %ymm4
+	vpsrlq	$32, %ymm6, %ymm5
+	vpblendd	$-86, %ymm8, %ymm5, %ymm5
+	vmovsldup	%ymm3, %ymm6
+	vpblendd	$-86, %ymm6, %ymm7, %ymm6
+	vpsrlq	$32, %ymm7, %ymm7
+	vpblendd	$-86, %ymm3, %ymm7, %ymm3
+	vpslld	$16, %ymm4, %ymm7
+	vpblendw	$-86, %ymm7, %ymm9, %ymm7
+	vpsrld	$16, %ymm9, %ymm8
+	vpblendw	$-86, %ymm4, %ymm8, %ymm4
+	vpslld	$16, %ymm5, %ymm8
+	vpblendw	$-86, %ymm8, %ymm0, %ymm8
+	vpsrld	$16, %ymm0, %ymm0
+	vpblendw	$-86, %ymm5, %ymm0, %ymm0
+	vpslld	$16, %ymm6, %ymm5
+	vpblendw	$-86, %ymm5, %ymm1, %ymm5
+	vpsrld	$16, %ymm1, %ymm1
+	vpblendw	$-86, %ymm6, %ymm1, %ymm1
+	vpslld	$16, %ymm3, %ymm6
+	vpblendw	$-86, %ymm6, %ymm2, %ymm6
+	vpsrld	$16, %ymm2, %ymm2
+	vpblendw	$-86, %ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm7, (%rax)
+	vmovdqu	%ymm4, 32(%rax)
+	vmovdqu	%ymm8, 64(%rax)
+	vmovdqu	%ymm0, 96(%rax)
+	vmovdqu	%ymm5, 128(%rax)
+	vmovdqu	%ymm1, 160(%rax)
+	vmovdqu	%ymm6, 192(%rax)
+	vmovdqu	%ymm2, 224(%rax)
+	vmovdqu	256(%rax), %ymm1
+	vmovdqu	288(%rax), %ymm3
+	vmovdqu	320(%rax), %ymm4
+	vmovdqu	352(%rax), %ymm5
+	vmovdqu	384(%rax), %ymm2
+	vmovdqu	416(%rax), %ymm6
+	vmovdqu	448(%rax), %ymm7
+	vmovdqu	480(%rax), %ymm8
+	vperm2i128	$32, %ymm2, %ymm1, %ymm0
+	vperm2i128	$49, %ymm2, %ymm1, %ymm1
+	vperm2i128	$32, %ymm6, %ymm3, %ymm2
+	vperm2i128	$49, %ymm6, %ymm3, %ymm3
+	vperm2i128	$32, %ymm7, %ymm4, %ymm6
+	vperm2i128	$49, %ymm7, %ymm4, %ymm7
+	vperm2i128	$32, %ymm8, %ymm5, %ymm9
+	vperm2i128	$49, %ymm8, %ymm5, %ymm10
+	vpunpcklqdq	%ymm6, %ymm0, %ymm4
+	vpunpckhqdq	%ymm6, %ymm0, %ymm5
+	vpunpcklqdq	%ymm7, %ymm1, %ymm6
+	vpunpckhqdq	%ymm7, %ymm1, %ymm7
+	vpunpcklqdq	%ymm9, %ymm2, %ymm0
+	vpunpckhqdq	%ymm9, %ymm2, %ymm2
+	vpunpcklqdq	%ymm10, %ymm3, %ymm8
+	vpunpckhqdq	%ymm10, %ymm3, %ymm3
+	vmovsldup	%ymm0, %ymm1
+	vpblendd	$-86, %ymm1, %ymm4, %ymm9
+	vpsrlq	$32, %ymm4, %ymm1
+	vpblendd	$-86, %ymm0, %ymm1, %ymm0
+	vmovsldup	%ymm2, %ymm1
+	vpblendd	$-86, %ymm1, %ymm5, %ymm1
+	vpsrlq	$32, %ymm5, %ymm4
+	vpblendd	$-86, %ymm2, %ymm4, %ymm2
+	vmovsldup	%ymm8, %ymm4
+	vpblendd	$-86, %ymm4, %ymm6, %ymm4
+	vpsrlq	$32, %ymm6, %ymm5
+	vpblendd	$-86, %ymm8, %ymm5, %ymm5
+	vmovsldup	%ymm3, %ymm6
+	vpblendd	$-86, %ymm6, %ymm7, %ymm6
+	vpsrlq	$32, %ymm7, %ymm7
+	vpblendd	$-86, %ymm3, %ymm7, %ymm3
+	vpslld	$16, %ymm4, %ymm7
+	vpblendw	$-86, %ymm7, %ymm9, %ymm7
+	vpsrld	$16, %ymm9, %ymm8
+	vpblendw	$-86, %ymm4, %ymm8, %ymm4
+	vpslld	$16, %ymm5, %ymm8
+	vpblendw	$-86, %ymm8, %ymm0, %ymm8
+	vpsrld	$16, %ymm0, %ymm0
+	vpblendw	$-86, %ymm5, %ymm0, %ymm0
+	vpslld	$16, %ymm6, %ymm5
+	vpblendw	$-86, %ymm5, %ymm1, %ymm5
+	vpsrld	$16, %ymm1, %ymm1
+	vpblendw	$-86, %ymm6, %ymm1, %ymm1
+	vpslld	$16, %ymm3, %ymm6
+	vpblendw	$-86, %ymm6, %ymm2, %ymm6
+	vpsrld	$16, %ymm2, %ymm2
+	vpblendw	$-86, %ymm3, %ymm2, %ymm2
+	vmovdqu	%ymm7, 256(%rax)
+	vmovdqu	%ymm4, 288(%rax)
+	vmovdqu	%ymm8, 320(%rax)
+	vmovdqu	%ymm0, 352(%rax)
+	vmovdqu	%ymm5, 384(%rax)
+	vmovdqu	%ymm1, 416(%rax)
+	vmovdqu	%ymm6, 448(%rax)
+	vmovdqu	%ymm2, 480(%rax)
+	ret
+L_shake256_absorb4x_33$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, (%rax)
+	vmovdqu	%ymm0, 32(%rax)
+	vmovdqu	%ymm0, 64(%rax)
+	vmovdqu	%ymm0, 96(%rax)
+	vmovdqu	%ymm0, 128(%rax)
+	vmovdqu	%ymm0, 160(%rax)
+	vmovdqu	%ymm0, 192(%rax)
+	vmovdqu	%ymm0, 224(%rax)
+	vmovdqu	%ymm0, 256(%rax)
+	vmovdqu	%ymm0, 288(%rax)
+	vmovdqu	%ymm0, 320(%rax)
+	vmovdqu	%ymm0, 352(%rax)
+	vmovdqu	%ymm0, 384(%rax)
+	vmovdqu	%ymm0, 416(%rax)
+	vmovdqu	%ymm0, 448(%rax)
+	vmovdqu	%ymm0, 480(%rax)
+	vmovdqu	%ymm0, 512(%rax)
+	vmovdqu	%ymm0, 544(%rax)
+	vmovdqu	%ymm0, 576(%rax)
+	vmovdqu	%ymm0, 608(%rax)
+	vmovdqu	%ymm0, 640(%rax)
+	vmovdqu	%ymm0, 672(%rax)
+	vmovdqu	%ymm0, 704(%rax)
+	vmovdqu	%ymm0, 736(%rax)
+	vmovdqu	%ymm0, 768(%rax)
+	movq	(%rcx), %rbx
+	xorq	%rbx, (%rax)
+	movq	(%rdx), %rbx
+	xorq	%rbx, 8(%rax)
+	movq	(%rsi), %rbx
+	xorq	%rbx, 16(%rax)
+	movq	(%r11), %rbx
+	xorq	%rbx, 24(%rax)
+	movq	8(%rcx), %rbx
+	xorq	%rbx, 32(%rax)
+	movq	8(%rdx), %rbx
+	xorq	%rbx, 40(%rax)
+	movq	8(%rsi), %rbx
+	xorq	%rbx, 48(%rax)
+	movq	8(%r11), %rbx
+	xorq	%rbx, 56(%rax)
+	movq	16(%rcx), %rbx
+	xorq	%rbx, 64(%rax)
+	movq	16(%rdx), %rbx
+	xorq	%rbx, 72(%rax)
+	movq	16(%rsi), %rbx
+	xorq	%rbx, 80(%rax)
+	movq	16(%r11), %rbx
+	xorq	%rbx, 88(%rax)
+	movq	24(%rcx), %rbx
+	xorq	%rbx, 96(%rax)
+	movq	24(%rdx), %rbx
+	xorq	%rbx, 104(%rax)
+	movq	24(%rsi), %rbx
+	xorq	%rbx, 112(%rax)
+	movq	24(%r11), %rbx
+	xorq	%rbx, 120(%rax)
+	movb	32(%rcx), %cl
+	xorb	%cl, 128(%rax)
+	xorb	$31, 129(%rax)
+	movb	32(%rdx), %cl
+	xorb	%cl, 136(%rax)
+	xorb	$31, 137(%rax)
+	movb	32(%rsi), %cl
+	xorb	%cl, 144(%rax)
+	xorb	$31, 145(%rax)
+	movb	32(%r11), %cl
+	xorb	%cl, 152(%rax)
+	xorb	$31, 153(%rax)
+	vmovdqu	glob_data + 2080(%rip), %ymm0
+	vmovdqu	512(%rax), %ymm1
+	vpxor	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 512(%rax)
+	ret
+L_shake128_absorb4x_34$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, (%rax)
+	vmovdqu	%ymm0, 32(%rax)
+	vmovdqu	%ymm0, 64(%rax)
+	vmovdqu	%ymm0, 96(%rax)
+	vmovdqu	%ymm0, 128(%rax)
+	vmovdqu	%ymm0, 160(%rax)
+	vmovdqu	%ymm0, 192(%rax)
+	vmovdqu	%ymm0, 224(%rax)
+	vmovdqu	%ymm0, 256(%rax)
+	vmovdqu	%ymm0, 288(%rax)
+	vmovdqu	%ymm0, 320(%rax)
+	vmovdqu	%ymm0, 352(%rax)
+	vmovdqu	%ymm0, 384(%rax)
+	vmovdqu	%ymm0, 416(%rax)
+	vmovdqu	%ymm0, 448(%rax)
+	vmovdqu	%ymm0, 480(%rax)
+	vmovdqu	%ymm0, 512(%rax)
+	vmovdqu	%ymm0, 544(%rax)
+	vmovdqu	%ymm0, 576(%rax)
+	vmovdqu	%ymm0, 608(%rax)
+	vmovdqu	%ymm0, 640(%rax)
+	vmovdqu	%ymm0, 672(%rax)
+	vmovdqu	%ymm0, 704(%rax)
+	vmovdqu	%ymm0, 736(%rax)
+	vmovdqu	%ymm0, 768(%rax)
+	movq	(%rcx), %r8
+	xorq	%r8, (%rax)
+	movq	(%rdx), %r8
+	xorq	%r8, 8(%rax)
+	movq	(%rsi), %r8
+	xorq	%r8, 16(%rax)
+	movq	(%rdi), %r8
+	xorq	%r8, 24(%rax)
+	movq	8(%rcx), %r8
+	xorq	%r8, 32(%rax)
+	movq	8(%rdx), %r8
+	xorq	%r8, 40(%rax)
+	movq	8(%rsi), %r8
+	xorq	%r8, 48(%rax)
+	movq	8(%rdi), %r8
+	xorq	%r8, 56(%rax)
+	movq	16(%rcx), %r8
+	xorq	%r8, 64(%rax)
+	movq	16(%rdx), %r8
+	xorq	%r8, 72(%rax)
+	movq	16(%rsi), %r8
+	xorq	%r8, 80(%rax)
+	movq	16(%rdi), %r8
+	xorq	%r8, 88(%rax)
+	movq	24(%rcx), %r8
+	xorq	%r8, 96(%rax)
+	movq	24(%rdx), %r8
+	xorq	%r8, 104(%rax)
+	movq	24(%rsi), %r8
+	xorq	%r8, 112(%rax)
+	movq	24(%rdi), %r8
+	xorq	%r8, 120(%rax)
+	movw	32(%rcx), %cx
+	xorw	%cx, 128(%rax)
+	xorb	$31, 130(%rax)
+	movw	32(%rdx), %cx
+	xorw	%cx, 136(%rax)
+	xorb	$31, 138(%rax)
+	movw	32(%rsi), %cx
+	xorw	%cx, 144(%rax)
+	xorb	$31, 146(%rax)
+	movw	32(%rdi), %cx
+	xorw	%cx, 152(%rax)
+	xorb	$31, 154(%rax)
+	vmovdqu	glob_data + 2080(%rip), %ymm0
+	vmovdqu	640(%rax), %ymm1
+	vpxor	%ymm1, %ymm0, %ymm0
+	vmovdqu	%ymm0, 640(%rax)
+	ret
+L_keccakf1600_4x_avx2$1:
+	leaq	32(%rsp), %rcx
+	leaq	glob_data + 2176(%rip), %rdx
+	vmovdqu	glob_data + 2112(%rip), %ymm0
+	vmovdqu	glob_data + 2144(%rip), %ymm1
+	movq	$0, %rsi
+L_keccakf1600_4x_avx2$2:
+	vmovdqu	(%rdx,%rsi), %ymm2
+	vmovdqu	(%rax), %ymm3
+	vmovdqu	32(%rax), %ymm4
+	vmovdqu	64(%rax), %ymm5
+	vmovdqu	96(%rax), %ymm6
+	vmovdqu	128(%rax), %ymm7
+	vpxor	160(%rax), %ymm3, %ymm3
+	vpxor	192(%rax), %ymm4, %ymm4
+	vpxor	224(%rax), %ymm5, %ymm5
+	vpxor	256(%rax), %ymm6, %ymm6
+	vpxor	288(%rax), %ymm7, %ymm7
+	vpxor	320(%rax), %ymm3, %ymm3
+	vpxor	352(%rax), %ymm4, %ymm4
+	vpxor	384(%rax), %ymm5, %ymm5
+	vpxor	416(%rax), %ymm6, %ymm6
+	vpxor	448(%rax), %ymm7, %ymm7
+	vpxor	480(%rax), %ymm3, %ymm3
+	vpxor	512(%rax), %ymm4, %ymm4
+	vpxor	544(%rax), %ymm5, %ymm8
+	vpxor	576(%rax), %ymm6, %ymm9
+	vpxor	608(%rax), %ymm7, %ymm10
+	vpxor	640(%rax), %ymm3, %ymm7
+	vpxor	672(%rax), %ymm4, %ymm5
+	vpxor	704(%rax), %ymm8, %ymm6
+	vpxor	736(%rax), %ymm9, %ymm8
+	vpxor	768(%rax), %ymm10, %ymm9
+	vmovdqu	%ymm5, %ymm3
+	vpsllq	$1, %ymm3, %ymm4
+	vpsrlq	$63, %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm3, %ymm3
+	vmovdqu	%ymm6, %ymm4
+	vpsllq	$1, %ymm4, %ymm10
+	vpsrlq	$63, %ymm4, %ymm4
+	vpor	%ymm10, %ymm4, %ymm4
+	vpxor	%ymm7, %ymm4, %ymm4
+	vmovdqu	%ymm8, %ymm10
+	vpsllq	$1, %ymm10, %ymm11
+	vpsrlq	$63, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vpxor	%ymm5, %ymm10, %ymm5
+	vpsllq	$1, %ymm9, %ymm10
+	vpsrlq	$63, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vpxor	%ymm6, %ymm9, %ymm6
+	vpsllq	$1, %ymm7, %ymm9
+	vpsrlq	$63, %ymm7, %ymm7
+	vpor	%ymm9, %ymm7, %ymm7
+	vpxor	%ymm8, %ymm7, %ymm7
+	vmovdqu	(%rax), %ymm8
+	vpxor	%ymm3, %ymm8, %ymm8
+	vmovdqu	192(%rax), %ymm9
+	vpxor	%ymm4, %ymm9, %ymm9
+	vpsllq	$44, %ymm9, %ymm10
+	vpsrlq	$20, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	384(%rax), %ymm10
+	vpxor	%ymm5, %ymm10, %ymm10
+	vpsllq	$43, %ymm10, %ymm11
+	vpsrlq	$21, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vmovdqu	576(%rax), %ymm11
+	vpxor	%ymm6, %ymm11, %ymm11
+	vpsllq	$21, %ymm11, %ymm12
+	vpsrlq	$43, %ymm11, %ymm11
+	vpor	%ymm12, %ymm11, %ymm11
+	vmovdqu	768(%rax), %ymm12
+	vpxor	%ymm7, %ymm12, %ymm12
+	vpsllq	$14, %ymm12, %ymm13
+	vpsrlq	$50, %ymm12, %ymm12
+	vpor	%ymm13, %ymm12, %ymm12
+	vpandn	%ymm10, %ymm9, %ymm13
+	vpxor	%ymm8, %ymm13, %ymm13
+	vpxor	%ymm2, %ymm13, %ymm2
+	vmovdqu	%ymm2, (%rcx)
+	vpandn	%ymm11, %ymm10, %ymm2
+	vpxor	%ymm9, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rcx)
+	vpandn	%ymm12, %ymm11, %ymm2
+	vpxor	%ymm10, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rcx)
+	vpandn	%ymm8, %ymm12, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rcx)
+	vpandn	%ymm9, %ymm8, %ymm2
+	vpxor	%ymm12, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rcx)
+	vmovdqu	96(%rax), %ymm2
+	vpxor	%ymm6, %ymm2, %ymm2
+	vpsllq	$28, %ymm2, %ymm8
+	vpsrlq	$36, %ymm2, %ymm2
+	vpor	%ymm8, %ymm2, %ymm2
+	vmovdqu	288(%rax), %ymm8
+	vpxor	%ymm7, %ymm8, %ymm8
+	vpsllq	$20, %ymm8, %ymm9
+	vpsrlq	$44, %ymm8, %ymm8
+	vpor	%ymm9, %ymm8, %ymm8
+	vmovdqu	320(%rax), %ymm9
+	vpxor	%ymm3, %ymm9, %ymm9
+	vpsllq	$3, %ymm9, %ymm10
+	vpsrlq	$61, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	512(%rax), %ymm10
+	vpxor	%ymm4, %ymm10, %ymm10
+	vpsllq	$45, %ymm10, %ymm11
+	vpsrlq	$19, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vmovdqu	704(%rax), %ymm11
+	vpxor	%ymm5, %ymm11, %ymm11
+	vpsllq	$61, %ymm11, %ymm12
+	vpsrlq	$3, %ymm11, %ymm11
+	vpor	%ymm12, %ymm11, %ymm11
+	vpandn	%ymm9, %ymm8, %ymm12
+	vpxor	%ymm2, %ymm12, %ymm12
+	vmovdqu	%ymm12, 160(%rcx)
+	vpandn	%ymm10, %ymm9, %ymm12
+	vpxor	%ymm8, %ymm12, %ymm12
+	vmovdqu	%ymm12, 192(%rcx)
+	vpandn	%ymm11, %ymm10, %ymm12
+	vpxor	%ymm9, %ymm12, %ymm9
+	vmovdqu	%ymm9, 224(%rcx)
+	vpandn	%ymm2, %ymm11, %ymm9
+	vpxor	%ymm10, %ymm9, %ymm9
+	vmovdqu	%ymm9, 256(%rcx)
+	vpandn	%ymm8, %ymm2, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rcx)
+	vmovdqu	32(%rax), %ymm2
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpsllq	$1, %ymm2, %ymm8
+	vpsrlq	$63, %ymm2, %ymm2
+	vpor	%ymm8, %ymm2, %ymm2
+	vmovdqu	224(%rax), %ymm8
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpsllq	$6, %ymm8, %ymm9
+	vpsrlq	$58, %ymm8, %ymm8
+	vpor	%ymm9, %ymm8, %ymm8
+	vmovdqu	416(%rax), %ymm9
+	vpxor	%ymm6, %ymm9, %ymm9
+	vpsllq	$25, %ymm9, %ymm10
+	vpsrlq	$39, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	608(%rax), %ymm10
+	vpxor	%ymm7, %ymm10, %ymm10
+	vpshufb	%ymm0, %ymm10, %ymm10
+	vmovdqu	640(%rax), %ymm11
+	vpxor	%ymm3, %ymm11, %ymm11
+	vpsllq	$18, %ymm11, %ymm12
+	vpsrlq	$46, %ymm11, %ymm11
+	vpor	%ymm12, %ymm11, %ymm11
+	vpandn	%ymm9, %ymm8, %ymm12
+	vpxor	%ymm2, %ymm12, %ymm12
+	vmovdqu	%ymm12, 320(%rcx)
+	vpandn	%ymm10, %ymm9, %ymm12
+	vpxor	%ymm8, %ymm12, %ymm12
+	vmovdqu	%ymm12, 352(%rcx)
+	vpandn	%ymm11, %ymm10, %ymm12
+	vpxor	%ymm9, %ymm12, %ymm9
+	vmovdqu	%ymm9, 384(%rcx)
+	vpandn	%ymm2, %ymm11, %ymm9
+	vpxor	%ymm10, %ymm9, %ymm9
+	vmovdqu	%ymm9, 416(%rcx)
+	vpandn	%ymm8, %ymm2, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rcx)
+	vmovdqu	128(%rax), %ymm2
+	vpxor	%ymm7, %ymm2, %ymm2
+	vpsllq	$27, %ymm2, %ymm8
+	vpsrlq	$37, %ymm2, %ymm2
+	vpor	%ymm8, %ymm2, %ymm2
+	vmovdqu	160(%rax), %ymm8
+	vpxor	%ymm3, %ymm8, %ymm8
+	vpsllq	$36, %ymm8, %ymm9
+	vpsrlq	$28, %ymm8, %ymm8
+	vpor	%ymm9, %ymm8, %ymm8
+	vmovdqu	352(%rax), %ymm9
+	vpxor	%ymm4, %ymm9, %ymm9
+	vpsllq	$10, %ymm9, %ymm10
+	vpsrlq	$54, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	544(%rax), %ymm10
+	vpxor	%ymm5, %ymm10, %ymm10
+	vpsllq	$15, %ymm10, %ymm11
+	vpsrlq	$49, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vmovdqu	736(%rax), %ymm11
+	vpxor	%ymm6, %ymm11, %ymm11
+	vpshufb	%ymm1, %ymm11, %ymm11
+	vpandn	%ymm9, %ymm8, %ymm12
+	vpxor	%ymm2, %ymm12, %ymm12
+	vmovdqu	%ymm12, 480(%rcx)
+	vpandn	%ymm10, %ymm9, %ymm12
+	vpxor	%ymm8, %ymm12, %ymm12
+	vmovdqu	%ymm12, 512(%rcx)
+	vpandn	%ymm11, %ymm10, %ymm12
+	vpxor	%ymm9, %ymm12, %ymm9
+	vmovdqu	%ymm9, 544(%rcx)
+	vpandn	%ymm2, %ymm11, %ymm9
+	vpxor	%ymm10, %ymm9, %ymm9
+	vmovdqu	%ymm9, 576(%rcx)
+	vpandn	%ymm8, %ymm2, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 608(%rcx)
+	vmovdqu	64(%rax), %ymm2
+	vpxor	%ymm5, %ymm2, %ymm2
+	vpsllq	$62, %ymm2, %ymm5
+	vpsrlq	$2, %ymm2, %ymm2
+	vpor	%ymm5, %ymm2, %ymm2
+	vmovdqu	256(%rax), %ymm5
+	vpxor	%ymm6, %ymm5, %ymm5
+	vpsllq	$55, %ymm5, %ymm6
+	vpsrlq	$9, %ymm5, %ymm5
+	vpor	%ymm6, %ymm5, %ymm5
+	vmovdqu	448(%rax), %ymm6
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpsllq	$39, %ymm6, %ymm7
+	vpsrlq	$25, %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm6
+	vmovdqu	480(%rax), %ymm7
+	vpxor	%ymm3, %ymm7, %ymm3
+	vpsllq	$41, %ymm3, %ymm7
+	vpsrlq	$23, %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm3
+	vmovdqu	672(%rax), %ymm7
+	vpxor	%ymm4, %ymm7, %ymm4
+	vpsllq	$2, %ymm4, %ymm7
+	vpsrlq	$62, %ymm4, %ymm4
+	vpor	%ymm7, %ymm4, %ymm4
+	vpandn	%ymm6, %ymm5, %ymm7
+	vpxor	%ymm2, %ymm7, %ymm7
+	vmovdqu	%ymm7, 640(%rcx)
+	vpandn	%ymm3, %ymm6, %ymm7
+	vpxor	%ymm5, %ymm7, %ymm7
+	vmovdqu	%ymm7, 672(%rcx)
+	vpandn	%ymm4, %ymm3, %ymm7
+	vpxor	%ymm6, %ymm7, %ymm6
+	vmovdqu	%ymm6, 704(%rcx)
+	vpandn	%ymm2, %ymm4, %ymm6
+	vpxor	%ymm3, %ymm6, %ymm3
+	vmovdqu	%ymm3, 736(%rcx)
+	vpandn	%ymm5, %ymm2, %ymm2
+	vpxor	%ymm4, %ymm2, %ymm2
+	vmovdqu	%ymm2, 768(%rcx)
+	vmovdqu	32(%rdx,%rsi), %ymm2
+	vmovdqu	(%rcx), %ymm3
+	vmovdqu	32(%rcx), %ymm4
+	vmovdqu	64(%rcx), %ymm5
+	vmovdqu	96(%rcx), %ymm6
+	vmovdqu	128(%rcx), %ymm7
+	vpxor	160(%rcx), %ymm3, %ymm3
+	vpxor	192(%rcx), %ymm4, %ymm4
+	vpxor	224(%rcx), %ymm5, %ymm5
+	vpxor	256(%rcx), %ymm6, %ymm6
+	vpxor	288(%rcx), %ymm7, %ymm7
+	vpxor	320(%rcx), %ymm3, %ymm3
+	vpxor	352(%rcx), %ymm4, %ymm4
+	vpxor	384(%rcx), %ymm5, %ymm5
+	vpxor	416(%rcx), %ymm6, %ymm6
+	vpxor	448(%rcx), %ymm7, %ymm7
+	vpxor	480(%rcx), %ymm3, %ymm3
+	vpxor	512(%rcx), %ymm4, %ymm4
+	vpxor	544(%rcx), %ymm5, %ymm8
+	vpxor	576(%rcx), %ymm6, %ymm9
+	vpxor	608(%rcx), %ymm7, %ymm10
+	vpxor	640(%rcx), %ymm3, %ymm7
+	vpxor	672(%rcx), %ymm4, %ymm5
+	vpxor	704(%rcx), %ymm8, %ymm6
+	vpxor	736(%rcx), %ymm9, %ymm8
+	vpxor	768(%rcx), %ymm10, %ymm9
+	vmovdqu	%ymm5, %ymm3
+	vpsllq	$1, %ymm3, %ymm4
+	vpsrlq	$63, %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm3, %ymm3
+	vmovdqu	%ymm6, %ymm4
+	vpsllq	$1, %ymm4, %ymm10
+	vpsrlq	$63, %ymm4, %ymm4
+	vpor	%ymm10, %ymm4, %ymm4
+	vpxor	%ymm7, %ymm4, %ymm4
+	vmovdqu	%ymm8, %ymm10
+	vpsllq	$1, %ymm10, %ymm11
+	vpsrlq	$63, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vpxor	%ymm5, %ymm10, %ymm5
+	vpsllq	$1, %ymm9, %ymm10
+	vpsrlq	$63, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vpxor	%ymm6, %ymm9, %ymm6
+	vpsllq	$1, %ymm7, %ymm9
+	vpsrlq	$63, %ymm7, %ymm7
+	vpor	%ymm9, %ymm7, %ymm7
+	vpxor	%ymm8, %ymm7, %ymm7
+	vmovdqu	(%rcx), %ymm8
+	vpxor	%ymm3, %ymm8, %ymm8
+	vmovdqu	192(%rcx), %ymm9
+	vpxor	%ymm4, %ymm9, %ymm9
+	vpsllq	$44, %ymm9, %ymm10
+	vpsrlq	$20, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	384(%rcx), %ymm10
+	vpxor	%ymm5, %ymm10, %ymm10
+	vpsllq	$43, %ymm10, %ymm11
+	vpsrlq	$21, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vmovdqu	576(%rcx), %ymm11
+	vpxor	%ymm6, %ymm11, %ymm11
+	vpsllq	$21, %ymm11, %ymm12
+	vpsrlq	$43, %ymm11, %ymm11
+	vpor	%ymm12, %ymm11, %ymm11
+	vmovdqu	768(%rcx), %ymm12
+	vpxor	%ymm7, %ymm12, %ymm12
+	vpsllq	$14, %ymm12, %ymm13
+	vpsrlq	$50, %ymm12, %ymm12
+	vpor	%ymm13, %ymm12, %ymm12
+	vpandn	%ymm10, %ymm9, %ymm13
+	vpxor	%ymm8, %ymm13, %ymm13
+	vpxor	%ymm2, %ymm13, %ymm2
+	vmovdqu	%ymm2, (%rax)
+	vpandn	%ymm11, %ymm10, %ymm2
+	vpxor	%ymm9, %ymm2, %ymm2
+	vmovdqu	%ymm2, 32(%rax)
+	vpandn	%ymm12, %ymm11, %ymm2
+	vpxor	%ymm10, %ymm2, %ymm2
+	vmovdqu	%ymm2, 64(%rax)
+	vpandn	%ymm8, %ymm12, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 96(%rax)
+	vpandn	%ymm9, %ymm8, %ymm2
+	vpxor	%ymm12, %ymm2, %ymm2
+	vmovdqu	%ymm2, 128(%rax)
+	vmovdqu	96(%rcx), %ymm2
+	vpxor	%ymm6, %ymm2, %ymm2
+	vpsllq	$28, %ymm2, %ymm8
+	vpsrlq	$36, %ymm2, %ymm2
+	vpor	%ymm8, %ymm2, %ymm2
+	vmovdqu	288(%rcx), %ymm8
+	vpxor	%ymm7, %ymm8, %ymm8
+	vpsllq	$20, %ymm8, %ymm9
+	vpsrlq	$44, %ymm8, %ymm8
+	vpor	%ymm9, %ymm8, %ymm8
+	vmovdqu	320(%rcx), %ymm9
+	vpxor	%ymm3, %ymm9, %ymm9
+	vpsllq	$3, %ymm9, %ymm10
+	vpsrlq	$61, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	512(%rcx), %ymm10
+	vpxor	%ymm4, %ymm10, %ymm10
+	vpsllq	$45, %ymm10, %ymm11
+	vpsrlq	$19, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vmovdqu	704(%rcx), %ymm11
+	vpxor	%ymm5, %ymm11, %ymm11
+	vpsllq	$61, %ymm11, %ymm12
+	vpsrlq	$3, %ymm11, %ymm11
+	vpor	%ymm12, %ymm11, %ymm11
+	vpandn	%ymm9, %ymm8, %ymm12
+	vpxor	%ymm2, %ymm12, %ymm12
+	vmovdqu	%ymm12, 160(%rax)
+	vpandn	%ymm10, %ymm9, %ymm12
+	vpxor	%ymm8, %ymm12, %ymm12
+	vmovdqu	%ymm12, 192(%rax)
+	vpandn	%ymm11, %ymm10, %ymm12
+	vpxor	%ymm9, %ymm12, %ymm9
+	vmovdqu	%ymm9, 224(%rax)
+	vpandn	%ymm2, %ymm11, %ymm9
+	vpxor	%ymm10, %ymm9, %ymm9
+	vmovdqu	%ymm9, 256(%rax)
+	vpandn	%ymm8, %ymm2, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 288(%rax)
+	vmovdqu	32(%rcx), %ymm2
+	vpxor	%ymm4, %ymm2, %ymm2
+	vpsllq	$1, %ymm2, %ymm8
+	vpsrlq	$63, %ymm2, %ymm2
+	vpor	%ymm8, %ymm2, %ymm2
+	vmovdqu	224(%rcx), %ymm8
+	vpxor	%ymm5, %ymm8, %ymm8
+	vpsllq	$6, %ymm8, %ymm9
+	vpsrlq	$58, %ymm8, %ymm8
+	vpor	%ymm9, %ymm8, %ymm8
+	vmovdqu	416(%rcx), %ymm9
+	vpxor	%ymm6, %ymm9, %ymm9
+	vpsllq	$25, %ymm9, %ymm10
+	vpsrlq	$39, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	608(%rcx), %ymm10
+	vpxor	%ymm7, %ymm10, %ymm10
+	vpshufb	%ymm0, %ymm10, %ymm10
+	vmovdqu	640(%rcx), %ymm11
+	vpxor	%ymm3, %ymm11, %ymm11
+	vpsllq	$18, %ymm11, %ymm12
+	vpsrlq	$46, %ymm11, %ymm11
+	vpor	%ymm12, %ymm11, %ymm11
+	vpandn	%ymm9, %ymm8, %ymm12
+	vpxor	%ymm2, %ymm12, %ymm12
+	vmovdqu	%ymm12, 320(%rax)
+	vpandn	%ymm10, %ymm9, %ymm12
+	vpxor	%ymm8, %ymm12, %ymm12
+	vmovdqu	%ymm12, 352(%rax)
+	vpandn	%ymm11, %ymm10, %ymm12
+	vpxor	%ymm9, %ymm12, %ymm9
+	vmovdqu	%ymm9, 384(%rax)
+	vpandn	%ymm2, %ymm11, %ymm9
+	vpxor	%ymm10, %ymm9, %ymm9
+	vmovdqu	%ymm9, 416(%rax)
+	vpandn	%ymm8, %ymm2, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 448(%rax)
+	vmovdqu	128(%rcx), %ymm2
+	vpxor	%ymm7, %ymm2, %ymm2
+	vpsllq	$27, %ymm2, %ymm8
+	vpsrlq	$37, %ymm2, %ymm2
+	vpor	%ymm8, %ymm2, %ymm2
+	vmovdqu	160(%rcx), %ymm8
+	vpxor	%ymm3, %ymm8, %ymm8
+	vpsllq	$36, %ymm8, %ymm9
+	vpsrlq	$28, %ymm8, %ymm8
+	vpor	%ymm9, %ymm8, %ymm8
+	vmovdqu	352(%rcx), %ymm9
+	vpxor	%ymm4, %ymm9, %ymm9
+	vpsllq	$10, %ymm9, %ymm10
+	vpsrlq	$54, %ymm9, %ymm9
+	vpor	%ymm10, %ymm9, %ymm9
+	vmovdqu	544(%rcx), %ymm10
+	vpxor	%ymm5, %ymm10, %ymm10
+	vpsllq	$15, %ymm10, %ymm11
+	vpsrlq	$49, %ymm10, %ymm10
+	vpor	%ymm11, %ymm10, %ymm10
+	vmovdqu	736(%rcx), %ymm11
+	vpxor	%ymm6, %ymm11, %ymm11
+	vpshufb	%ymm1, %ymm11, %ymm11
+	vpandn	%ymm9, %ymm8, %ymm12
+	vpxor	%ymm2, %ymm12, %ymm12
+	vmovdqu	%ymm12, 480(%rax)
+	vpandn	%ymm10, %ymm9, %ymm12
+	vpxor	%ymm8, %ymm12, %ymm12
+	vmovdqu	%ymm12, 512(%rax)
+	vpandn	%ymm11, %ymm10, %ymm12
+	vpxor	%ymm9, %ymm12, %ymm9
+	vmovdqu	%ymm9, 544(%rax)
+	vpandn	%ymm2, %ymm11, %ymm9
+	vpxor	%ymm10, %ymm9, %ymm9
+	vmovdqu	%ymm9, 576(%rax)
+	vpandn	%ymm8, %ymm2, %ymm2
+	vpxor	%ymm11, %ymm2, %ymm2
+	vmovdqu	%ymm2, 608(%rax)
+	vmovdqu	64(%rcx), %ymm2
+	vpxor	%ymm5, %ymm2, %ymm2
+	vpsllq	$62, %ymm2, %ymm5
+	vpsrlq	$2, %ymm2, %ymm2
+	vpor	%ymm5, %ymm2, %ymm2
+	vmovdqu	256(%rcx), %ymm5
+	vpxor	%ymm6, %ymm5, %ymm5
+	vpsllq	$55, %ymm5, %ymm6
+	vpsrlq	$9, %ymm5, %ymm5
+	vpor	%ymm6, %ymm5, %ymm5
+	vmovdqu	448(%rcx), %ymm6
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpsllq	$39, %ymm6, %ymm7
+	vpsrlq	$25, %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm6
+	vmovdqu	480(%rcx), %ymm7
+	vpxor	%ymm3, %ymm7, %ymm3
+	vpsllq	$41, %ymm3, %ymm7
+	vpsrlq	$23, %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm3
+	vmovdqu	672(%rcx), %ymm7
+	vpxor	%ymm4, %ymm7, %ymm4
+	vpsllq	$2, %ymm4, %ymm7
+	vpsrlq	$62, %ymm4, %ymm4
+	vpor	%ymm7, %ymm4, %ymm4
+	vpandn	%ymm6, %ymm5, %ymm7
+	vpxor	%ymm2, %ymm7, %ymm7
+	vmovdqu	%ymm7, 640(%rax)
+	vpandn	%ymm3, %ymm6, %ymm7
+	vpxor	%ymm5, %ymm7, %ymm7
+	vmovdqu	%ymm7, 672(%rax)
+	vpandn	%ymm4, %ymm3, %ymm7
+	vpxor	%ymm6, %ymm7, %ymm6
+	vmovdqu	%ymm6, 704(%rax)
+	vpandn	%ymm2, %ymm4, %ymm6
+	vpxor	%ymm3, %ymm6, %ymm3
+	vmovdqu	%ymm3, 736(%rax)
+	vpandn	%ymm5, %ymm2, %ymm2
+	vpxor	%ymm4, %ymm2, %ymm2
+	vmovdqu	%ymm2, 768(%rax)
+	addq	$64, %rsi
+	cmpq	$768, %rsi
+	jb  	L_keccakf1600_4x_avx2$2
+	ret
+L_sha3_512_32$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm0, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vpbroadcastq	(%rcx), %ymm6
+	movq	8(%rcx), %rdx
+	movq	glob_data + 6208(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	16(%rcx), %rdx
+	movq	glob_data + 6216(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	24(%rcx), %rcx
+	movq	glob_data + 6224(%rip), %rdx
+	movq	%rcx, 32(%rsp,%rdx,8)
+	movq	glob_data + 6232(%rip), %rcx
+	shlq	$3, %rcx
+	movb	$6, 32(%rsp,%rcx)
+	movq	glob_data + 6264(%rip), %rcx
+	shlq	$3, %rcx
+	movq	$71, %rdx
+	andq	$7, %rdx
+	addq	%rdx, %rcx
+	xorb	$-128, 32(%rsp,%rcx)
+	vmovdqu	64(%rsp), %ymm0
+	vmovdqu	96(%rsp), %ymm1
+	vmovdqu	128(%rsp), %ymm2
+	vmovdqu	160(%rsp), %ymm3
+	vmovdqu	192(%rsp), %ymm4
+	vmovdqu	224(%rsp), %ymm5
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+L_sha3_512_32$2:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm4, %ymm7
+	vpxor	%ymm5, %ymm3, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm6, %ymm6
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	96(%rsi), %ymm3, %ymm7
+	vpsrlvq	96(%rdi), %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm10
+	vpxor	%ymm9, %ymm4, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm4
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm4
+	vpxor	%ymm9, %ymm5, %ymm5
+	vpermq	$-115, %ymm1, %ymm3
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm5, %ymm1
+	vpsrlvq	160(%rdi), %ymm5, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm4, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm4
+	vpblendd	$12, %ymm7, %ymm3, %ymm5
+	vpblendd	$12, %ymm3, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm4, %ymm4
+	vpblendd	$48, %ymm10, %ymm5, %ymm5
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm4, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm5, %ymm5
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm3, %ymm12
+	vpxor	%ymm3, %ymm1, %ymm4
+	vpblendd	$48, %ymm3, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm6, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm3, %ymm13, %ymm13
+	vpblendd	$-64, %ymm3, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm4, %ymm2
+	vpermq	$-115, %ymm5, %ymm4
+	vpermq	$114, %ymm12, %ymm5
+	vpblendd	$12, %ymm3, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm3, %ymm9, %ymm3
+	vpandn	%ymm3, %ymm0, %ymm3
+	vpxor	%ymm13, %ymm6, %ymm6
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm3, %ymm3
+	vpxor	(%rcx,%rdx), %ymm6, %ymm6
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L_sha3_512_32$2
+	vmovdqu	%ymm6, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm1, 96(%rsp)
+	vmovdqu	%ymm2, 128(%rsp)
+	vmovdqu	%ymm3, 160(%rsp)
+	vmovdqu	%ymm4, 192(%rsp)
+	vmovdqu	%ymm5, 224(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	ret
+L_sha3_512_64$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm0, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vpbroadcastq	(%rcx), %ymm6
+	movq	8(%rcx), %rdx
+	movq	glob_data + 6208(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	16(%rcx), %rdx
+	movq	glob_data + 6216(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	24(%rcx), %rdx
+	movq	glob_data + 6224(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	32(%rcx), %rdx
+	movq	glob_data + 6232(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	40(%rcx), %rdx
+	movq	glob_data + 6240(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	48(%rcx), %rdx
+	movq	glob_data + 6248(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	56(%rcx), %rcx
+	movq	glob_data + 6256(%rip), %rdx
+	movq	%rcx, 32(%rsp,%rdx,8)
+	movq	glob_data + 6264(%rip), %rcx
+	shlq	$3, %rcx
+	movb	$6, 32(%rsp,%rcx)
+	movq	glob_data + 6264(%rip), %rcx
+	shlq	$3, %rcx
+	movq	$71, %rdx
+	andq	$7, %rdx
+	addq	%rdx, %rcx
+	xorb	$-128, 32(%rsp,%rcx)
+	vmovdqu	64(%rsp), %ymm0
+	vmovdqu	96(%rsp), %ymm1
+	vmovdqu	128(%rsp), %ymm2
+	vmovdqu	160(%rsp), %ymm3
+	vmovdqu	192(%rsp), %ymm4
+	vmovdqu	224(%rsp), %ymm5
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+L_sha3_512_64$2:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm4, %ymm7
+	vpxor	%ymm5, %ymm3, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm6, %ymm6
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	96(%rsi), %ymm3, %ymm7
+	vpsrlvq	96(%rdi), %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm10
+	vpxor	%ymm9, %ymm4, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm4
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm4
+	vpxor	%ymm9, %ymm5, %ymm5
+	vpermq	$-115, %ymm1, %ymm3
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm5, %ymm1
+	vpsrlvq	160(%rdi), %ymm5, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm4, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm4
+	vpblendd	$12, %ymm7, %ymm3, %ymm5
+	vpblendd	$12, %ymm3, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm4, %ymm4
+	vpblendd	$48, %ymm10, %ymm5, %ymm5
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm4, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm5, %ymm5
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm3, %ymm12
+	vpxor	%ymm3, %ymm1, %ymm4
+	vpblendd	$48, %ymm3, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm6, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm3, %ymm13, %ymm13
+	vpblendd	$-64, %ymm3, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm4, %ymm2
+	vpermq	$-115, %ymm5, %ymm4
+	vpermq	$114, %ymm12, %ymm5
+	vpblendd	$12, %ymm3, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm3, %ymm9, %ymm3
+	vpandn	%ymm3, %ymm0, %ymm3
+	vpxor	%ymm13, %ymm6, %ymm6
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm3, %ymm3
+	vpxor	(%rcx,%rdx), %ymm6, %ymm6
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L_sha3_512_64$2
+	vmovdqu	%ymm6, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm1, 96(%rsp)
+	vmovdqu	%ymm2, 128(%rsp)
+	vmovdqu	%ymm3, 160(%rsp)
+	vmovdqu	%ymm4, 192(%rsp)
+	vmovdqu	%ymm5, 224(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	movq	glob_data + 6232(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 32(%rax)
+	movq	glob_data + 6240(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 40(%rax)
+	movq	glob_data + 6248(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 48(%rax)
+	movq	glob_data + 6256(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 56(%rax)
+	ret
+L_shake256_64$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm0, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vpbroadcastq	(%rax), %ymm4
+	movq	glob_data + 6208(%rip), %rsi
+	movq	8(%rax), %rdi
+	movq	%rdi, 32(%rsp,%rsi,8)
+	movq	glob_data + 6216(%rip), %rsi
+	movq	16(%rax), %rdi
+	movq	%rdi, 32(%rsp,%rsi,8)
+	movq	glob_data + 6224(%rip), %rsi
+	movq	24(%rax), %rdi
+	movq	%rdi, 32(%rsp,%rsi,8)
+	movq	glob_data + 6232(%rip), %rsi
+	movq	32(%rax), %rdi
+	movq	%rdi, 32(%rsp,%rsi,8)
+	movq	glob_data + 6240(%rip), %rsi
+	movq	40(%rax), %rdi
+	movq	%rdi, 32(%rsp,%rsi,8)
+	movq	glob_data + 6248(%rip), %rsi
+	movq	48(%rax), %rdi
+	movq	%rdi, 32(%rsp,%rsi,8)
+	movq	glob_data + 6256(%rip), %rsi
+	movq	56(%rax), %rax
+	movq	%rax, 32(%rsp,%rsi,8)
+	movq	glob_data + 6264(%rip), %rax
+	shlq	$3, %rax
+	movb	$31, 32(%rsp,%rax)
+	movq	glob_data + 6328(%rip), %rax
+	shlq	$3, %rax
+	movq	$135, %rsi
+	andq	$7, %rsi
+	addq	%rsi, %rax
+	xorb	$-128, 32(%rsp,%rax)
+	vmovdqu	64(%rsp), %ymm5
+	vmovdqu	96(%rsp), %ymm0
+	vmovdqu	128(%rsp), %ymm1
+	vmovdqu	160(%rsp), %ymm6
+	vmovdqu	192(%rsp), %ymm2
+	vmovdqu	224(%rsp), %ymm3
+	movq	$136, %rsi
+	leaq	glob_data + 6200(%rip), %rax
+	jmp 	L_shake256_64$7
+L_shake256_64$8:
+	leaq	glob_data + 3328(%rip), %rdi
+	movq	$0, %r8
+	leaq	glob_data + 3136(%rip), %r9
+	leaq	glob_data + 2944(%rip), %r10
+	movq	$24, %r11
+L_shake256_64$11:
+	vpshufd	$78, %ymm0, %ymm8
+	vpxor	%ymm1, %ymm2, %ymm7
+	vpxor	%ymm3, %ymm6, %ymm9
+	vpxor	%ymm5, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm0, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm4, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm0, %ymm0
+	vpxor	%ymm11, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%r9), %ymm0, %ymm7
+	vpsrlvq	(%r10), %ymm0, %ymm0
+	vpor	%ymm7, %ymm0, %ymm0
+	vpxor	%ymm9, %ymm1, %ymm1
+	vpsllvq	64(%r9), %ymm1, %ymm7
+	vpsrlvq	64(%r10), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%r9), %ymm6, %ymm7
+	vpsrlvq	96(%r10), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	128(%r9), %ymm2, %ymm6
+	vpsrlvq	128(%r10), %ymm2, %ymm2
+	vpor	%ymm6, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpermq	$-115, %ymm0, %ymm6
+	vpermq	$-115, %ymm1, %ymm7
+	vpsllvq	160(%r9), %ymm3, %ymm0
+	vpsrlvq	160(%r10), %ymm3, %ymm1
+	vpor	%ymm0, %ymm1, %ymm8
+	vpxor	%ymm9, %ymm5, %ymm0
+	vpermq	$27, %ymm10, %ymm5
+	vpermq	$114, %ymm2, %ymm9
+	vpsllvq	32(%r9), %ymm0, %ymm1
+	vpsrlvq	32(%r10), %ymm0, %ymm0
+	vpor	%ymm1, %ymm0, %ymm10
+	vpsrldq	$8, %ymm8, %ymm0
+	vpandn	%ymm0, %ymm8, %ymm1
+	vpblendd	$12, %ymm9, %ymm10, %ymm0
+	vpblendd	$12, %ymm10, %ymm7, %ymm2
+	vpblendd	$12, %ymm7, %ymm6, %ymm3
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm0, %ymm0
+	vpblendd	$48, %ymm5, %ymm2, %ymm2
+	vpblendd	$48, %ymm10, %ymm3, %ymm3
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm5, %ymm0, %ymm0
+	vpblendd	$-64, %ymm9, %ymm2, %ymm2
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm2, %ymm0, %ymm0
+	vpandn	%ymm11, %ymm3, %ymm3
+	vpblendd	$12, %ymm10, %ymm5, %ymm11
+	vpblendd	$12, %ymm5, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm0, %ymm2
+	vpblendd	$48, %ymm6, %ymm11, %ymm0
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpblendd	$-64, %ymm7, %ymm0, %ymm0
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm0, %ymm0
+	vpxor	%ymm9, %ymm0, %ymm12
+	vpermq	$30, %ymm8, %ymm0
+	vpblendd	$48, %ymm4, %ymm0, %ymm0
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm4, %ymm11, %ymm11
+	vpandn	%ymm0, %ymm11, %ymm11
+	vpblendd	$12, %ymm5, %ymm7, %ymm0
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm0, %ymm0
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm0, %ymm0
+	vpblendd	$-64, %ymm5, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm0, %ymm0
+	vpxor	%ymm10, %ymm0, %ymm0
+	vpermq	$0, %ymm1, %ymm13
+	vpermq	$27, %ymm2, %ymm1
+	vpermq	$-115, %ymm3, %ymm2
+	vpermq	$114, %ymm12, %ymm3
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm5, %ymm9
+	vpblendd	$48, %ymm5, %ymm12, %ymm5
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm5, %ymm5
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm5, %ymm6
+	vpxor	%ymm13, %ymm4, %ymm4
+	vpxor	%ymm8, %ymm11, %ymm5
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rdi,%r8), %ymm4, %ymm4
+	addq	$32, %r8
+	decq	%r11
+	jne 	L_shake256_64$11
+	vmovdqu	%ymm4, 32(%rsp)
+	vmovdqu	%ymm5, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm1, 128(%rsp)
+	vmovdqu	%ymm6, 160(%rsp)
+	vmovdqu	%ymm2, 192(%rsp)
+	vmovdqu	%ymm3, 224(%rsp)
+	movq	%rsi, %rdi
+	shrq	$3, %rdi
+	movq	$0, %r8
+	jmp 	L_shake256_64$9
+L_shake256_64$10:
+	movq	(%rax,%r8,8), %r9
+	movq	32(%rsp,%r9,8), %r9
+	movq	%r9, (%rdx,%r8,8)
+	incq	%r8
+L_shake256_64$9:
+	cmpq	%rdi, %r8
+	jb  	L_shake256_64$10
+	addq	%rsi, %rdx
+	subq	%rsi, %rcx
+L_shake256_64$7:
+	cmpq	%rsi, %rcx
+	jnbe	L_shake256_64$8
+	leaq	glob_data + 3328(%rip), %rsi
+	movq	$0, %rdi
+	leaq	glob_data + 3136(%rip), %r8
+	leaq	glob_data + 2944(%rip), %r9
+	movq	$24, %r10
+L_shake256_64$6:
+	vpshufd	$78, %ymm0, %ymm8
+	vpxor	%ymm1, %ymm2, %ymm7
+	vpxor	%ymm3, %ymm6, %ymm9
+	vpxor	%ymm5, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm0, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm4, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm0, %ymm0
+	vpxor	%ymm11, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%r8), %ymm0, %ymm7
+	vpsrlvq	(%r9), %ymm0, %ymm0
+	vpor	%ymm7, %ymm0, %ymm0
+	vpxor	%ymm9, %ymm1, %ymm1
+	vpsllvq	64(%r8), %ymm1, %ymm7
+	vpsrlvq	64(%r9), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm6, %ymm6
+	vpsllvq	96(%r8), %ymm6, %ymm7
+	vpsrlvq	96(%r9), %ymm6, %ymm6
+	vpor	%ymm7, %ymm6, %ymm10
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	128(%r8), %ymm2, %ymm6
+	vpsrlvq	128(%r9), %ymm2, %ymm2
+	vpor	%ymm6, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpermq	$-115, %ymm0, %ymm6
+	vpermq	$-115, %ymm1, %ymm7
+	vpsllvq	160(%r8), %ymm3, %ymm0
+	vpsrlvq	160(%r9), %ymm3, %ymm1
+	vpor	%ymm0, %ymm1, %ymm8
+	vpxor	%ymm9, %ymm5, %ymm0
+	vpermq	$27, %ymm10, %ymm5
+	vpermq	$114, %ymm2, %ymm9
+	vpsllvq	32(%r8), %ymm0, %ymm1
+	vpsrlvq	32(%r9), %ymm0, %ymm0
+	vpor	%ymm1, %ymm0, %ymm10
+	vpsrldq	$8, %ymm8, %ymm0
+	vpandn	%ymm0, %ymm8, %ymm1
+	vpblendd	$12, %ymm9, %ymm10, %ymm0
+	vpblendd	$12, %ymm10, %ymm7, %ymm2
+	vpblendd	$12, %ymm7, %ymm6, %ymm3
+	vpblendd	$12, %ymm6, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm0, %ymm0
+	vpblendd	$48, %ymm5, %ymm2, %ymm2
+	vpblendd	$48, %ymm10, %ymm3, %ymm3
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm5, %ymm0, %ymm0
+	vpblendd	$-64, %ymm9, %ymm2, %ymm2
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm2, %ymm0, %ymm0
+	vpandn	%ymm11, %ymm3, %ymm3
+	vpblendd	$12, %ymm10, %ymm5, %ymm11
+	vpblendd	$12, %ymm5, %ymm6, %ymm12
+	vpxor	%ymm6, %ymm0, %ymm2
+	vpblendd	$48, %ymm6, %ymm11, %ymm0
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm5, %ymm3, %ymm3
+	vpblendd	$-64, %ymm7, %ymm0, %ymm0
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm0, %ymm0
+	vpxor	%ymm9, %ymm0, %ymm12
+	vpermq	$30, %ymm8, %ymm0
+	vpblendd	$48, %ymm4, %ymm0, %ymm0
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm4, %ymm11, %ymm11
+	vpandn	%ymm0, %ymm11, %ymm11
+	vpblendd	$12, %ymm5, %ymm7, %ymm0
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm0, %ymm0
+	vpblendd	$48, %ymm6, %ymm13, %ymm13
+	vpblendd	$-64, %ymm6, %ymm0, %ymm0
+	vpblendd	$-64, %ymm5, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm0, %ymm0
+	vpxor	%ymm10, %ymm0, %ymm0
+	vpermq	$0, %ymm1, %ymm13
+	vpermq	$27, %ymm2, %ymm1
+	vpermq	$-115, %ymm3, %ymm2
+	vpermq	$114, %ymm12, %ymm3
+	vpblendd	$12, %ymm6, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm5, %ymm9
+	vpblendd	$48, %ymm5, %ymm12, %ymm5
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm5, %ymm5
+	vpblendd	$-64, %ymm6, %ymm9, %ymm6
+	vpandn	%ymm6, %ymm5, %ymm6
+	vpxor	%ymm13, %ymm4, %ymm4
+	vpxor	%ymm8, %ymm11, %ymm5
+	vpxor	%ymm7, %ymm6, %ymm6
+	vpxor	(%rsi,%rdi), %ymm4, %ymm4
+	addq	$32, %rdi
+	decq	%r10
+	jne 	L_shake256_64$6
+	vmovdqu	%ymm4, 32(%rsp)
+	vmovdqu	%ymm5, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm1, 128(%rsp)
+	vmovdqu	%ymm6, 160(%rsp)
+	vmovdqu	%ymm2, 192(%rsp)
+	vmovdqu	%ymm3, 224(%rsp)
+	movq	%rcx, %rsi
+	shrq	$3, %rsi
+	movq	$0, %rdi
+	jmp 	L_shake256_64$4
+L_shake256_64$5:
+	movq	(%rax,%rdi,8), %r8
+	movq	32(%rsp,%r8,8), %r8
+	movq	%r8, (%rdx,%rdi,8)
+	incq	%rdi
+L_shake256_64$4:
+	cmpq	%rsi, %rdi
+	jb  	L_shake256_64$5
+	movq	(%rax,%rdi,8), %rax
+	shlq	$3, %rdi
+	shlq	$3, %rax
+	jmp 	L_shake256_64$2
+L_shake256_64$3:
+	movb	32(%rsp,%rax), %sil
+	movb	%sil, (%rdx,%rdi)
+	incq	%rdi
+	incq	%rax
+L_shake256_64$2:
+	cmpq	%rcx, %rdi
+	jb  	L_shake256_64$3
+	ret
+L_sha3_256_32$1:
+	vpxor	%ymm0, %ymm0, %ymm0
+	vmovdqu	%ymm0, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm0, 96(%rsp)
+	vmovdqu	%ymm0, 128(%rsp)
+	vmovdqu	%ymm0, 160(%rsp)
+	vmovdqu	%ymm0, 192(%rsp)
+	vmovdqu	%ymm0, 224(%rsp)
+	vpbroadcastq	(%rcx), %ymm6
+	movq	8(%rcx), %rdx
+	movq	glob_data + 6208(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	16(%rcx), %rdx
+	movq	glob_data + 6216(%rip), %rsi
+	movq	%rdx, 32(%rsp,%rsi,8)
+	movq	24(%rcx), %rcx
+	movq	glob_data + 6224(%rip), %rdx
+	movq	%rcx, 32(%rsp,%rdx,8)
+	movq	glob_data + 6232(%rip), %rcx
+	shlq	$3, %rcx
+	movb	$6, 32(%rsp,%rcx)
+	movq	glob_data + 6328(%rip), %rcx
+	shlq	$3, %rcx
+	movq	$135, %rdx
+	andq	$7, %rdx
+	addq	%rdx, %rcx
+	xorb	$-128, 32(%rsp,%rcx)
+	vmovdqu	64(%rsp), %ymm0
+	vmovdqu	96(%rsp), %ymm1
+	vmovdqu	128(%rsp), %ymm2
+	vmovdqu	160(%rsp), %ymm3
+	vmovdqu	192(%rsp), %ymm4
+	vmovdqu	224(%rsp), %ymm5
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+L_sha3_256_32$2:
+	vpshufd	$78, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm4, %ymm7
+	vpxor	%ymm5, %ymm3, %ymm9
+	vpxor	%ymm0, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm1, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm11, %ymm6, %ymm6
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%rsi), %ymm1, %ymm7
+	vpsrlvq	(%rdi), %ymm1, %ymm1
+	vpor	%ymm7, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpsllvq	64(%rsi), %ymm2, %ymm7
+	vpsrlvq	64(%rdi), %ymm2, %ymm2
+	vpor	%ymm7, %ymm2, %ymm2
+	vpxor	%ymm9, %ymm3, %ymm3
+	vpsllvq	96(%rsi), %ymm3, %ymm7
+	vpsrlvq	96(%rdi), %ymm3, %ymm3
+	vpor	%ymm7, %ymm3, %ymm10
+	vpxor	%ymm9, %ymm4, %ymm3
+	vpsllvq	128(%rsi), %ymm3, %ymm4
+	vpsrlvq	128(%rdi), %ymm3, %ymm3
+	vpor	%ymm4, %ymm3, %ymm4
+	vpxor	%ymm9, %ymm5, %ymm5
+	vpermq	$-115, %ymm1, %ymm3
+	vpermq	$-115, %ymm2, %ymm7
+	vpsllvq	160(%rsi), %ymm5, %ymm1
+	vpsrlvq	160(%rdi), %ymm5, %ymm2
+	vpor	%ymm1, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm0, %ymm1
+	vpermq	$27, %ymm10, %ymm0
+	vpermq	$114, %ymm4, %ymm9
+	vpsllvq	32(%rsi), %ymm1, %ymm2
+	vpsrlvq	32(%rdi), %ymm1, %ymm1
+	vpor	%ymm2, %ymm1, %ymm10
+	vpsrldq	$8, %ymm8, %ymm1
+	vpandn	%ymm1, %ymm8, %ymm2
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm4
+	vpblendd	$12, %ymm7, %ymm3, %ymm5
+	vpblendd	$12, %ymm3, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm0, %ymm4, %ymm4
+	vpblendd	$48, %ymm10, %ymm5, %ymm5
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm0, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm9, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm4, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm5, %ymm5
+	vpblendd	$12, %ymm10, %ymm0, %ymm11
+	vpblendd	$12, %ymm0, %ymm3, %ymm12
+	vpxor	%ymm3, %ymm1, %ymm4
+	vpblendd	$48, %ymm3, %ymm11, %ymm1
+	vpblendd	$48, %ymm7, %ymm12, %ymm11
+	vpxor	%ymm0, %ymm5, %ymm5
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm1, %ymm12
+	vpermq	$30, %ymm8, %ymm1
+	vpblendd	$48, %ymm6, %ymm1, %ymm1
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm1, %ymm11, %ymm11
+	vpblendd	$12, %ymm0, %ymm7, %ymm1
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm1, %ymm1
+	vpblendd	$48, %ymm3, %ymm13, %ymm13
+	vpblendd	$-64, %ymm3, %ymm1, %ymm1
+	vpblendd	$-64, %ymm0, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm1, %ymm1
+	vpxor	%ymm10, %ymm1, %ymm1
+	vpermq	$0, %ymm2, %ymm13
+	vpermq	$27, %ymm4, %ymm2
+	vpermq	$-115, %ymm5, %ymm4
+	vpermq	$114, %ymm12, %ymm5
+	vpblendd	$12, %ymm3, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm0, %ymm9
+	vpblendd	$48, %ymm0, %ymm12, %ymm0
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm0, %ymm0
+	vpblendd	$-64, %ymm3, %ymm9, %ymm3
+	vpandn	%ymm3, %ymm0, %ymm3
+	vpxor	%ymm13, %ymm6, %ymm6
+	vpxor	%ymm8, %ymm11, %ymm0
+	vpxor	%ymm7, %ymm3, %ymm3
+	vpxor	(%rcx,%rdx), %ymm6, %ymm6
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L_sha3_256_32$2
+	vmovdqu	%ymm6, 32(%rsp)
+	vmovdqu	%ymm0, 64(%rsp)
+	vmovdqu	%ymm1, 96(%rsp)
+	vmovdqu	%ymm2, 128(%rsp)
+	vmovdqu	%ymm3, 160(%rsp)
+	vmovdqu	%ymm4, 192(%rsp)
+	vmovdqu	%ymm5, 224(%rsp)
+	movq	glob_data + 6200(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, (%rax)
+	movq	glob_data + 6208(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 8(%rax)
+	movq	glob_data + 6216(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 16(%rax)
+	movq	glob_data + 6224(%rip), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	ret
+L_sha3_256$1:
+	vpxor	%ymm6, %ymm6, %ymm6
+	vpxor	%ymm3, %ymm3, %ymm3
+	vpxor	%ymm4, %ymm4, %ymm4
+	vpxor	%ymm0, %ymm0, %ymm0
+	vpxor	%ymm5, %ymm5, %ymm5
+	vpxor	%ymm1, %ymm1, %ymm1
+	vpxor	%ymm2, %ymm2, %ymm2
+	movb	$6, %cl
+	movq	$136, %rdx
+	leaq	glob_data + 6200(%rip), %rsi
+	vpxor	%ymm7, %ymm7, %ymm7
+	vmovdqu	%ymm7, 32(%rsp)
+	vmovdqu	%ymm7, 64(%rsp)
+	vmovdqu	%ymm7, 96(%rsp)
+	vmovdqu	%ymm7, 128(%rsp)
+	vmovdqu	%ymm7, 160(%rsp)
+	vmovdqu	%ymm7, 192(%rsp)
+	vmovdqu	%ymm7, 224(%rsp)
+	jmp 	L_sha3_256$7
+L_sha3_256$8:
+	movq	%rdx, %r9
+	shrq	$3, %r9
+	movq	$0, %r10
+	jmp 	L_sha3_256$10
+L_sha3_256$11:
+	movq	(%r8,%r10,8), %r11
+	movq	(%rsi,%r10,8), %rbx
+	movq	%r11, 32(%rsp,%rbx,8)
+	incq	%r10
+L_sha3_256$10:
+	cmpq	%r9, %r10
+	jb  	L_sha3_256$11
+	movq	32(%rsp), %r9
+	movq	%r9, 40(%rsp)
+	movq	%r9, 48(%rsp)
+	movq	%r9, 56(%rsp)
+	vpxor	32(%rsp), %ymm6, %ymm6
+	vpxor	64(%rsp), %ymm3, %ymm3
+	vpxor	96(%rsp), %ymm4, %ymm4
+	vpxor	128(%rsp), %ymm0, %ymm0
+	vpxor	160(%rsp), %ymm5, %ymm5
+	vpxor	192(%rsp), %ymm1, %ymm1
+	vpxor	224(%rsp), %ymm2, %ymm2
+	addq	%rdx, %r8
+	subq	%rdx, %rdi
+	leaq	glob_data + 3328(%rip), %r9
+	movq	$0, %r10
+	leaq	glob_data + 3136(%rip), %r11
+	leaq	glob_data + 2944(%rip), %rbx
+	movq	$24, %rbp
+L_sha3_256$9:
+	vpshufd	$78, %ymm4, %ymm8
+	vpxor	%ymm0, %ymm1, %ymm7
+	vpxor	%ymm2, %ymm5, %ymm9
+	vpxor	%ymm3, %ymm7, %ymm7
+	vpxor	%ymm9, %ymm7, %ymm10
+	vpermq	$-109, %ymm10, %ymm7
+	vpxor	%ymm4, %ymm8, %ymm8
+	vpermq	$78, %ymm8, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm7, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm8
+	vpsrlq	$63, %ymm8, %ymm9
+	vpaddq	%ymm8, %ymm8, %ymm12
+	vpor	%ymm9, %ymm12, %ymm9
+	vpxor	%ymm11, %ymm4, %ymm4
+	vpxor	%ymm11, %ymm6, %ymm6
+	vpblendd	$-64, %ymm9, %ymm10, %ymm9
+	vpblendd	$3, %ymm8, %ymm7, %ymm7
+	vpxor	%ymm7, %ymm9, %ymm9
+	vpsllvq	(%r11), %ymm4, %ymm7
+	vpsrlvq	(%rbx), %ymm4, %ymm4
+	vpor	%ymm7, %ymm4, %ymm4
+	vpxor	%ymm9, %ymm0, %ymm0
+	vpsllvq	64(%r11), %ymm0, %ymm7
+	vpsrlvq	64(%rbx), %ymm0, %ymm0
+	vpor	%ymm7, %ymm0, %ymm0
+	vpxor	%ymm9, %ymm5, %ymm5
+	vpsllvq	96(%r11), %ymm5, %ymm7
+	vpsrlvq	96(%rbx), %ymm5, %ymm5
+	vpor	%ymm7, %ymm5, %ymm10
+	vpxor	%ymm9, %ymm1, %ymm1
+	vpsllvq	128(%r11), %ymm1, %ymm5
+	vpsrlvq	128(%rbx), %ymm1, %ymm1
+	vpor	%ymm5, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpermq	$-115, %ymm4, %ymm5
+	vpermq	$-115, %ymm0, %ymm7
+	vpsllvq	160(%r11), %ymm2, %ymm0
+	vpsrlvq	160(%rbx), %ymm2, %ymm2
+	vpor	%ymm0, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm3, %ymm0
+	vpermq	$27, %ymm10, %ymm3
+	vpermq	$114, %ymm1, %ymm9
+	vpsllvq	32(%r11), %ymm0, %ymm1
+	vpsrlvq	32(%rbx), %ymm0, %ymm0
+	vpor	%ymm1, %ymm0, %ymm10
+	vpsrldq	$8, %ymm8, %ymm0
+	vpandn	%ymm0, %ymm8, %ymm0
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm7, %ymm2
+	vpblendd	$12, %ymm7, %ymm5, %ymm4
+	vpblendd	$12, %ymm5, %ymm10, %ymm11
+	vpblendd	$48, %ymm7, %ymm1, %ymm1
+	vpblendd	$48, %ymm3, %ymm2, %ymm2
+	vpblendd	$48, %ymm10, %ymm4, %ymm4
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm3, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm2, %ymm2
+	vpblendd	$-64, %ymm9, %ymm4, %ymm4
+	vpblendd	$-64, %ymm7, %ymm11, %ymm11
+	vpandn	%ymm2, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm4, %ymm2
+	vpblendd	$12, %ymm10, %ymm3, %ymm4
+	vpblendd	$12, %ymm3, %ymm5, %ymm11
+	vpxor	%ymm5, %ymm1, %ymm1
+	vpblendd	$48, %ymm5, %ymm4, %ymm4
+	vpblendd	$48, %ymm7, %ymm11, %ymm11
+	vpxor	%ymm3, %ymm2, %ymm2
+	vpblendd	$-64, %ymm7, %ymm4, %ymm4
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm4, %ymm4
+	vpxor	%ymm9, %ymm4, %ymm12
+	vpermq	$30, %ymm8, %ymm4
+	vpblendd	$48, %ymm6, %ymm4, %ymm4
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm4, %ymm11, %ymm11
+	vpblendd	$12, %ymm3, %ymm7, %ymm4
+	vpblendd	$12, %ymm7, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm4, %ymm4
+	vpblendd	$48, %ymm5, %ymm13, %ymm13
+	vpblendd	$-64, %ymm5, %ymm4, %ymm4
+	vpblendd	$-64, %ymm3, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm4, %ymm4
+	vpxor	%ymm10, %ymm4, %ymm4
+	vpermq	$0, %ymm0, %ymm13
+	vpermq	$27, %ymm1, %ymm0
+	vpermq	$-115, %ymm2, %ymm1
+	vpermq	$114, %ymm12, %ymm2
+	vpblendd	$12, %ymm5, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm3, %ymm9
+	vpblendd	$48, %ymm3, %ymm12, %ymm3
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm3, %ymm3
+	vpblendd	$-64, %ymm5, %ymm9, %ymm5
+	vpandn	%ymm5, %ymm3, %ymm5
+	vpxor	%ymm13, %ymm6, %ymm6
+	vpxor	%ymm8, %ymm11, %ymm3
+	vpxor	%ymm7, %ymm5, %ymm5
+	vpxor	(%r9,%r10), %ymm6, %ymm6
+	addq	$32, %r10
+	decq	%rbp
+	jne 	L_sha3_256$9
+L_sha3_256$7:
+	cmpq	%rdx, %rdi
+	jnb 	L_sha3_256$8
+	vpxor	%ymm7, %ymm7, %ymm7
+	vmovdqu	%ymm7, 32(%rsp)
+	vmovdqu	%ymm7, 64(%rsp)
+	vmovdqu	%ymm7, 96(%rsp)
+	vmovdqu	%ymm7, 128(%rsp)
+	vmovdqu	%ymm7, 160(%rsp)
+	vmovdqu	%ymm7, 192(%rsp)
+	vmovdqu	%ymm7, 224(%rsp)
+	movq	%rdi, %r9
+	shrq	$3, %r9
+	movq	$0, %r10
+	jmp 	L_sha3_256$5
+L_sha3_256$6:
+	movq	(%r8,%r10,8), %r11
+	movq	(%rsi,%r10,8), %rbx
+	movq	%r11, 32(%rsp,%rbx,8)
+	incq	%r10
+L_sha3_256$5:
+	cmpq	%r9, %r10
+	jb  	L_sha3_256$6
+	movq	(%rsi,%r10,8), %r9
+	shlq	$3, %r9
+	shlq	$3, %r10
+	jmp 	L_sha3_256$3
+L_sha3_256$4:
+	movb	(%r8,%r10), %r11b
+	movb	%r11b, 32(%rsp,%r9)
+	incq	%r10
+	incq	%r9
+L_sha3_256$3:
+	cmpq	%rdi, %r10
+	jb  	L_sha3_256$4
+	movb	%cl, 32(%rsp,%r9)
+	movq	%rdx, %rcx
+	addq	$-1, %rcx
+	shrq	$3, %rcx
+	movq	(%rsi,%rcx,8), %rcx
+	shlq	$3, %rcx
+	addq	$-1, %rdx
+	andq	$7, %rdx
+	addq	%rdx, %rcx
+	xorb	$-128, 32(%rsp,%rcx)
+	movq	32(%rsp), %rcx
+	movq	%rcx, 40(%rsp)
+	movq	%rcx, 48(%rsp)
+	movq	%rcx, 56(%rsp)
+	vpxor	32(%rsp), %ymm6, %ymm6
+	vpxor	64(%rsp), %ymm3, %ymm7
+	vpxor	96(%rsp), %ymm4, %ymm3
+	vpxor	128(%rsp), %ymm0, %ymm0
+	vpxor	160(%rsp), %ymm5, %ymm4
+	vpxor	192(%rsp), %ymm1, %ymm1
+	vpxor	224(%rsp), %ymm2, %ymm2
+	leaq	glob_data + 3328(%rip), %rcx
+	movq	$0, %rdx
+	leaq	glob_data + 3136(%rip), %rsi
+	leaq	glob_data + 2944(%rip), %rdi
+	movq	$24, %r8
+L_sha3_256$2:
+	vpshufd	$78, %ymm3, %ymm5
+	vpxor	%ymm0, %ymm1, %ymm8
+	vpxor	%ymm2, %ymm4, %ymm9
+	vpxor	%ymm7, %ymm8, %ymm8
+	vpxor	%ymm9, %ymm8, %ymm10
+	vpermq	$-109, %ymm10, %ymm8
+	vpxor	%ymm3, %ymm5, %ymm5
+	vpermq	$78, %ymm5, %ymm9
+	vpsrlq	$63, %ymm10, %ymm11
+	vpaddq	%ymm10, %ymm10, %ymm10
+	vpor	%ymm10, %ymm11, %ymm11
+	vpermq	$57, %ymm11, %ymm10
+	vpxor	%ymm8, %ymm11, %ymm11
+	vpermq	$0, %ymm11, %ymm11
+	vpxor	%ymm6, %ymm5, %ymm5
+	vpxor	%ymm9, %ymm5, %ymm9
+	vpsrlq	$63, %ymm9, %ymm5
+	vpaddq	%ymm9, %ymm9, %ymm12
+	vpor	%ymm5, %ymm12, %ymm12
+	vpxor	%ymm11, %ymm3, %ymm3
+	vpxor	%ymm11, %ymm6, %ymm5
+	vpblendd	$-64, %ymm12, %ymm10, %ymm6
+	vpblendd	$3, %ymm9, %ymm8, %ymm8
+	vpxor	%ymm8, %ymm6, %ymm9
+	vpsllvq	(%rsi), %ymm3, %ymm6
+	vpsrlvq	(%rdi), %ymm3, %ymm3
+	vpor	%ymm6, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm0, %ymm0
+	vpsllvq	64(%rsi), %ymm0, %ymm6
+	vpsrlvq	64(%rdi), %ymm0, %ymm0
+	vpor	%ymm6, %ymm0, %ymm0
+	vpxor	%ymm9, %ymm4, %ymm4
+	vpsllvq	96(%rsi), %ymm4, %ymm6
+	vpsrlvq	96(%rdi), %ymm4, %ymm4
+	vpor	%ymm6, %ymm4, %ymm10
+	vpxor	%ymm9, %ymm1, %ymm1
+	vpsllvq	128(%rsi), %ymm1, %ymm4
+	vpsrlvq	128(%rdi), %ymm1, %ymm1
+	vpor	%ymm4, %ymm1, %ymm1
+	vpxor	%ymm9, %ymm2, %ymm2
+	vpermq	$-115, %ymm3, %ymm4
+	vpermq	$-115, %ymm0, %ymm6
+	vpsllvq	160(%rsi), %ymm2, %ymm0
+	vpsrlvq	160(%rdi), %ymm2, %ymm2
+	vpor	%ymm0, %ymm2, %ymm8
+	vpxor	%ymm9, %ymm7, %ymm0
+	vpermq	$27, %ymm10, %ymm7
+	vpermq	$114, %ymm1, %ymm9
+	vpsllvq	32(%rsi), %ymm0, %ymm1
+	vpsrlvq	32(%rdi), %ymm0, %ymm0
+	vpor	%ymm1, %ymm0, %ymm10
+	vpsrldq	$8, %ymm8, %ymm0
+	vpandn	%ymm0, %ymm8, %ymm0
+	vpblendd	$12, %ymm9, %ymm10, %ymm1
+	vpblendd	$12, %ymm10, %ymm6, %ymm2
+	vpblendd	$12, %ymm6, %ymm4, %ymm3
+	vpblendd	$12, %ymm4, %ymm10, %ymm11
+	vpblendd	$48, %ymm6, %ymm1, %ymm1
+	vpblendd	$48, %ymm7, %ymm2, %ymm2
+	vpblendd	$48, %ymm10, %ymm3, %ymm3
+	vpblendd	$48, %ymm9, %ymm11, %ymm11
+	vpblendd	$-64, %ymm7, %ymm1, %ymm1
+	vpblendd	$-64, %ymm9, %ymm2, %ymm2
+	vpblendd	$-64, %ymm9, %ymm3, %ymm3
+	vpblendd	$-64, %ymm6, %ymm11, %ymm11
+	vpandn	%ymm2, %ymm1, %ymm1
+	vpandn	%ymm11, %ymm3, %ymm2
+	vpblendd	$12, %ymm10, %ymm7, %ymm3
+	vpblendd	$12, %ymm7, %ymm4, %ymm11
+	vpxor	%ymm4, %ymm1, %ymm1
+	vpblendd	$48, %ymm4, %ymm3, %ymm3
+	vpblendd	$48, %ymm6, %ymm11, %ymm11
+	vpxor	%ymm7, %ymm2, %ymm2
+	vpblendd	$-64, %ymm6, %ymm3, %ymm3
+	vpblendd	$-64, %ymm10, %ymm11, %ymm11
+	vpandn	%ymm11, %ymm3, %ymm3
+	vpxor	%ymm9, %ymm3, %ymm12
+	vpermq	$30, %ymm8, %ymm3
+	vpblendd	$48, %ymm5, %ymm3, %ymm3
+	vpermq	$57, %ymm8, %ymm11
+	vpblendd	$-64, %ymm5, %ymm11, %ymm11
+	vpandn	%ymm3, %ymm11, %ymm11
+	vpblendd	$12, %ymm7, %ymm6, %ymm3
+	vpblendd	$12, %ymm6, %ymm9, %ymm13
+	vpblendd	$48, %ymm9, %ymm3, %ymm3
+	vpblendd	$48, %ymm4, %ymm13, %ymm13
+	vpblendd	$-64, %ymm4, %ymm3, %ymm3
+	vpblendd	$-64, %ymm7, %ymm13, %ymm13
+	vpandn	%ymm13, %ymm3, %ymm3
+	vpxor	%ymm10, %ymm3, %ymm3
+	vpermq	$0, %ymm0, %ymm13
+	vpermq	$27, %ymm1, %ymm0
+	vpermq	$-115, %ymm2, %ymm1
+	vpermq	$114, %ymm12, %ymm2
+	vpblendd	$12, %ymm4, %ymm9, %ymm12
+	vpblendd	$12, %ymm9, %ymm7, %ymm9
+	vpblendd	$48, %ymm7, %ymm12, %ymm7
+	vpblendd	$48, %ymm10, %ymm9, %ymm9
+	vpblendd	$-64, %ymm10, %ymm7, %ymm7
+	vpblendd	$-64, %ymm4, %ymm9, %ymm4
+	vpandn	%ymm4, %ymm7, %ymm4
+	vpxor	%ymm13, %ymm5, %ymm5
+	vpxor	%ymm8, %ymm11, %ymm7
+	vpxor	%ymm6, %ymm4, %ymm4
+	vpxor	(%rcx,%rdx), %ymm5, %ymm6
+	addq	$32, %rdx
+	decq	%r8
+	jne 	L_sha3_256$2
+	vmovdqu	%ymm6, 32(%rsp)
+	vmovdqu	%ymm7, 64(%rsp)
+	vmovdqu	%ymm3, 96(%rsp)
+	vmovdqu	%ymm0, 128(%rsp)
+	vmovdqu	%ymm4, 160(%rsp)
+	vmovdqu	%ymm1, 192(%rsp)
+	vmovdqu	%ymm2, 224(%rsp)
+	leaq	glob_data + 6200(%rip), %rcx
+	movq	(%rcx), %rdx
+	movq	32(%rsp,%rdx,8), %rdx
+	movq	%rdx, (%rax)
+	movq	8(%rcx), %rdx
+	movq	32(%rsp,%rdx,8), %rdx
+	movq	%rdx, 8(%rax)
+	movq	16(%rcx), %rdx
+	movq	32(%rsp,%rdx,8), %rdx
+	movq	%rdx, 16(%rax)
+	movq	24(%rcx), %rcx
+	movq	32(%rsp,%rcx,8), %rcx
+	movq	%rcx, 24(%rax)
+	ret
+	.data
+	.p2align	5
+_glob_data:
+glob_data:
+      .byte 0
+      .byte 1
+      .byte 1
+      .byte 2
+      .byte 3
+      .byte 4
+      .byte 4
+      .byte 5
+      .byte 6
+      .byte 7
+      .byte 7
+      .byte 8
+      .byte 9
+      .byte 10
+      .byte 10
+      .byte 11
+      .byte 4
+      .byte 5
+      .byte 5
+      .byte 6
+      .byte 7
+      .byte 8
+      .byte 8
+      .byte 9
+      .byte 10
+      .byte 11
+      .byte 11
+      .byte 12
+      .byte 13
+      .byte 14
+      .byte 14
+      .byte 15
+      .byte 0
+      .byte 1
+      .byte 2
+      .byte 3
+      .byte 4
+      .byte 8
+      .byte 9
+      .byte 10
+      .byte 11
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 9
+      .byte 10
+      .byte 11
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 1
+      .byte 2
+      .byte 3
+      .byte 4
+      .byte 8
+      .byte 0
+      .byte 1
+      .byte 1
+      .byte 2
+      .byte 2
+      .byte 3
+      .byte 3
+      .byte 4
+      .byte 5
+      .byte 6
+      .byte 6
+      .byte 7
+      .byte 7
+      .byte 8
+      .byte 8
+      .byte 9
+      .byte 2
+      .byte 3
+      .byte 3
+      .byte 4
+      .byte 4
+      .byte 5
+      .byte 5
+      .byte 6
+      .byte 7
+      .byte 8
+      .byte 8
+      .byte 9
+      .byte 9
+      .byte 10
+      .byte 10
+      .byte 11
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 1
+      .byte 1
+      .byte 1
+      .byte 2
+      .byte 2
+      .byte 2
+      .byte 2
+      .byte 3
+      .byte 3
+      .byte 3
+      .byte 3
+      .byte 4
+      .byte 4
+      .byte 4
+      .byte 4
+      .byte 5
+      .byte 5
+      .byte 5
+      .byte 5
+      .byte 6
+      .byte 6
+      .byte 6
+      .byte 6
+      .byte 7
+      .byte 7
+      .byte 7
+      .byte 7
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 4
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 5
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 2
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 6
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 3
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 7
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 73
+      .byte 5
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte 64
+      .byte 3
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -128
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -127
+      .byte 6
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 15
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte -40
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -95
+      .byte 5
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte -65
+      .byte 78
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte -13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte 1
+      .byte 13
+      .byte -91
+      .byte -91
+      .byte -76
+      .byte -31
+      .byte 34
+      .byte 79
+      .byte 52
+      .byte 93
+      .byte 35
+      .byte 68
+      .byte 86
+      .byte -91
+      .byte -25
+      .byte 78
+      .byte -6
+      .byte 83
+      .byte 123
+      .byte -57
+      .byte 37
+      .byte 43
+      .byte 55
+      .byte 58
+      .byte -120
+      .byte 24
+      .byte -127
+      .byte 126
+      .byte 5
+      .byte -60
+      .byte -97
+      .byte -9
+      .byte -72
+      .byte -80
+      .byte -91
+      .byte 6
+      .byte -76
+      .byte 5
+      .byte 34
+      .byte 9
+      .byte 52
+      .byte 1
+      .byte 35
+      .byte 11
+      .byte 86
+      .byte 3
+      .byte -25
+      .byte 9
+      .byte -6
+      .byte 5
+      .byte 123
+      .byte 6
+      .byte 37
+      .byte 12
+      .byte 55
+      .byte 5
+      .byte -120
+      .byte 0
+      .byte -127
+      .byte 11
+      .byte 5
+      .byte 5
+      .byte -97
+      .byte 10
+      .byte -72
+      .byte 8
+      .byte 15
+      .byte 68
+      .byte 67
+      .byte -94
+      .byte 29
+      .byte -112
+      .byte 108
+      .byte -124
+      .byte 102
+      .byte -43
+      .byte -26
+      .byte 87
+      .byte -2
+      .byte 30
+      .byte -95
+      .byte -41
+      .byte -93
+      .byte -67
+      .byte 106
+      .byte -95
+      .byte 63
+      .byte -43
+      .byte -65
+      .byte 81
+      .byte -71
+      .byte -96
+      .byte -41
+      .byte 28
+      .byte -90
+      .byte -100
+      .byte -48
+      .byte 121
+      .byte 15
+      .byte 7
+      .byte 67
+      .byte 9
+      .byte 29
+      .byte 9
+      .byte 108
+      .byte 0
+      .byte 102
+      .byte 3
+      .byte -26
+      .byte 5
+      .byte -2
+      .byte 4
+      .byte -95
+      .byte 4
+      .byte -93
+      .byte 4
+      .byte 106
+      .byte 3
+      .byte 63
+      .byte 8
+      .byte -65
+      .byte 4
+      .byte -71
+      .byte 5
+      .byte -41
+      .byte 7
+      .byte -90
+      .byte 10
+      .byte -48
+      .byte 9
+      .byte -5
+      .byte 69
+      .byte 92
+      .byte 94
+      .byte 41
+      .byte -17
+      .byte 65
+      .byte -66
+      .byte -43
+      .byte 49
+      .byte -28
+      .byte 113
+      .byte 64
+      .byte -55
+      .byte -114
+      .byte -53
+      .byte -73
+      .byte -72
+      .byte -9
+      .byte 117
+      .byte -115
+      .byte -36
+      .byte -106
+      .byte 110
+      .byte -61
+      .byte 34
+      .byte 15
+      .byte 62
+      .byte 90
+      .byte 110
+      .byte 85
+      .byte -78
+      .byte -5
+      .byte 4
+      .byte 92
+      .byte 10
+      .byte 41
+      .byte 4
+      .byte 65
+      .byte 11
+      .byte -43
+      .byte 2
+      .byte -28
+      .byte 5
+      .byte 64
+      .byte 9
+      .byte -114
+      .byte 1
+      .byte -73
+      .byte 3
+      .byte -9
+      .byte 0
+      .byte -115
+      .byte 5
+      .byte -106
+      .byte 12
+      .byte -61
+      .byte 9
+      .byte 15
+      .byte 1
+      .byte 90
+      .byte 0
+      .byte 85
+      .byte 3
+      .byte 35
+      .byte 63
+      .byte 35
+      .byte 63
+      .byte -51
+      .byte -105
+      .byte -51
+      .byte -105
+      .byte 102
+      .byte -35
+      .byte 102
+      .byte -35
+      .byte 6
+      .byte -72
+      .byte 6
+      .byte -72
+      .byte -95
+      .byte -35
+      .byte -95
+      .byte -35
+      .byte 37
+      .byte 41
+      .byte 37
+      .byte 41
+      .byte 8
+      .byte -95
+      .byte 8
+      .byte -95
+      .byte -87
+      .byte 109
+      .byte -87
+      .byte 109
+      .byte 35
+      .byte 6
+      .byte 35
+      .byte 6
+      .byte -51
+      .byte 0
+      .byte -51
+      .byte 0
+      .byte 102
+      .byte 11
+      .byte 102
+      .byte 11
+      .byte 6
+      .byte 6
+      .byte 6
+      .byte 6
+      .byte -95
+      .byte 10
+      .byte -95
+      .byte 10
+      .byte 37
+      .byte 10
+      .byte 37
+      .byte 10
+      .byte 8
+      .byte 9
+      .byte 8
+      .byte 9
+      .byte -87
+      .byte 2
+      .byte -87
+      .byte 2
+      .byte 69
+      .byte -122
+      .byte 69
+      .byte -122
+      .byte 69
+      .byte -122
+      .byte 69
+      .byte -122
+      .byte -62
+      .byte 43
+      .byte -62
+      .byte 43
+      .byte -62
+      .byte 43
+      .byte -62
+      .byte 43
+      .byte -78
+      .byte -6
+      .byte -78
+      .byte -6
+      .byte -78
+      .byte -6
+      .byte -78
+      .byte -6
+      .byte 63
+      .byte -42
+      .byte 63
+      .byte -42
+      .byte 63
+      .byte -42
+      .byte 63
+      .byte -42
+      .byte 69
+      .byte 7
+      .byte 69
+      .byte 7
+      .byte 69
+      .byte 7
+      .byte 69
+      .byte 7
+      .byte -62
+      .byte 5
+      .byte -62
+      .byte 5
+      .byte -62
+      .byte 5
+      .byte -62
+      .byte 5
+      .byte -78
+      .byte 4
+      .byte -78
+      .byte 4
+      .byte -78
+      .byte 4
+      .byte -78
+      .byte 4
+      .byte 63
+      .byte 9
+      .byte 63
+      .byte 9
+      .byte 63
+      .byte 9
+      .byte 63
+      .byte 9
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte 55
+      .byte 65
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte -30
+      .byte -111
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte 55
+      .byte 12
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -30
+      .byte 11
+      .byte -19
+      .byte -4
+      .byte -19
+      .byte -4
+      .byte -19
+      .byte 5
+      .byte -19
+      .byte 5
+      .byte 75
+      .byte 49
+      .byte -72
+      .byte -77
+      .byte -92
+      .byte -73
+      .byte 125
+      .byte -79
+      .byte -94
+      .byte -50
+      .byte 54
+      .byte 73
+      .byte -109
+      .byte -119
+      .byte -9
+      .byte 126
+      .byte -116
+      .byte -22
+      .byte -52
+      .byte -91
+      .byte -21
+      .byte 17
+      .byte -74
+      .byte -52
+      .byte -104
+      .byte 84
+      .byte -102
+      .byte 55
+      .byte -74
+      .byte -53
+      .byte 83
+      .byte -44
+      .byte 75
+      .byte 0
+      .byte -72
+      .byte 11
+      .byte -92
+      .byte 11
+      .byte 125
+      .byte 10
+      .byte -94
+      .byte 8
+      .byte 54
+      .byte 7
+      .byte -109
+      .byte 0
+      .byte -9
+      .byte 9
+      .byte -116
+      .byte 6
+      .byte -52
+      .byte 1
+      .byte -21
+      .byte 0
+      .byte -74
+      .byte 10
+      .byte -104
+      .byte 12
+      .byte -102
+      .byte 9
+      .byte -74
+      .byte 9
+      .byte 83
+      .byte 11
+      .byte -100
+      .byte 20
+      .byte 95
+      .byte 56
+      .byte 104
+      .byte -69
+      .byte 54
+      .byte 72
+      .byte 90
+      .byte 112
+      .byte 9
+      .byte -114
+      .byte 122
+      .byte -42
+      .byte -10
+      .byte -126
+      .byte -37
+      .byte -25
+      .byte 35
+      .byte 58
+      .byte 80
+      .byte -4
+      .byte 91
+      .byte 108
+      .byte -13
+      .byte -81
+      .byte -29
+      .byte 125
+      .byte -42
+      .byte 44
+      .byte 79
+      .byte 1
+      .byte -100
+      .byte 0
+      .byte 95
+      .byte 11
+      .byte 104
+      .byte 3
+      .byte 54
+      .byte 6
+      .byte 90
+      .byte 2
+      .byte 9
+      .byte 3
+      .byte 122
+      .byte 8
+      .byte -10
+      .byte 0
+      .byte -37
+      .byte 6
+      .byte 35
+      .byte 1
+      .byte 80
+      .byte 12
+      .byte 91
+      .byte 11
+      .byte -13
+      .byte 6
+      .byte -29
+      .byte 4
+      .byte -42
+      .byte 10
+      .byte 79
+      .byte 4
+      .byte 68
+      .byte -109
+      .byte -125
+      .byte 101
+      .byte -118
+      .byte 2
+      .byte 82
+      .byte -36
+      .byte -102
+      .byte 48
+      .byte 64
+      .byte -63
+      .byte 8
+      .byte -104
+      .byte -3
+      .byte 49
+      .byte 8
+      .byte -98
+      .byte 26
+      .byte -81
+      .byte 46
+      .byte -79
+      .byte 13
+      .byte 92
+      .byte 10
+      .byte -121
+      .byte 40
+      .byte -6
+      .byte 117
+      .byte 25
+      .byte 58
+      .byte 22
+      .byte 68
+      .byte 7
+      .byte -125
+      .byte 12
+      .byte -118
+      .byte 4
+      .byte 82
+      .byte 6
+      .byte -102
+      .byte 2
+      .byte 64
+      .byte 1
+      .byte 8
+      .byte 0
+      .byte -3
+      .byte 10
+      .byte 8
+      .byte 6
+      .byte 26
+      .byte 1
+      .byte 46
+      .byte 7
+      .byte 13
+      .byte 5
+      .byte 10
+      .byte 9
+      .byte 40
+      .byte 2
+      .byte 117
+      .byte 10
+      .byte 58
+      .byte 8
+      .byte -126
+      .byte 102
+      .byte -126
+      .byte 102
+      .byte 66
+      .byte -84
+      .byte 66
+      .byte -84
+      .byte 79
+      .byte 4
+      .byte 79
+      .byte 4
+      .byte 61
+      .byte -22
+      .byte 61
+      .byte -22
+      .byte -126
+      .byte 113
+      .byte -126
+      .byte 113
+      .byte -7
+      .byte 102
+      .byte -7
+      .byte 102
+      .byte 45
+      .byte -68
+      .byte 45
+      .byte -68
+      .byte -60
+      .byte 22
+      .byte -60
+      .byte 22
+      .byte -126
+      .byte 0
+      .byte -126
+      .byte 0
+      .byte 66
+      .byte 6
+      .byte 66
+      .byte 6
+      .byte 79
+      .byte 7
+      .byte 79
+      .byte 7
+      .byte 61
+      .byte 3
+      .byte 61
+      .byte 3
+      .byte -126
+      .byte 11
+      .byte -126
+      .byte 11
+      .byte -7
+      .byte 11
+      .byte -7
+      .byte 11
+      .byte 45
+      .byte 5
+      .byte 45
+      .byte 5
+      .byte -60
+      .byte 10
+      .byte -60
+      .byte 10
+      .byte 75
+      .byte 61
+      .byte 75
+      .byte 61
+      .byte 75
+      .byte 61
+      .byte 75
+      .byte 61
+      .byte -40
+      .byte 14
+      .byte -40
+      .byte 14
+      .byte -40
+      .byte 14
+      .byte -40
+      .byte 14
+      .byte -109
+      .byte -109
+      .byte -109
+      .byte -109
+      .byte -109
+      .byte -109
+      .byte -109
+      .byte -109
+      .byte -85
+      .byte 81
+      .byte -85
+      .byte 81
+      .byte -85
+      .byte 81
+      .byte -85
+      .byte 81
+      .byte 75
+      .byte 12
+      .byte 75
+      .byte 12
+      .byte 75
+      .byte 12
+      .byte 75
+      .byte 12
+      .byte -40
+      .byte 6
+      .byte -40
+      .byte 6
+      .byte -40
+      .byte 6
+      .byte -40
+      .byte 6
+      .byte -109
+      .byte 10
+      .byte -109
+      .byte 10
+      .byte -109
+      .byte 10
+      .byte -109
+      .byte 10
+      .byte -85
+      .byte 0
+      .byte -85
+      .byte 0
+      .byte -85
+      .byte 0
+      .byte -85
+      .byte 0
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 115
+      .byte 48
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 44
+      .byte -53
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 115
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte 103
+      .byte -58
+      .byte 103
+      .byte -58
+      .byte 103
+      .byte 1
+      .byte 103
+      .byte 1
+      .byte -116
+      .byte -21
+      .byte -116
+      .byte -21
+      .byte -116
+      .byte 7
+      .byte -116
+      .byte 7
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 11
+      .byte 123
+      .byte 11
+      .byte 123
+      .byte 11
+      .byte 10
+      .byte 11
+      .byte 10
+      .byte -102
+      .byte 57
+      .byte -102
+      .byte 57
+      .byte -102
+      .byte 11
+      .byte -102
+      .byte 11
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -43
+      .byte 52
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -114
+      .byte -49
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -43
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte 86
+      .byte -82
+      .byte 86
+      .byte -82
+      .byte 86
+      .byte -82
+      .byte 86
+      .byte -82
+      .byte 110
+      .byte 108
+      .byte 110
+      .byte 108
+      .byte 110
+      .byte 108
+      .byte 110
+      .byte 108
+      .byte 41
+      .byte -15
+      .byte 41
+      .byte -15
+      .byte 41
+      .byte -15
+      .byte 41
+      .byte -15
+      .byte -74
+      .byte -62
+      .byte -74
+      .byte -62
+      .byte -74
+      .byte -62
+      .byte -74
+      .byte -62
+      .byte 86
+      .byte 12
+      .byte 86
+      .byte 12
+      .byte 86
+      .byte 12
+      .byte 86
+      .byte 12
+      .byte 110
+      .byte 2
+      .byte 110
+      .byte 2
+      .byte 110
+      .byte 2
+      .byte 110
+      .byte 2
+      .byte 41
+      .byte 6
+      .byte 41
+      .byte 6
+      .byte 41
+      .byte 6
+      .byte 41
+      .byte 6
+      .byte -74
+      .byte 0
+      .byte -74
+      .byte 0
+      .byte -74
+      .byte 0
+      .byte -74
+      .byte 0
+      .byte 61
+      .byte -23
+      .byte 61
+      .byte -23
+      .byte -44
+      .byte 67
+      .byte -44
+      .byte 67
+      .byte 8
+      .byte -103
+      .byte 8
+      .byte -103
+      .byte 127
+      .byte -114
+      .byte 127
+      .byte -114
+      .byte -60
+      .byte 21
+      .byte -60
+      .byte 21
+      .byte -78
+      .byte -5
+      .byte -78
+      .byte -5
+      .byte -65
+      .byte 83
+      .byte -65
+      .byte 83
+      .byte 127
+      .byte -103
+      .byte 127
+      .byte -103
+      .byte 61
+      .byte 2
+      .byte 61
+      .byte 2
+      .byte -44
+      .byte 7
+      .byte -44
+      .byte 7
+      .byte 8
+      .byte 1
+      .byte 8
+      .byte 1
+      .byte 127
+      .byte 1
+      .byte 127
+      .byte 1
+      .byte -60
+      .byte 9
+      .byte -60
+      .byte 9
+      .byte -78
+      .byte 5
+      .byte -78
+      .byte 5
+      .byte -65
+      .byte 6
+      .byte -65
+      .byte 6
+      .byte 127
+      .byte 12
+      .byte 127
+      .byte 12
+      .byte -57
+      .byte -23
+      .byte -116
+      .byte -26
+      .byte -39
+      .byte 5
+      .byte -9
+      .byte 120
+      .byte -12
+      .byte -93
+      .byte -45
+      .byte 78
+      .byte -25
+      .byte 80
+      .byte -7
+      .byte 97
+      .byte 4
+      .byte -50
+      .byte -7
+      .byte 103
+      .byte -63
+      .byte 62
+      .byte 103
+      .byte -49
+      .byte -81
+      .byte 35
+      .byte 119
+      .byte -3
+      .byte 126
+      .byte -102
+      .byte -67
+      .byte 108
+      .byte -57
+      .byte 4
+      .byte -116
+      .byte 2
+      .byte -39
+      .byte 10
+      .byte -9
+      .byte 3
+      .byte -12
+      .byte 7
+      .byte -45
+      .byte 5
+      .byte -25
+      .byte 11
+      .byte -7
+      .byte 6
+      .byte 4
+      .byte 2
+      .byte -7
+      .byte 12
+      .byte -63
+      .byte 11
+      .byte 103
+      .byte 10
+      .byte -81
+      .byte 6
+      .byte 119
+      .byte 8
+      .byte 126
+      .byte 0
+      .byte -67
+      .byte 5
+      .byte -78
+      .byte -2
+      .byte 43
+      .byte -45
+      .byte 30
+      .byte -126
+      .byte 14
+      .byte 80
+      .byte -90
+      .byte -109
+      .byte -79
+      .byte 3
+      .byte -34
+      .byte -59
+      .byte 38
+      .byte 24
+      .byte 11
+      .byte 125
+      .byte -121
+      .byte 41
+      .byte -8
+      .byte 113
+      .byte -89
+      .byte -113
+      .byte -53
+      .byte -73
+      .byte -103
+      .byte 68
+      .byte -94
+      .byte -57
+      .byte 101
+      .byte -21
+      .byte -78
+      .byte 8
+      .byte 43
+      .byte 2
+      .byte 30
+      .byte 8
+      .byte 14
+      .byte 6
+      .byte -90
+      .byte 1
+      .byte -79
+      .byte 0
+      .byte -34
+      .byte 11
+      .byte 38
+      .byte 6
+      .byte 11
+      .byte 12
+      .byte -121
+      .byte 4
+      .byte -8
+      .byte 9
+      .byte -89
+      .byte 10
+      .byte -53
+      .byte 6
+      .byte -103
+      .byte 9
+      .byte -94
+      .byte 1
+      .byte 101
+      .byte 12
+      .byte -82
+      .byte 43
+      .byte 75
+      .byte 52
+      .byte 103
+      .byte -56
+      .byte 105
+      .byte -85
+      .byte 75
+      .byte 51
+      .byte 22
+      .byte -18
+      .byte 53
+      .byte 90
+      .byte 117
+      .byte 21
+      .byte 10
+      .byte -127
+      .byte 110
+      .byte 118
+      .byte -53
+      .byte -74
+      .byte 95
+      .byte 49
+      .byte -124
+      .byte 78
+      .byte 93
+      .byte 72
+      .byte 73
+      .byte 76
+      .byte -74
+      .byte -50
+      .byte -82
+      .byte 1
+      .byte 75
+      .byte 3
+      .byte 103
+      .byte 3
+      .byte 105
+      .byte 0
+      .byte 75
+      .byte 2
+      .byte 22
+      .byte 12
+      .byte 53
+      .byte 11
+      .byte 117
+      .byte 6
+      .byte 10
+      .byte 3
+      .byte 110
+      .byte 12
+      .byte -53
+      .byte 5
+      .byte 95
+      .byte 4
+      .byte -124
+      .byte 2
+      .byte 93
+      .byte 1
+      .byte 73
+      .byte 1
+      .byte -74
+      .byte 12
+      .byte 20
+      .byte 3
+      .byte 20
+      .byte 3
+      .byte 20
+      .byte 7
+      .byte 20
+      .byte 7
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte 31
+      .byte 110
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte -54
+      .byte -66
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte 31
+      .byte 1
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -54
+      .byte 0
+      .byte -62
+      .byte 41
+      .byte -62
+      .byte 41
+      .byte -62
+      .byte 41
+      .byte -62
+      .byte 41
+      .byte 79
+      .byte 5
+      .byte 79
+      .byte 5
+      .byte 79
+      .byte 5
+      .byte 79
+      .byte 5
+      .byte 63
+      .byte -44
+      .byte 63
+      .byte -44
+      .byte 63
+      .byte -44
+      .byte 63
+      .byte -44
+      .byte -68
+      .byte 121
+      .byte -68
+      .byte 121
+      .byte -68
+      .byte 121
+      .byte -68
+      .byte 121
+      .byte -62
+      .byte 3
+      .byte -62
+      .byte 3
+      .byte -62
+      .byte 3
+      .byte -62
+      .byte 3
+      .byte 79
+      .byte 8
+      .byte 79
+      .byte 8
+      .byte 79
+      .byte 8
+      .byte 79
+      .byte 8
+      .byte 63
+      .byte 7
+      .byte 63
+      .byte 7
+      .byte 63
+      .byte 7
+      .byte 63
+      .byte 7
+      .byte -68
+      .byte 5
+      .byte -68
+      .byte 5
+      .byte -68
+      .byte 5
+      .byte -68
+      .byte 5
+      .byte 88
+      .byte -110
+      .byte 88
+      .byte -110
+      .byte -7
+      .byte 94
+      .byte -7
+      .byte 94
+      .byte -36
+      .byte -42
+      .byte -36
+      .byte -42
+      .byte 96
+      .byte 34
+      .byte 96
+      .byte 34
+      .byte -5
+      .byte 71
+      .byte -5
+      .byte 71
+      .byte -101
+      .byte 34
+      .byte -101
+      .byte 34
+      .byte 52
+      .byte 104
+      .byte 52
+      .byte 104
+      .byte -34
+      .byte -64
+      .byte -34
+      .byte -64
+      .byte 88
+      .byte 10
+      .byte 88
+      .byte 10
+      .byte -7
+      .byte 3
+      .byte -7
+      .byte 3
+      .byte -36
+      .byte 2
+      .byte -36
+      .byte 2
+      .byte 96
+      .byte 2
+      .byte 96
+      .byte 2
+      .byte -5
+      .byte 6
+      .byte -5
+      .byte 6
+      .byte -101
+      .byte 1
+      .byte -101
+      .byte 1
+      .byte 52
+      .byte 12
+      .byte 52
+      .byte 12
+      .byte -34
+      .byte 6
+      .byte -34
+      .byte 6
+      .byte -84
+      .byte 77
+      .byte -89
+      .byte -111
+      .byte -14
+      .byte -63
+      .byte 62
+      .byte -35
+      .byte 107
+      .byte -111
+      .byte 116
+      .byte 35
+      .byte 10
+      .byte -118
+      .byte 74
+      .byte 71
+      .byte 115
+      .byte 52
+      .byte -63
+      .byte 54
+      .byte 29
+      .byte -114
+      .byte 44
+      .byte -50
+      .byte -64
+      .byte 65
+      .byte -40
+      .byte 16
+      .byte -91
+      .byte -95
+      .byte 6
+      .byte -70
+      .byte -84
+      .byte 9
+      .byte -89
+      .byte 12
+      .byte -14
+      .byte 11
+      .byte 62
+      .byte 3
+      .byte 107
+      .byte 0
+      .byte 116
+      .byte 7
+      .byte 10
+      .byte 12
+      .byte 74
+      .byte 9
+      .byte 115
+      .byte 11
+      .byte -63
+      .byte 3
+      .byte 29
+      .byte 7
+      .byte 44
+      .byte 10
+      .byte -64
+      .byte 1
+      .byte -40
+      .byte 8
+      .byte -91
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 49
+      .byte -122
+      .byte 91
+      .byte 99
+      .byte 42
+      .byte -29
+      .byte 72
+      .byte 95
+      .byte 66
+      .byte -82
+      .byte -62
+      .byte 42
+      .byte -105
+      .byte 94
+      .byte 94
+      .byte 66
+      .byte 96
+      .byte 40
+      .byte 3
+      .byte -31
+      .byte 27
+      .byte -88
+      .byte -101
+      .byte 42
+      .byte -107
+      .byte 123
+      .byte -28
+      .byte 111
+      .byte -66
+      .byte 93
+      .byte -14
+      .byte -69
+      .byte 49
+      .byte 3
+      .byte 91
+      .byte 2
+      .byte 42
+      .byte 5
+      .byte 72
+      .byte 7
+      .byte 66
+      .byte 8
+      .byte -62
+      .byte 4
+      .byte -105
+      .byte 9
+      .byte 94
+      .byte 8
+      .byte 96
+      .byte 8
+      .byte 3
+      .byte 8
+      .byte 27
+      .byte 7
+      .byte -101
+      .byte 9
+      .byte -107
+      .byte 12
+      .byte -28
+      .byte 3
+      .byte -66
+      .byte 3
+      .byte -14
+      .byte 5
+      .byte 73
+      .byte 79
+      .byte 98
+      .byte 8
+      .byte -4
+      .byte 59
+      .byte -128
+      .byte -127
+      .byte 121
+      .byte -25
+      .byte -54
+      .byte -59
+      .byte -36
+      .byte -44
+      .byte -122
+      .byte 56
+      .byte 7
+      .byte -84
+      .byte 26
+      .byte -79
+      .byte -85
+      .byte 90
+      .byte -34
+      .byte -69
+      .byte -51
+      .byte -94
+      .byte -33
+      .byte -80
+      .byte 77
+      .byte 30
+      .byte 92
+      .byte 90
+      .byte 73
+      .byte 4
+      .byte 98
+      .byte 2
+      .byte -4
+      .byte 7
+      .byte -128
+      .byte 1
+      .byte 121
+      .byte 12
+      .byte -54
+      .byte 7
+      .byte -36
+      .byte 0
+      .byte -122
+      .byte 6
+      .byte 7
+      .byte 7
+      .byte 26
+      .byte 3
+      .byte -85
+      .byte 9
+      .byte -34
+      .byte 1
+      .byte -51
+      .byte 11
+      .byte -33
+      .byte 3
+      .byte 77
+      .byte 7
+      .byte 92
+      .byte 6
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 7
+      .byte 0
+      .byte 1
+      .byte 2
+      .byte 3
+      .byte 4
+      .byte 5
+      .byte 6
+      .byte 15
+      .byte 8
+      .byte 9
+      .byte 10
+      .byte 11
+      .byte 12
+      .byte 13
+      .byte 14
+      .byte 23
+      .byte 16
+      .byte 17
+      .byte 18
+      .byte 19
+      .byte 20
+      .byte 21
+      .byte 22
+      .byte 31
+      .byte 24
+      .byte 25
+      .byte 26
+      .byte 27
+      .byte 28
+      .byte 29
+      .byte 30
+      .byte 1
+      .byte 2
+      .byte 3
+      .byte 4
+      .byte 5
+      .byte 6
+      .byte 7
+      .byte 0
+      .byte 9
+      .byte 10
+      .byte 11
+      .byte 12
+      .byte 13
+      .byte 14
+      .byte 15
+      .byte 8
+      .byte 17
+      .byte 18
+      .byte 19
+      .byte 20
+      .byte 21
+      .byte 22
+      .byte 23
+      .byte 16
+      .byte 25
+      .byte 26
+      .byte 27
+      .byte 28
+      .byte 29
+      .byte 30
+      .byte 31
+      .byte 24
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 61
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 46
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 28
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 23
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 63
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 2
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 36
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 37
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 19
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 58
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 25
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 54
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 3
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 56
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 62
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 49
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 39
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 44
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 20
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 21
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 43
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 50
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 3
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 18
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 36
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 41
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 62
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 28
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 27
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 45
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 6
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 56
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 39
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 61
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 55
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 2
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 15
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 25
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 20
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 44
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 43
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 21
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 14
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 1
+      .byte 4
+      .byte 5
+      .byte 8
+      .byte 9
+      .byte 12
+      .byte 13
+      .byte 2
+      .byte 3
+      .byte 6
+      .byte 7
+      .byte 10
+      .byte 11
+      .byte 14
+      .byte 15
+      .byte 3
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 2
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte -1
+      .byte -1
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte -1
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 14
+      .byte -1
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte -1
+      .byte 0
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte -1
+      .byte 0
+      .byte 2
+      .byte 4
+      .byte 6
+      .byte 8
+      .byte 10
+      .byte 12
+      .byte 14
+      .byte 12
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 4
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 4
+      .byte 4
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 4
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 5
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 6
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 7
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 24
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 13
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 18
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 23
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 16
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 25
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 22
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 15
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 11
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 12
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 21
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 26
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 19
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 20
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 17
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 14
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 27
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -8
+      .byte 31
+      .byte -32
+      .byte 127
+      .byte 4
+      .byte 52
+      .byte 1
+      .byte 13
+      .byte 0
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte 15
+      .byte 0
+      .byte -16
+      .byte 0
+      .byte -1
+      .byte 15
+      .byte -1
+      .byte 3
+      .byte 0
+      .byte 16
+      .byte 15
+      .byte 0
+      .byte 1
+      .byte 16
+      .byte 15
+      .byte 0
+      .byte 0
+      .byte 2
+      .byte 1
+      .byte 0
+      .byte 1
+      .byte 2
+      .byte -1
+      .byte 3
+      .byte 4
+      .byte 5
+      .byte -1
+      .byte 6
+      .byte 7
+      .byte 8
+      .byte -1
+      .byte 9
+      .byte 10
+      .byte 11
+      .byte -1
+      .byte 4
+      .byte 5
+      .byte 6
+      .byte -1
+      .byte 7
+      .byte 8
+      .byte 9
+      .byte -1
+      .byte 10
+      .byte 11
+      .byte 12
+      .byte -1
+      .byte 13
+      .byte 14
+      .byte 15
+      .byte -1
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -5
+      .byte 58
+      .byte -91
+      .byte 6
+      .byte 15
+      .byte 7
+      .byte -76
+      .byte 5
+      .byte 67
+      .byte 9
+      .byte 34
+      .byte 9
+      .byte 29
+      .byte 9
+      .byte 52
+      .byte 1
+      .byte 108
+      .byte 0
+      .byte 35
+      .byte 11
+      .byte 102
+      .byte 3
+      .byte 86
+      .byte 3
+      .byte -26
+      .byte 5
+      .byte -25
+      .byte 9
+      .byte -2
+      .byte 4
+      .byte -6
+      .byte 5
+      .byte -95
+      .byte 4
+      .byte 123
+      .byte 6
+      .byte -93
+      .byte 4
+      .byte 37
+      .byte 12
+      .byte 106
+      .byte 3
+      .byte 55
+      .byte 5
+      .byte 63
+      .byte 8
+      .byte -120
+      .byte 0
+      .byte -65
+      .byte 4
+      .byte -127
+      .byte 11
+      .byte -71
+      .byte 5
+      .byte 5
+      .byte 5
+      .byte -41
+      .byte 7
+      .byte -97
+      .byte 10
+      .byte -90
+      .byte 10
+      .byte -72
+      .byte 8
+      .byte -48
+      .byte 9
+      .byte 75
+      .byte 0
+      .byte -100
+      .byte 0
+      .byte -72
+      .byte 11
+      .byte 95
+      .byte 11
+      .byte -92
+      .byte 11
+      .byte 104
+      .byte 3
+      .byte 125
+      .byte 10
+      .byte 54
+      .byte 6
+      .byte -94
+      .byte 8
+      .byte 90
+      .byte 2
+      .byte 54
+      .byte 7
+      .byte 9
+      .byte 3
+      .byte -109
+      .byte 0
+      .byte 122
+      .byte 8
+      .byte -9
+      .byte 9
+      .byte -10
+      .byte 0
+      .byte -116
+      .byte 6
+      .byte -37
+      .byte 6
+      .byte -52
+      .byte 1
+      .byte 35
+      .byte 1
+      .byte -21
+      .byte 0
+      .byte 80
+      .byte 12
+      .byte -74
+      .byte 10
+      .byte 91
+      .byte 11
+      .byte -104
+      .byte 12
+      .byte -13
+      .byte 6
+      .byte -102
+      .byte 9
+      .byte -29
+      .byte 4
+      .byte -74
+      .byte 9
+      .byte -42
+      .byte 10
+      .byte 83
+      .byte 11
+      .byte 79
+      .byte 4
+      .byte -5
+      .byte 4
+      .byte 92
+      .byte 10
+      .byte 41
+      .byte 4
+      .byte 65
+      .byte 11
+      .byte -43
+      .byte 2
+      .byte -28
+      .byte 5
+      .byte 64
+      .byte 9
+      .byte -114
+      .byte 1
+      .byte -73
+      .byte 3
+      .byte -9
+      .byte 0
+      .byte -115
+      .byte 5
+      .byte -106
+      .byte 12
+      .byte -61
+      .byte 9
+      .byte 15
+      .byte 1
+      .byte 90
+      .byte 0
+      .byte 85
+      .byte 3
+      .byte 68
+      .byte 7
+      .byte -125
+      .byte 12
+      .byte -118
+      .byte 4
+      .byte 82
+      .byte 6
+      .byte -102
+      .byte 2
+      .byte 64
+      .byte 1
+      .byte 8
+      .byte 0
+      .byte -3
+      .byte 10
+      .byte 8
+      .byte 6
+      .byte 26
+      .byte 1
+      .byte 46
+      .byte 7
+      .byte 13
+      .byte 5
+      .byte 10
+      .byte 9
+      .byte 40
+      .byte 2
+      .byte 117
+      .byte 10
+      .byte 58
+      .byte 8
+      .byte 35
+      .byte 6
+      .byte -51
+      .byte 0
+      .byte 102
+      .byte 11
+      .byte 6
+      .byte 6
+      .byte -95
+      .byte 10
+      .byte 37
+      .byte 10
+      .byte 8
+      .byte 9
+      .byte -87
+      .byte 2
+      .byte -126
+      .byte 0
+      .byte 66
+      .byte 6
+      .byte 79
+      .byte 7
+      .byte 61
+      .byte 3
+      .byte -126
+      .byte 11
+      .byte -7
+      .byte 11
+      .byte 45
+      .byte 5
+      .byte -60
+      .byte 10
+      .byte 69
+      .byte 7
+      .byte -62
+      .byte 5
+      .byte -78
+      .byte 4
+      .byte 63
+      .byte 9
+      .byte 75
+      .byte 12
+      .byte -40
+      .byte 6
+      .byte -109
+      .byte 10
+      .byte -85
+      .byte 0
+      .byte 55
+      .byte 12
+      .byte -30
+      .byte 11
+      .byte 115
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte -19
+      .byte 5
+      .byte 103
+      .byte 1
+      .byte -10
+      .byte 2
+      .byte -95
+      .byte 5
+      .byte -19
+      .byte 8
+      .byte 11
+      .byte 10
+      .byte -102
+      .byte 11
+      .byte 20
+      .byte 7
+      .byte -43
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte 31
+      .byte 1
+      .byte -54
+      .byte 0
+      .byte 86
+      .byte 12
+      .byte 110
+      .byte 2
+      .byte 41
+      .byte 6
+      .byte -74
+      .byte 0
+      .byte -62
+      .byte 3
+      .byte 79
+      .byte 8
+      .byte 63
+      .byte 7
+      .byte -68
+      .byte 5
+      .byte 61
+      .byte 2
+      .byte -44
+      .byte 7
+      .byte 8
+      .byte 1
+      .byte 127
+      .byte 1
+      .byte -60
+      .byte 9
+      .byte -78
+      .byte 5
+      .byte -65
+      .byte 6
+      .byte 127
+      .byte 12
+      .byte 88
+      .byte 10
+      .byte -7
+      .byte 3
+      .byte -36
+      .byte 2
+      .byte 96
+      .byte 2
+      .byte -5
+      .byte 6
+      .byte -101
+      .byte 1
+      .byte 52
+      .byte 12
+      .byte -34
+      .byte 6
+      .byte -57
+      .byte 4
+      .byte -116
+      .byte 2
+      .byte -39
+      .byte 10
+      .byte -9
+      .byte 3
+      .byte -12
+      .byte 7
+      .byte -45
+      .byte 5
+      .byte -25
+      .byte 11
+      .byte -7
+      .byte 6
+      .byte 4
+      .byte 2
+      .byte -7
+      .byte 12
+      .byte -63
+      .byte 11
+      .byte 103
+      .byte 10
+      .byte -81
+      .byte 6
+      .byte 119
+      .byte 8
+      .byte 126
+      .byte 0
+      .byte -67
+      .byte 5
+      .byte -84
+      .byte 9
+      .byte -89
+      .byte 12
+      .byte -14
+      .byte 11
+      .byte 62
+      .byte 3
+      .byte 107
+      .byte 0
+      .byte 116
+      .byte 7
+      .byte 10
+      .byte 12
+      .byte 74
+      .byte 9
+      .byte 115
+      .byte 11
+      .byte -63
+      .byte 3
+      .byte 29
+      .byte 7
+      .byte 44
+      .byte 10
+      .byte -64
+      .byte 1
+      .byte -40
+      .byte 8
+      .byte -91
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte -78
+      .byte 8
+      .byte -82
+      .byte 1
+      .byte 43
+      .byte 2
+      .byte 75
+      .byte 3
+      .byte 30
+      .byte 8
+      .byte 103
+      .byte 3
+      .byte 14
+      .byte 6
+      .byte 105
+      .byte 0
+      .byte -90
+      .byte 1
+      .byte 75
+      .byte 2
+      .byte -79
+      .byte 0
+      .byte 22
+      .byte 12
+      .byte -34
+      .byte 11
+      .byte 53
+      .byte 11
+      .byte 38
+      .byte 6
+      .byte 117
+      .byte 6
+      .byte 11
+      .byte 12
+      .byte 10
+      .byte 3
+      .byte -121
+      .byte 4
+      .byte 110
+      .byte 12
+      .byte -8
+      .byte 9
+      .byte -53
+      .byte 5
+      .byte -89
+      .byte 10
+      .byte 95
+      .byte 4
+      .byte -53
+      .byte 6
+      .byte -124
+      .byte 2
+      .byte -103
+      .byte 9
+      .byte 93
+      .byte 1
+      .byte -94
+      .byte 1
+      .byte 73
+      .byte 1
+      .byte 101
+      .byte 12
+      .byte -74
+      .byte 12
+      .byte 49
+      .byte 3
+      .byte 73
+      .byte 4
+      .byte 91
+      .byte 2
+      .byte 98
+      .byte 2
+      .byte 42
+      .byte 5
+      .byte -4
+      .byte 7
+      .byte 72
+      .byte 7
+      .byte -128
+      .byte 1
+      .byte 66
+      .byte 8
+      .byte 121
+      .byte 12
+      .byte -62
+      .byte 4
+      .byte -54
+      .byte 7
+      .byte -105
+      .byte 9
+      .byte -36
+      .byte 0
+      .byte 94
+      .byte 8
+      .byte -122
+      .byte 6
+      .byte 96
+      .byte 8
+      .byte 7
+      .byte 7
+      .byte 3
+      .byte 8
+      .byte 26
+      .byte 3
+      .byte 27
+      .byte 7
+      .byte -85
+      .byte 9
+      .byte -101
+      .byte 9
+      .byte -34
+      .byte 1
+      .byte -107
+      .byte 12
+      .byte -51
+      .byte 11
+      .byte -28
+      .byte 3
+      .byte -33
+      .byte 3
+      .byte -66
+      .byte 3
+      .byte 77
+      .byte 7
+      .byte -14
+      .byte 5
+      .byte 92
+      .byte 6
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/.deps/kem.s.d b/src/kem/kyber/libjade_kyber768_amd64_ref/.deps/kem.s.d
new file mode 100644
index 0000000000..b8388f8b2e
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/.deps/kem.s.d
@@ -0,0 +1 @@
+kem.s: kem.jazz /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/ref/params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/ref/kem.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/ref/indcpa.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/ref/poly.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/reduce.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_ref_DIRTY.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/ref1/keccak1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/ref1/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600_globals.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/zetas.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/ref/polyvec.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/gen_matrix.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/ref/verify.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/tofromstack.jinc
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/Makefile b/src/kem/kyber/libjade_kyber768_amd64_ref/Makefile
new file mode 100644
index 0000000000..42a9eef0b6
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/Makefile
@@ -0,0 +1,4 @@
+SAFETY_FLAGS := -nocheckalignment
+SRCS := kem.jazz
+include ../../../../../Makefile.common
+
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/api.c b/src/kem/kyber/libjade_kyber768_amd64_ref/api.c
new file mode 100644
index 0000000000..656ae3eff1
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/api.c
@@ -0,0 +1,20 @@
+#include <oqs/rand.h>
+#include "libjade_randombytes.h"
+#include "api.h"
+
+int libjade_kyber768_amd64_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
+    uint8_t keypair_coins[JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES];
+    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2);
+    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2);
+    return jade_kem_kyber_kyber768_amd64_ref_keypair_derand(public_key, secret_key, keypair_coins);
+}
+
+int libjade_kyber768_amd64_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
+    uint8_t enc_coins[JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES];
+    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES);
+    return jade_kem_kyber_kyber768_amd64_ref_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
+}
+
+int libjade_kyber768_amd64_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
+    return jade_kem_kyber_kyber768_amd64_ref_dec(shared_secret, ciphertext, secret_key);
+}
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/include/api.h b/src/kem/kyber/libjade_kyber768_amd64_ref/include/api.h
new file mode 100644
index 0000000000..b8f2fc3032
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/include/api.h
@@ -0,0 +1,45 @@
+#ifndef JADE_KEM_kyber_kyber768_amd64_ref_API_H
+#define JADE_KEM_kyber_kyber768_amd64_ref_API_H
+
+#include <stdint.h>
+
+#define JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES 64
+#define JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES     32
+
+int jade_kem_kyber_kyber768_amd64_ref_keypair_derand(
+  uint8_t *public_key,
+  uint8_t *secret_key,
+  const uint8_t *coins
+);
+
+int libjade_kyber768_amd64_ref_keypair(
+  uint8_t *public_key,
+  uint8_t *secret_key
+);
+
+int jade_kem_kyber_kyber768_amd64_ref_enc_derand(
+  uint8_t *ciphertext,
+  uint8_t *shared_secret,
+  const uint8_t *public_key,
+  const uint8_t *coins
+);
+
+int libjade_kyber768_amd64_ref_enc(
+  uint8_t *ciphertext,
+  uint8_t *shared_secret,
+  const uint8_t *public_key
+);
+
+int jade_kem_kyber_kyber768_amd64_ref_dec(
+  uint8_t *shared_secret,
+  const uint8_t *ciphertext,
+  const uint8_t *secret_key
+);
+
+int libjade_kyber768_amd64_ref_dec(
+  uint8_t *shared_secret,
+  const uint8_t *ciphertext,
+  const uint8_t *secret_key
+);
+
+#endif
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/indcpa.jinc b/src/kem/kyber/libjade_kyber768_amd64_ref/indcpa.jinc
new file mode 100644
index 0000000000..5e0ac7566b
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/indcpa.jinc
@@ -0,0 +1,254 @@
+
+// from Jade require "crypto_kem/kyber/kyber768/common/params.jinc" // TODO: when hakyber avx2
+from Jade require "crypto_kem/kyber/kyber768/amd64/ref/params.jinc"
+
+from Jade require "crypto_kem/kyber/kyber768/amd64/ref/poly.jinc"
+from Jade require "crypto_kem/kyber/kyber768/amd64/ref/polyvec.jinc"
+from Jade require "common/keccak/common/fips202_ref_DIRTY.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/ref/gen_matrix.jinc"
+
+inline
+fn __indcpa_keypair_derand(reg u64 pkp, reg u64 skp, reg ptr u8[KYBER_SYMBYTES] randomnessp)
+{
+  stack u16[KYBER_K * KYBER_VECN] a;
+  stack u16[KYBER_VECN] e pkpv skpv;
+  stack u8[64] buf;
+  stack u8[KYBER_SYMBYTES] publicseed noiseseed;
+  stack u8[32] inbuf;
+  reg u64 t64;
+  reg u64 zero;
+  reg u8 nonce;
+  inline int i;
+
+  stack u64 spkp;
+  stack u64 sskp;
+
+  spkp = pkp;
+  sskp = skp;
+
+  for i=0 to KYBER_SYMBYTES/8
+  {
+    t64 = randomnessp[u64 i];
+    inbuf[u64 i] = t64;
+  }
+
+  buf = _sha3_512_32(buf, inbuf);
+
+  for i=0 to KYBER_SYMBYTES/8
+  {
+    t64 = buf[u64 i];
+    publicseed[u64 i] = t64;
+    t64 = buf[u64 i + KYBER_SYMBYTES/8];
+    noiseseed[u64 i] = t64;
+  }
+
+  zero = 0; 
+  a = __gen_matrix(publicseed, zero);
+
+  nonce = 0;
+  skpv[0:KYBER_N] = _poly_getnoise(skpv[0:KYBER_N], noiseseed, nonce);
+  nonce = 1;
+  skpv[KYBER_N:KYBER_N] = _poly_getnoise(skpv[KYBER_N:KYBER_N], noiseseed, nonce);
+  nonce = 2;
+  skpv[2*KYBER_N:KYBER_N] = _poly_getnoise(skpv[2*KYBER_N:KYBER_N], noiseseed, nonce);
+
+  nonce = 3;
+  e[0:KYBER_N] = _poly_getnoise(e[0:KYBER_N], noiseseed, nonce);
+  nonce = 4;
+  e[KYBER_N:KYBER_N] = _poly_getnoise(e[KYBER_N:KYBER_N], noiseseed, nonce);
+  nonce = 5;
+  e[2*KYBER_N:KYBER_N] = _poly_getnoise(e[2*KYBER_N:KYBER_N], noiseseed, nonce);
+
+  skpv = __polyvec_ntt(skpv);
+  e    = __polyvec_ntt(e);
+
+  pkpv[0:KYBER_N] = __polyvec_pointwise_acc(a[0:KYBER_VECN], skpv);
+  pkpv[0:KYBER_N] = _poly_frommont(pkpv[0:KYBER_N]);
+  pkpv[KYBER_N:KYBER_N] = __polyvec_pointwise_acc(a[KYBER_VECN:KYBER_VECN], skpv);
+  pkpv[KYBER_N:KYBER_N] = _poly_frommont(pkpv[KYBER_N:KYBER_N]);
+  pkpv[2*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(a[2*KYBER_VECN:KYBER_VECN], skpv);
+  pkpv[2*KYBER_N:KYBER_N] = _poly_frommont(pkpv[2*KYBER_N:KYBER_N]);
+
+  pkpv = __polyvec_add2(pkpv, e);
+  pkpv = __polyvec_reduce(pkpv);
+
+  pkp = spkp;
+  skp = sskp;
+
+  __polyvec_tobytes(skp, skpv);
+  __polyvec_tobytes(pkp, pkpv);
+
+  pkp += KYBER_POLYVECBYTES; 
+  for i=0 to KYBER_SYMBYTES/8
+  {
+    t64 = publicseed[u64 i];
+    (u64)[pkp] = t64;
+    pkp += 8;
+  }
+}
+
+inline
+fn __indcpa_enc(stack u64 sctp, reg ptr u8[32] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed)
+{
+  stack u16[KYBER_VECN] pkpv sp ep bp;
+  stack u16[KYBER_K*KYBER_VECN] aat;
+  stack u16[KYBER_N] k poly epp v poly0 poly1 poly2;
+  stack u8[KYBER_SYMBYTES] publicseed;
+  reg u64 i j t64;
+  reg u64 ctp;
+  reg u16 t;
+  reg u8 nonce;
+
+  pkpv = __polyvec_frombytes(pkp);
+
+  i = 0;
+  pkp += KYBER_POLYVECBYTES;
+  #bounded
+  while (i < KYBER_SYMBYTES/8)
+  {
+    t64 = (u64)[pkp];
+    publicseed.[u64 8 * (int)i] = t64;
+    pkp += 8;
+    i += 1;
+  }
+
+  k = _i_poly_frommsg(k, msgp);
+
+  aat = __gen_matrix(publicseed, 1);
+
+  nonce = 0;
+  sp[0:KYBER_N] = _poly_getnoise(sp[0:KYBER_N], noiseseed, nonce);
+  nonce = 1;
+  sp[KYBER_N:KYBER_N] = _poly_getnoise(sp[KYBER_N:KYBER_N], noiseseed, nonce);
+  nonce = 2;
+  sp[2*KYBER_N:KYBER_N] = _poly_getnoise(sp[2*KYBER_N:KYBER_N], noiseseed, nonce);
+
+  nonce = 3;
+  ep[0:KYBER_N] = _poly_getnoise(ep[0:KYBER_N], noiseseed, nonce);
+  nonce = 4;
+  ep[KYBER_N:KYBER_N] = _poly_getnoise(ep[KYBER_N:KYBER_N], noiseseed, nonce);
+  nonce = 5;
+  ep[2*KYBER_N:KYBER_N] = _poly_getnoise(ep[2*KYBER_N:KYBER_N], noiseseed, nonce);
+
+  nonce = 6;
+  epp = _poly_getnoise(epp, noiseseed, nonce);
+
+  sp = __polyvec_ntt(sp);
+    
+  bp[0:KYBER_N] = __polyvec_pointwise_acc(aat[0:KYBER_VECN], sp);
+  bp[KYBER_N:KYBER_N]= __polyvec_pointwise_acc(aat[KYBER_VECN:KYBER_VECN], sp);
+  bp[2*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(aat[2*KYBER_VECN:KYBER_VECN], sp);
+  
+  v = __polyvec_pointwise_acc(pkpv, sp);
+
+  bp = __polyvec_invntt(bp);
+  v = _poly_invntt(v);
+
+  bp = __polyvec_add2(bp, ep);
+  v = _poly_add2(v, epp);
+  v = _poly_add2(v, k);
+  bp = __polyvec_reduce(bp);
+  v  = __poly_reduce(v);
+
+  ctp = sctp;
+  __polyvec_compress(ctp, bp);
+  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
+  v = _poly_compress(ctp, v);
+}
+
+inline
+fn __iindcpa_enc(reg ptr u8[KYBER_CT_LEN] ctp, reg ptr u8[32] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed) -> reg ptr u8[KYBER_CT_LEN]
+{
+  stack u16[KYBER_VECN] pkpv sp ep bp;
+  stack u16[KYBER_K*KYBER_VECN] aat;
+  stack u16[KYBER_N] k poly epp v poly0 poly1 poly2;
+  stack u8[KYBER_SYMBYTES] publicseed;
+  reg u64 i j t64;
+  reg u16 t;
+  reg u8 nonce;
+  stack ptr u8[KYBER_CT_LEN] sctp;
+
+  sctp = ctp;
+
+  pkpv = __polyvec_frombytes(pkp);
+
+  i = 0;
+  pkp += KYBER_POLYVECBYTES;
+  #bounded
+  while (i < KYBER_SYMBYTES/8)
+  {
+    t64 = (u64)[pkp];
+    publicseed.[u64 8*(int)i] = t64;
+    pkp += 8;
+    i += 1;
+  }
+
+  k = _i_poly_frommsg(k, msgp);
+
+  aat = __gen_matrix(publicseed, 1);
+
+  nonce = 0;
+  sp[0:KYBER_N] = _poly_getnoise(sp[0:KYBER_N], noiseseed, nonce);
+  nonce = 1;
+  sp[KYBER_N:KYBER_N] = _poly_getnoise(sp[KYBER_N:KYBER_N], noiseseed, nonce);
+  nonce = 2;
+  sp[2*KYBER_N:KYBER_N] = _poly_getnoise(sp[2*KYBER_N:KYBER_N], noiseseed, nonce);
+
+  nonce = 3;
+  ep[0:KYBER_N] = _poly_getnoise(ep[0:KYBER_N], noiseseed, nonce);
+  nonce = 4;
+  ep[KYBER_N:KYBER_N] = _poly_getnoise(ep[KYBER_N:KYBER_N], noiseseed, nonce);
+  nonce = 5;
+  ep[2*KYBER_N:KYBER_N] = _poly_getnoise(ep[2*KYBER_N:KYBER_N], noiseseed, nonce);
+
+  nonce = 6;
+  epp = _poly_getnoise(epp, noiseseed, nonce);
+
+  sp = __polyvec_ntt(sp);
+    
+  bp[0:KYBER_N] = __polyvec_pointwise_acc(aat[0:KYBER_VECN], sp);
+  bp[KYBER_N:KYBER_N]= __polyvec_pointwise_acc(aat[KYBER_VECN:KYBER_VECN], sp);
+  bp[2*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(aat[2*KYBER_VECN:KYBER_VECN], sp);
+  
+  v = __polyvec_pointwise_acc(pkpv, sp);
+
+  bp = __polyvec_invntt(bp);
+  v = _poly_invntt(v);
+
+  bp = __polyvec_add2(bp, ep);
+  v = _poly_add2(v, epp);
+  v = _poly_add2(v, k);
+  bp = __polyvec_reduce(bp);
+  v  = __poly_reduce(v);
+
+  ctp = sctp;
+  ctp[0:KYBER_POLYVECCOMPRESSEDBYTES] = __i_polyvec_compress(ctp[0:KYBER_POLYVECCOMPRESSEDBYTES], bp);
+  ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v = _i_poly_compress(ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v);
+
+  return ctp;
+}
+
+
+inline
+fn __indcpa_dec(reg ptr u8[KYBER_MSGBYTES] msgp, reg u64 ctp, reg u64 skp) -> reg ptr u8[KYBER_N/8]
+{
+  stack u16[KYBER_N] t v mp;
+  stack u16[KYBER_VECN] bp skpv;
+
+  bp = __polyvec_decompress(ctp);
+  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
+  v = _poly_decompress(v, ctp);
+
+  skpv = __polyvec_frombytes(skp);
+  
+  bp = __polyvec_ntt(bp);
+  t = __polyvec_pointwise_acc(skpv, bp);
+  t = _poly_invntt(t );
+
+  mp = _poly_sub(mp, v, t);
+  mp = __poly_reduce(mp);
+  
+  msgp, mp = _i_poly_tomsg(msgp, mp);
+
+  return msgp;
+}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/kem.jazz b/src/kem/kyber/libjade_kyber768_amd64_ref/kem.jazz
new file mode 100644
index 0000000000..0f74b72634
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/kem.jazz
@@ -0,0 +1,66 @@
+require "params.jinc"
+require "kem.jinc"
+from Jade require "common/tofromstack.jinc"
+
+export fn jade_kem_kyber_kyber768_amd64_ref_keypair_derand(reg u64 public_key secret_key coins) -> reg u64
+{
+  reg u64 r;
+  stack u8[2*KYBER_SYMBYTES] stack_coins;
+
+  public_key = public_key;
+  secret_key = secret_key;
+  stack_coins = __tostack64u8(stack_coins, coins);
+  _crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber768_amd64_ref_keypair(reg u64 public_key secret_key) -> reg u64
+{
+  reg u64 r;
+  stack u8[2*KYBER_SYMBYTES] stack_coins;
+
+  public_key = public_key;
+  secret_key = secret_key;
+  stack_coins = #randombytes(stack_coins);
+  _crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber768_amd64_ref_enc_derand(reg u64 ciphertext shared_secret public_key coins) -> reg u64
+{
+  reg u64 r;
+  stack u8[KYBER_SYMBYTES] stack_coins;
+  
+  ciphertext = ciphertext;
+  shared_secret = shared_secret;
+  public_key = public_key;
+  stack_coins = __tostack32u8(stack_coins, coins);
+  _crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber768_amd64_ref_enc(reg u64 ciphertext shared_secret public_key) -> reg u64
+{
+  reg u64 r;
+  stack u8[KYBER_SYMBYTES] stack_coins;
+
+  ciphertext = ciphertext;
+  shared_secret = shared_secret;
+  public_key = public_key;
+  stack_coins = #randombytes(stack_coins);
+  _crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
+  ?{}, r = #set0();
+  return r;
+}
+
+export fn jade_kem_kyber_kyber768_amd64_ref_dec(reg u64 shared_secret ciphertext secret_key) -> reg u64
+{
+  reg u64 r;
+  __crypto_kem_dec_jazz(shared_secret, ciphertext, secret_key);
+  ?{}, r = #set0();
+  return r;
+}
+
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/kem.jinc b/src/kem/kyber/libjade_kyber768_amd64_ref/kem.jinc
new file mode 100644
index 0000000000..12f2dbdb3d
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/kem.jinc
@@ -0,0 +1,150 @@
+
+// from Jade require "crypto_kem/kyber/kyber768/common/params.jinc" // TODO: when hakyber avx2
+from Jade require "crypto_kem/kyber/kyber768/amd64/ref/params.jinc"
+
+require "indcpa.jinc"
+require "verify.jinc"
+
+#[returnaddress="stack"]
+fn _crypto_kem_keypair_derand_jazz(reg u64 pkp, reg u64 skp, reg ptr u8[KYBER_SYMBYTES*2] randomnessp)
+{
+  stack ptr u8[KYBER_SYMBYTES*2] s_randomnessp;
+  reg ptr u8[KYBER_SYMBYTES] randomnessp1 randomnessp2;
+
+  stack u8[32] h_pk;
+  stack u64 s_skp s_pkp;
+  reg u64 t64;
+  inline int i;
+
+  s_randomnessp = randomnessp;
+  s_pkp = pkp;
+  s_skp = skp;
+
+  randomnessp1 = randomnessp[0:KYBER_SYMBYTES];
+  __indcpa_keypair_derand(pkp, skp, randomnessp1);
+
+  skp = s_skp;
+  skp += KYBER_POLYVECBYTES;
+  pkp = s_pkp;
+
+  for i=0 to KYBER_INDCPA_PUBLICKEYBYTES/8
+  {
+    t64 = (u64)[pkp + 8*i];
+    (u64)[skp] = t64;
+    skp += 8;
+  }
+
+  s_skp = skp;
+  pkp = s_pkp;
+  t64 = KYBER_POLYVECBYTES + KYBER_SYMBYTES;
+  h_pk = _sha3_256(h_pk, pkp, t64);
+  skp = s_skp;
+
+  for i=0 to 4
+  {
+    t64 = h_pk[u64 i];
+    (u64)[skp] = t64;
+    skp += 8;
+  }
+
+  randomnessp = s_randomnessp;
+  randomnessp2 = randomnessp[KYBER_SYMBYTES:KYBER_SYMBYTES];
+  for i=0 to KYBER_SYMBYTES/8
+  {
+    t64 = randomnessp2[u64 i];
+    (u64)[skp] = t64;
+    skp += 8;
+  }
+}
+
+#[returnaddress="stack"]
+fn _crypto_kem_enc_derand_jazz(reg u64 ctp, reg u64 shkp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] randomnessp)
+{
+  inline int i;
+
+  stack u8[KYBER_SYMBYTES * 2] buf kr;
+  stack u64 s_pkp s_ctp s_shkp;
+  reg u64 t64;
+
+  s_pkp = pkp;
+  s_ctp = ctp;
+  s_shkp = shkp;
+
+  for i=0 to KYBER_SYMBYTES/8
+  {
+    t64 = randomnessp[u64 i];
+    kr[u64 i] = t64;
+  }
+
+  buf[0:KYBER_SYMBYTES] = _sha3_256_32(buf[0:KYBER_SYMBYTES], kr[0:KYBER_SYMBYTES]);
+
+  pkp = s_pkp;
+
+  t64 = KYBER_PUBLICKEYBYTES;
+  buf[KYBER_SYMBYTES:KYBER_SYMBYTES] = _sha3_256(buf[KYBER_SYMBYTES:KYBER_SYMBYTES], pkp, t64);
+
+  kr = _sha3_512_64(kr, buf);
+
+  pkp = s_pkp;
+
+  __indcpa_enc(s_ctp, buf[0:KYBER_SYMBYTES], pkp, kr[KYBER_SYMBYTES:KYBER_SYMBYTES]);
+
+  ctp = s_ctp;
+  t64 = KYBER_CT_LEN;
+  kr[KYBER_SYMBYTES:KYBER_SYMBYTES] = _sha3_256(kr[KYBER_SYMBYTES:KYBER_SYMBYTES], ctp, t64);
+
+  shkp = s_shkp;
+  t64 = KYBER_SSBYTES;
+  _shake256_64(shkp, t64, kr);
+}
+
+inline
+fn __crypto_kem_dec_jazz(reg u64 shkp, reg u64 ctp, reg u64 skp)
+{
+  stack u8[KYBER_CT_LEN] ctpc;
+  stack u8[2*KYBER_SYMBYTES] kr buf;
+  stack u64 s_skp s_ctp s_shkp;
+  reg u64 pkp hp zp t64 cnd;
+  inline int i;
+
+  s_shkp = shkp;
+  s_ctp = ctp;
+
+  buf[0:KYBER_MSGBYTES] = __indcpa_dec(buf[0:KYBER_MSGBYTES], ctp, skp);
+
+  hp = #LEA(skp + 32); // avoid -lea
+  //hp += 24 * KYBER_K * KYBER_N>>3;
+  hp += 3 * KYBER_K * KYBER_N;
+
+  for i=0 to KYBER_SYMBYTES/8
+  {
+    t64 = (u64)[hp + 8*i];
+    buf.[u64 KYBER_SYMBYTES + 8*i] = t64;
+  }
+
+  s_skp = skp;
+
+  kr = _sha3_512_64(kr, buf);
+
+  pkp = s_skp;
+  //pkp += 12 * KYBER_K * KYBER_N>>3;
+  pkp += 12 * KYBER_K * 32;
+
+  ctpc = __iindcpa_enc(ctpc, buf[0:KYBER_SYMBYTES], pkp, kr[KYBER_SYMBYTES:KYBER_SYMBYTES]);
+
+  ctp = s_ctp;
+  cnd = __verify(ctp, ctpc);
+
+  zp = s_skp;
+  zp += 64;
+  //zp += 24 * KYBER_K * KYBER_N>>3;
+  zp += 3 * KYBER_K * KYBER_N;
+  kr[0:KYBER_SYMBYTES] = __cmov(kr[0:KYBER_SYMBYTES], zp, cnd);
+
+  t64 = KYBER_CT_LEN;
+  kr[KYBER_SYMBYTES:KYBER_SYMBYTES] = _sha3_256(kr[KYBER_SYMBYTES:KYBER_SYMBYTES], ctp, t64);
+
+  shkp = s_shkp;
+  t64 = KYBER_SSBYTES;
+  _shake256_64(shkp, t64, kr);
+}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/kem.s b/src/kem/kyber/libjade_kyber768_amd64_ref/kem.s
new file mode 100644
index 0000000000..101b6399d6
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/kem.s
@@ -0,0 +1,18927 @@
+	.att_syntax
+	.text
+	.p2align	5
+	.globl	_jade_kem_kyber_kyber768_amd64_ref_dec
+	.globl	jade_kem_kyber_kyber768_amd64_ref_dec
+	.globl	_jade_kem_kyber_kyber768_amd64_ref_enc
+	.globl	jade_kem_kyber_kyber768_amd64_ref_enc
+	.globl	_jade_kem_kyber_kyber768_amd64_ref_enc_derand
+	.globl	jade_kem_kyber_kyber768_amd64_ref_enc_derand
+	.globl	_jade_kem_kyber_kyber768_amd64_ref_keypair
+	.globl	jade_kem_kyber_kyber768_amd64_ref_keypair
+	.globl	_jade_kem_kyber_kyber768_amd64_ref_keypair_derand
+	.globl	jade_kem_kyber_kyber768_amd64_ref_keypair_derand
+_jade_kem_kyber_kyber768_amd64_ref_dec:
+jade_kem_kyber_kyber768_amd64_ref_dec:
+	movq	%rsp, %rax
+	leaq	-14560(%rsp), %rsp
+	andq	$-8, %rsp
+	movq	%rax, 14552(%rsp)
+	movq	%r15, 14504(%rsp)
+	movq	%r14, 14512(%rsp)
+	movq	%r13, 14520(%rsp)
+	movq	%r12, 14528(%rsp)
+	movq	%rbp, 14536(%rsp)
+	movq	%rbx, 14544(%rsp)
+	movq	%rdi, (%rsp)
+	movq	%rsi, 8(%rsp)
+	leaq	80(%rsp), %rax
+	movq	$0, %rcx
+	movq	$0, %rdi
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$225
+Ljade_kem_kyber_kyber768_amd64_ref_dec$226:
+	movzbl	(%rsi,%rdi), %r10d
+	incq	%rdi
+	movzbl	(%rsi,%rdi), %r11d
+	incq	%rdi
+	movzbl	(%rsi,%rdi), %r8d
+	incq	%rdi
+	movzbl	(%rsi,%rdi), %r9d
+	incq	%rdi
+	movzbl	(%rsi,%rdi), %ebx
+	incq	%rdi
+	movl	%r11d, %ebp
+	shrl	$2, %r11d
+	andl	$3, %ebp
+	shll	$8, %ebp
+	orl 	%ebp, %r10d
+	movl	%r8d, %ebp
+	shrl	$4, %r8d
+	andl	$15, %ebp
+	shll	$6, %ebp
+	orl 	%ebp, %r11d
+	movl	%r9d, %ebp
+	shrl	$6, %r9d
+	andl	$63, %ebp
+	shll	$4, %ebp
+	orl 	%ebp, %r8d
+	shll	$2, %ebx
+	orl 	%ebx, %r9d
+	imull	$3329, %r10d, %r10d
+	addl	$512, %r10d
+	shrl	$10, %r10d
+	movw	%r10w, 2456(%rsp,%rcx,2)
+	incq	%rcx
+	imull	$3329, %r11d, %r10d
+	addl	$512, %r10d
+	shrl	$10, %r10d
+	movw	%r10w, 2456(%rsp,%rcx,2)
+	incq	%rcx
+	imull	$3329, %r8d, %r8d
+	addl	$512, %r8d
+	shrl	$10, %r8d
+	movw	%r8w, 2456(%rsp,%rcx,2)
+	incq	%rcx
+	imull	$3329, %r9d, %r8d
+	addl	$512, %r8d
+	shrl	$10, %r8d
+	movw	%r8w, 2456(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$225:
+	cmpq	$768, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$226
+	addq	$960, %rsi
+	leaq	920(%rsp), %rcx
+	call	L_poly_decompress$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$224:
+	movq	%rdx, %rsi
+	leaq	3992(%rsp), %rdi
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$223:
+	addq	$384, %rsi
+	leaq	4504(%rsp), %rdi
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$222:
+	addq	$384, %rsi
+	leaq	5016(%rsp), %rdi
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$221:
+	leaq	2456(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$220:
+	leaq	2968(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$219:
+	leaq	3480(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$218:
+	leaq	408(%rsp), %rdi
+	leaq	3992(%rsp), %rcx
+	leaq	2456(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$217:
+	leaq	16(%rsp), %rsp
+	leaq	1432(%rsp), %rdi
+	leaq	4504(%rsp), %rcx
+	leaq	2968(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$216:
+	leaq	16(%rsp), %rsp
+	leaq	408(%rsp), %rcx
+	leaq	1432(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$215:
+	leaq	1432(%rsp), %rdi
+	leaq	5016(%rsp), %rcx
+	leaq	3480(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$214:
+	leaq	16(%rsp), %rsp
+	leaq	408(%rsp), %rcx
+	leaq	1432(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$213:
+	leaq	408(%rsp), %rcx
+	movq	$0, %rsi
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$211
+Ljade_kem_kyber_kyber768_amd64_ref_dec$212:
+	movw	(%rcx,%rsi,2), %di
+	movswl	%di, %r8d
+	imull	$20159, %r8d, %r8d
+	sarl	$26, %r8d
+	imull	$3329, %r8d, %r8d
+	subw	%r8w, %di
+	movw	%di, (%rcx,%rsi,2)
+	incq	%rsi
+Ljade_kem_kyber_kyber768_amd64_ref_dec$211:
+	cmpq	$256, %rsi
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$212
+	leaq	408(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$210:
+	leaq	1432(%rsp), %rcx
+	leaq	920(%rsp), %rsi
+	leaq	408(%rsp), %rdi
+	call	L_poly_sub$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$209:
+	leaq	1432(%rsp), %rcx
+	movq	$0, %rsi
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$207
+Ljade_kem_kyber_kyber768_amd64_ref_dec$208:
+	movw	(%rcx,%rsi,2), %di
+	movswl	%di, %r8d
+	imull	$20159, %r8d, %r8d
+	sarl	$26, %r8d
+	imull	$3329, %r8d, %r8d
+	subw	%r8w, %di
+	movw	%di, (%rcx,%rsi,2)
+	incq	%rsi
+Ljade_kem_kyber_kyber768_amd64_ref_dec$207:
+	cmpq	$256, %rsi
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$208
+	leaq	1432(%rsp), %rcx
+	call	L_i_poly_tomsg$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$206:
+	leaq	32(%rdx), %rax
+	addq	$2304, %rax
+	movq	(%rax), %rcx
+	movq	%rcx, 112(%rsp)
+	movq	8(%rax), %rcx
+	movq	%rcx, 120(%rsp)
+	movq	16(%rax), %rcx
+	movq	%rcx, 128(%rsp)
+	movq	24(%rax), %rax
+	movq	%rax, 136(%rsp)
+	movq	%rdx, 16(%rsp)
+	leaq	144(%rsp), %rax
+	leaq	80(%rsp), %rdx
+	leaq	-208(%rsp), %rsp
+	call	L_sha3_512_64$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$205:
+	leaq	208(%rsp), %rsp
+	movq	16(%rsp), %rdx
+	addq	$1152, %rdx
+	leaq	13410(%rsp), %rsi
+	leaq	80(%rsp), %rcx
+	leaq	176(%rsp), %rax
+	movq	%rsi, 24(%rsp)
+	movq	%rdx, %rsi
+	leaq	2456(%rsp), %rdi
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$204:
+	addq	$384, %rsi
+	leaq	2968(%rsp), %rdi
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$203:
+	addq	$384, %rsi
+	leaq	3480(%rsp), %rdi
+	call	L_poly_frombytes$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$202:
+	movq	$0, %rsi
+	addq	$1152, %rdx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$200
+Ljade_kem_kyber_kyber768_amd64_ref_dec$201:
+	movq	(%rdx), %rdi
+	movq	%rdi, 48(%rsp,%rsi,8)
+	addq	$8, %rdx
+	incq	%rsi
+Ljade_kem_kyber_kyber768_amd64_ref_dec$200:
+	cmpq	$4, %rsi
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$201
+	leaq	1432(%rsp), %rdx
+	call	L_i_poly_frommsg$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$199:
+	movq	$1, %rcx
+	movq	%rcx, 32(%rsp)
+	movb	48(%rsp), %cl
+	movb	%cl, 13208(%rsp)
+	movb	49(%rsp), %cl
+	movb	%cl, 13209(%rsp)
+	movb	50(%rsp), %cl
+	movb	%cl, 13210(%rsp)
+	movb	51(%rsp), %cl
+	movb	%cl, 13211(%rsp)
+	movb	52(%rsp), %cl
+	movb	%cl, 13212(%rsp)
+	movb	53(%rsp), %cl
+	movb	%cl, 13213(%rsp)
+	movb	54(%rsp), %cl
+	movb	%cl, 13214(%rsp)
+	movb	55(%rsp), %cl
+	movb	%cl, 13215(%rsp)
+	movb	56(%rsp), %cl
+	movb	%cl, 13216(%rsp)
+	movb	57(%rsp), %cl
+	movb	%cl, 13217(%rsp)
+	movb	58(%rsp), %cl
+	movb	%cl, 13218(%rsp)
+	movb	59(%rsp), %cl
+	movb	%cl, 13219(%rsp)
+	movb	60(%rsp), %cl
+	movb	%cl, 13220(%rsp)
+	movb	61(%rsp), %cl
+	movb	%cl, 13221(%rsp)
+	movb	62(%rsp), %cl
+	movb	%cl, 13222(%rsp)
+	movb	63(%rsp), %cl
+	movb	%cl, 13223(%rsp)
+	movb	64(%rsp), %cl
+	movb	%cl, 13224(%rsp)
+	movb	65(%rsp), %cl
+	movb	%cl, 13225(%rsp)
+	movb	66(%rsp), %cl
+	movb	%cl, 13226(%rsp)
+	movb	67(%rsp), %cl
+	movb	%cl, 13227(%rsp)
+	movb	68(%rsp), %cl
+	movb	%cl, 13228(%rsp)
+	movb	69(%rsp), %cl
+	movb	%cl, 13229(%rsp)
+	movb	70(%rsp), %cl
+	movb	%cl, 13230(%rsp)
+	movb	71(%rsp), %cl
+	movb	%cl, 13231(%rsp)
+	movb	72(%rsp), %cl
+	movb	%cl, 13232(%rsp)
+	movb	73(%rsp), %cl
+	movb	%cl, 13233(%rsp)
+	movb	74(%rsp), %cl
+	movb	%cl, 13234(%rsp)
+	movb	75(%rsp), %cl
+	movb	%cl, 13235(%rsp)
+	movb	76(%rsp), %cl
+	movb	%cl, 13236(%rsp)
+	movb	77(%rsp), %cl
+	movb	%cl, 13237(%rsp)
+	movb	78(%rsp), %cl
+	movb	%cl, 13238(%rsp)
+	movb	79(%rsp), %cl
+	movb	%cl, 13239(%rsp)
+	movq	32(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	Ljade_kem_kyber_kyber768_amd64_ref_dec$197
+	movb	$0, 13240(%rsp)
+	movb	$0, 13241(%rsp)
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$198
+Ljade_kem_kyber_kyber768_amd64_ref_dec$197:
+	movb	$0, 13240(%rsp)
+	movb	$0, 13241(%rsp)
+Ljade_kem_kyber_kyber768_amd64_ref_dec$198:
+	leaq	208(%rsp), %rcx
+	leaq	13208(%rsp), %rdx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$196:
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$194
+Ljade_kem_kyber_kyber768_amd64_ref_dec$195:
+	movq	%rcx, 408(%rsp,%rcx,8)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$194:
+	cmpq	$64, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$195
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$186
+Ljade_kem_kyber_kyber768_amd64_ref_dec$187:
+	movq	%rcx, 40(%rsp)
+	leaq	208(%rsp), %rcx
+	leaq	13242(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$193:
+	leaq	8(%rsp), %rsp
+	movq	40(%rsp), %rcx
+	movq	$0, %rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$188:
+	movzbw	13242(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$191
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$191
+	movw	%si, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$192:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$191:
+	cmpw	$3329, %r8w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$189
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$189
+	movw	%r8w, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$190:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$189:
+	cmpq	$166, %rdx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$188
+Ljade_kem_kyber_kyber768_amd64_ref_dec$186:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$187
+	movq	$0, %rcx
+	movq	$0, %rdx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$184
+Ljade_kem_kyber_kyber768_amd64_ref_dec$185:
+	movw	408(%rsp,%rcx,2), %si
+	movw	%si, 8600(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$184:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$185
+	movq	32(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	Ljade_kem_kyber_kyber768_amd64_ref_dec$182
+	movb	$0, 13240(%rsp)
+	movb	$1, 13241(%rsp)
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$183
+Ljade_kem_kyber_kyber768_amd64_ref_dec$182:
+	movb	$1, 13240(%rsp)
+	movb	$0, 13241(%rsp)
+Ljade_kem_kyber_kyber768_amd64_ref_dec$183:
+	leaq	208(%rsp), %rcx
+	leaq	13208(%rsp), %rdx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$181:
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$179
+Ljade_kem_kyber_kyber768_amd64_ref_dec$180:
+	movq	%rcx, 408(%rsp,%rcx,8)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$179:
+	cmpq	$64, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$180
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$171
+Ljade_kem_kyber_kyber768_amd64_ref_dec$172:
+	movq	%rcx, 40(%rsp)
+	leaq	208(%rsp), %rcx
+	leaq	13242(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$178:
+	leaq	8(%rsp), %rsp
+	movq	40(%rsp), %rcx
+	movq	$0, %rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$173:
+	movzbw	13242(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$176
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$176
+	movw	%si, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$177:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$176:
+	cmpw	$3329, %r8w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$174
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$174
+	movw	%r8w, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$175:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$174:
+	cmpq	$166, %rdx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$173
+Ljade_kem_kyber_kyber768_amd64_ref_dec$171:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$172
+	movq	$0, %rcx
+	movq	$256, %rdx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$169
+Ljade_kem_kyber_kyber768_amd64_ref_dec$170:
+	movw	408(%rsp,%rcx,2), %si
+	movw	%si, 8600(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$169:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$170
+	movq	32(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	Ljade_kem_kyber_kyber768_amd64_ref_dec$167
+	movb	$0, 13240(%rsp)
+	movb	$2, 13241(%rsp)
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$168
+Ljade_kem_kyber_kyber768_amd64_ref_dec$167:
+	movb	$2, 13240(%rsp)
+	movb	$0, 13241(%rsp)
+Ljade_kem_kyber_kyber768_amd64_ref_dec$168:
+	leaq	208(%rsp), %rcx
+	leaq	13208(%rsp), %rdx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$166:
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$164
+Ljade_kem_kyber_kyber768_amd64_ref_dec$165:
+	movq	%rcx, 408(%rsp,%rcx,8)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$164:
+	cmpq	$64, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$165
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$156
+Ljade_kem_kyber_kyber768_amd64_ref_dec$157:
+	movq	%rcx, 40(%rsp)
+	leaq	208(%rsp), %rcx
+	leaq	13242(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$163:
+	leaq	8(%rsp), %rsp
+	movq	40(%rsp), %rcx
+	movq	$0, %rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$158:
+	movzbw	13242(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$161
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$161
+	movw	%si, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$162:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$161:
+	cmpw	$3329, %r8w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$159
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$159
+	movw	%r8w, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$160:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$159:
+	cmpq	$166, %rdx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$158
+Ljade_kem_kyber_kyber768_amd64_ref_dec$156:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$157
+	movq	$0, %rcx
+	movq	$512, %rdx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$154
+Ljade_kem_kyber_kyber768_amd64_ref_dec$155:
+	movw	408(%rsp,%rcx,2), %si
+	movw	%si, 8600(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$154:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$155
+	movq	32(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	Ljade_kem_kyber_kyber768_amd64_ref_dec$152
+	movb	$1, 13240(%rsp)
+	movb	$0, 13241(%rsp)
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$153
+Ljade_kem_kyber_kyber768_amd64_ref_dec$152:
+	movb	$0, 13240(%rsp)
+	movb	$1, 13241(%rsp)
+Ljade_kem_kyber_kyber768_amd64_ref_dec$153:
+	leaq	208(%rsp), %rcx
+	leaq	13208(%rsp), %rdx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$151:
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$149
+Ljade_kem_kyber_kyber768_amd64_ref_dec$150:
+	movq	%rcx, 408(%rsp,%rcx,8)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$149:
+	cmpq	$64, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$150
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$141
+Ljade_kem_kyber_kyber768_amd64_ref_dec$142:
+	movq	%rcx, 40(%rsp)
+	leaq	208(%rsp), %rcx
+	leaq	13242(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$148:
+	leaq	8(%rsp), %rsp
+	movq	40(%rsp), %rcx
+	movq	$0, %rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$143:
+	movzbw	13242(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$146
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$146
+	movw	%si, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$147:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$146:
+	cmpw	$3329, %r8w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$144
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$144
+	movw	%r8w, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$145:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$144:
+	cmpq	$166, %rdx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$143
+Ljade_kem_kyber_kyber768_amd64_ref_dec$141:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$142
+	movq	$0, %rcx
+	movq	$768, %rdx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$139
+Ljade_kem_kyber_kyber768_amd64_ref_dec$140:
+	movw	408(%rsp,%rcx,2), %si
+	movw	%si, 8600(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$139:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$140
+	movq	32(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	Ljade_kem_kyber_kyber768_amd64_ref_dec$137
+	movb	$1, 13240(%rsp)
+	movb	$1, 13241(%rsp)
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$138
+Ljade_kem_kyber_kyber768_amd64_ref_dec$137:
+	movb	$1, 13240(%rsp)
+	movb	$1, 13241(%rsp)
+Ljade_kem_kyber_kyber768_amd64_ref_dec$138:
+	leaq	208(%rsp), %rcx
+	leaq	13208(%rsp), %rdx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$136:
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$134
+Ljade_kem_kyber_kyber768_amd64_ref_dec$135:
+	movq	%rcx, 408(%rsp,%rcx,8)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$134:
+	cmpq	$64, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$135
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$126
+Ljade_kem_kyber_kyber768_amd64_ref_dec$127:
+	movq	%rcx, 40(%rsp)
+	leaq	208(%rsp), %rcx
+	leaq	13242(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$133:
+	leaq	8(%rsp), %rsp
+	movq	40(%rsp), %rcx
+	movq	$0, %rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$128:
+	movzbw	13242(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$131
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$131
+	movw	%si, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$132:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$131:
+	cmpw	$3329, %r8w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$129
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$129
+	movw	%r8w, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$130:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$129:
+	cmpq	$166, %rdx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$128
+Ljade_kem_kyber_kyber768_amd64_ref_dec$126:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$127
+	movq	$0, %rcx
+	movq	$1024, %rdx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$124
+Ljade_kem_kyber_kyber768_amd64_ref_dec$125:
+	movw	408(%rsp,%rcx,2), %si
+	movw	%si, 8600(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$124:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$125
+	movq	32(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	Ljade_kem_kyber_kyber768_amd64_ref_dec$122
+	movb	$1, 13240(%rsp)
+	movb	$2, 13241(%rsp)
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$123
+Ljade_kem_kyber_kyber768_amd64_ref_dec$122:
+	movb	$2, 13240(%rsp)
+	movb	$1, 13241(%rsp)
+Ljade_kem_kyber_kyber768_amd64_ref_dec$123:
+	leaq	208(%rsp), %rcx
+	leaq	13208(%rsp), %rdx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$121:
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$119
+Ljade_kem_kyber_kyber768_amd64_ref_dec$120:
+	movq	%rcx, 408(%rsp,%rcx,8)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$119:
+	cmpq	$64, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$120
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$111
+Ljade_kem_kyber_kyber768_amd64_ref_dec$112:
+	movq	%rcx, 40(%rsp)
+	leaq	208(%rsp), %rcx
+	leaq	13242(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$118:
+	leaq	8(%rsp), %rsp
+	movq	40(%rsp), %rcx
+	movq	$0, %rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$113:
+	movzbw	13242(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$116
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$116
+	movw	%si, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$117:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$116:
+	cmpw	$3329, %r8w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$114
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$114
+	movw	%r8w, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$115:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$114:
+	cmpq	$166, %rdx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$113
+Ljade_kem_kyber_kyber768_amd64_ref_dec$111:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$112
+	movq	$0, %rcx
+	movq	$1280, %rdx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$109
+Ljade_kem_kyber_kyber768_amd64_ref_dec$110:
+	movw	408(%rsp,%rcx,2), %si
+	movw	%si, 8600(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$109:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$110
+	movq	32(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	Ljade_kem_kyber_kyber768_amd64_ref_dec$107
+	movb	$2, 13240(%rsp)
+	movb	$0, 13241(%rsp)
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$108
+Ljade_kem_kyber_kyber768_amd64_ref_dec$107:
+	movb	$0, 13240(%rsp)
+	movb	$2, 13241(%rsp)
+Ljade_kem_kyber_kyber768_amd64_ref_dec$108:
+	leaq	208(%rsp), %rcx
+	leaq	13208(%rsp), %rdx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$106:
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$104
+Ljade_kem_kyber_kyber768_amd64_ref_dec$105:
+	movq	%rcx, 408(%rsp,%rcx,8)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$104:
+	cmpq	$64, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$105
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$96
+Ljade_kem_kyber_kyber768_amd64_ref_dec$97:
+	movq	%rcx, 40(%rsp)
+	leaq	208(%rsp), %rcx
+	leaq	13242(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$103:
+	leaq	8(%rsp), %rsp
+	movq	40(%rsp), %rcx
+	movq	$0, %rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$98:
+	movzbw	13242(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$101
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$101
+	movw	%si, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$102:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$101:
+	cmpw	$3329, %r8w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$99
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$99
+	movw	%r8w, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$100:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$99:
+	cmpq	$166, %rdx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$98
+Ljade_kem_kyber_kyber768_amd64_ref_dec$96:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$97
+	movq	$0, %rcx
+	movq	$1536, %rdx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$94
+Ljade_kem_kyber_kyber768_amd64_ref_dec$95:
+	movw	408(%rsp,%rcx,2), %si
+	movw	%si, 8600(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$94:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$95
+	movq	32(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	Ljade_kem_kyber_kyber768_amd64_ref_dec$92
+	movb	$2, 13240(%rsp)
+	movb	$1, 13241(%rsp)
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$93
+Ljade_kem_kyber_kyber768_amd64_ref_dec$92:
+	movb	$1, 13240(%rsp)
+	movb	$2, 13241(%rsp)
+Ljade_kem_kyber_kyber768_amd64_ref_dec$93:
+	leaq	208(%rsp), %rcx
+	leaq	13208(%rsp), %rdx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$91:
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$89
+Ljade_kem_kyber_kyber768_amd64_ref_dec$90:
+	movq	%rcx, 408(%rsp,%rcx,8)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$89:
+	cmpq	$64, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$90
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$81
+Ljade_kem_kyber_kyber768_amd64_ref_dec$82:
+	movq	%rcx, 40(%rsp)
+	leaq	208(%rsp), %rcx
+	leaq	13242(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$88:
+	leaq	8(%rsp), %rsp
+	movq	40(%rsp), %rcx
+	movq	$0, %rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$83:
+	movzbw	13242(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$86
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$86
+	movw	%si, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$87:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$86:
+	cmpw	$3329, %r8w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$84
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$84
+	movw	%r8w, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$85:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$84:
+	cmpq	$166, %rdx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$83
+Ljade_kem_kyber_kyber768_amd64_ref_dec$81:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$82
+	movq	$0, %rcx
+	movq	$1792, %rdx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$79
+Ljade_kem_kyber_kyber768_amd64_ref_dec$80:
+	movw	408(%rsp,%rcx,2), %si
+	movw	%si, 8600(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$79:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$80
+	movq	32(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	Ljade_kem_kyber_kyber768_amd64_ref_dec$77
+	movb	$2, 13240(%rsp)
+	movb	$2, 13241(%rsp)
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$78
+Ljade_kem_kyber_kyber768_amd64_ref_dec$77:
+	movb	$2, 13240(%rsp)
+	movb	$2, 13241(%rsp)
+Ljade_kem_kyber_kyber768_amd64_ref_dec$78:
+	leaq	208(%rsp), %rcx
+	leaq	13208(%rsp), %rdx
+	call	L_shake128_absorb34$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$76:
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$74
+Ljade_kem_kyber_kyber768_amd64_ref_dec$75:
+	movq	%rcx, 408(%rsp,%rcx,8)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$74:
+	cmpq	$64, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$75
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$66
+Ljade_kem_kyber_kyber768_amd64_ref_dec$67:
+	movq	%rcx, 32(%rsp)
+	leaq	208(%rsp), %rcx
+	leaq	13242(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$73:
+	leaq	8(%rsp), %rsp
+	movq	32(%rsp), %rcx
+	movq	$0, %rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$68:
+	movzbw	13242(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13242(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$71
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$71
+	movw	%si, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$72:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$71:
+	cmpw	$3329, %r8w
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$69
+	cmpq	$256, %rcx
+	jnb 	Ljade_kem_kyber_kyber768_amd64_ref_dec$69
+	movw	%r8w, 408(%rsp,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$70:
+Ljade_kem_kyber_kyber768_amd64_ref_dec$69:
+	cmpq	$166, %rdx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$68
+Ljade_kem_kyber_kyber768_amd64_ref_dec$66:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$67
+	movq	$0, %rcx
+	movq	$2048, %rdx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$64
+Ljade_kem_kyber_kyber768_amd64_ref_dec$65:
+	movw	408(%rsp,%rcx,2), %si
+	movw	%si, 8600(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$64:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$65
+	movb	$0, %cl
+	leaq	3992(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$63:
+	leaq	176(%rsp), %rsp
+	movb	$1, %cl
+	leaq	4504(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$62:
+	leaq	176(%rsp), %rsp
+	movb	$2, %cl
+	leaq	5016(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$61:
+	leaq	176(%rsp), %rsp
+	movb	$3, %cl
+	leaq	5528(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$60:
+	leaq	176(%rsp), %rsp
+	movb	$4, %cl
+	leaq	6040(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$59:
+	leaq	176(%rsp), %rsp
+	movb	$5, %cl
+	leaq	6552(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$58:
+	leaq	176(%rsp), %rsp
+	movb	$6, %cl
+	leaq	408(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$57:
+	leaq	176(%rsp), %rsp
+	leaq	3992(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$56:
+	leaq	4504(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$55:
+	leaq	5016(%rsp), %rcx
+	call	L_poly_ntt$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$54:
+	leaq	7064(%rsp), %rdi
+	leaq	8600(%rsp), %rcx
+	leaq	3992(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$53:
+	leaq	16(%rsp), %rsp
+	leaq	920(%rsp), %rdi
+	leaq	9112(%rsp), %rcx
+	leaq	4504(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$52:
+	leaq	16(%rsp), %rsp
+	leaq	7064(%rsp), %rcx
+	leaq	920(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$51:
+	leaq	920(%rsp), %rdi
+	leaq	9624(%rsp), %rcx
+	leaq	5016(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$50:
+	leaq	16(%rsp), %rsp
+	leaq	7064(%rsp), %rcx
+	leaq	920(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$49:
+	leaq	7064(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$47
+Ljade_kem_kyber_kyber768_amd64_ref_dec$48:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$47:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$48
+	leaq	7576(%rsp), %rdi
+	leaq	10136(%rsp), %rcx
+	leaq	3992(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$46:
+	leaq	16(%rsp), %rsp
+	leaq	920(%rsp), %rdi
+	leaq	10648(%rsp), %rcx
+	leaq	4504(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$45:
+	leaq	16(%rsp), %rsp
+	leaq	7576(%rsp), %rcx
+	leaq	920(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$44:
+	leaq	920(%rsp), %rdi
+	leaq	11160(%rsp), %rcx
+	leaq	5016(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$43:
+	leaq	16(%rsp), %rsp
+	leaq	7576(%rsp), %rcx
+	leaq	920(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$42:
+	leaq	7576(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$40
+Ljade_kem_kyber_kyber768_amd64_ref_dec$41:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$40:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$41
+	leaq	8088(%rsp), %rdi
+	leaq	11672(%rsp), %rcx
+	leaq	3992(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$39:
+	leaq	16(%rsp), %rsp
+	leaq	920(%rsp), %rdi
+	leaq	12184(%rsp), %rcx
+	leaq	4504(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$38:
+	leaq	16(%rsp), %rsp
+	leaq	8088(%rsp), %rcx
+	leaq	920(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$37:
+	leaq	920(%rsp), %rdi
+	leaq	12696(%rsp), %rcx
+	leaq	5016(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$36:
+	leaq	16(%rsp), %rsp
+	leaq	8088(%rsp), %rcx
+	leaq	920(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$35:
+	leaq	8088(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$33
+Ljade_kem_kyber_kyber768_amd64_ref_dec$34:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$33:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$34
+	leaq	920(%rsp), %rdi
+	leaq	2456(%rsp), %rcx
+	leaq	3992(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$32:
+	leaq	16(%rsp), %rsp
+	leaq	1944(%rsp), %rdi
+	leaq	2968(%rsp), %rcx
+	leaq	4504(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$31:
+	leaq	16(%rsp), %rsp
+	leaq	920(%rsp), %rcx
+	leaq	1944(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$30:
+	leaq	1944(%rsp), %rdi
+	leaq	3480(%rsp), %rcx
+	leaq	5016(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$29:
+	leaq	16(%rsp), %rsp
+	leaq	920(%rsp), %rcx
+	leaq	1944(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$28:
+	leaq	920(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$26
+Ljade_kem_kyber_kyber768_amd64_ref_dec$27:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$26:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$27
+	leaq	7064(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$25:
+	leaq	7576(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$24:
+	leaq	8088(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$23:
+	leaq	920(%rsp), %rcx
+	call	L_poly_invntt$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$22:
+	leaq	7064(%rsp), %rcx
+	leaq	5528(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$21:
+	leaq	7576(%rsp), %rcx
+	leaq	6040(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$20:
+	leaq	8088(%rsp), %rcx
+	leaq	6552(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$19:
+	leaq	920(%rsp), %rcx
+	leaq	408(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$18:
+	leaq	920(%rsp), %rcx
+	leaq	1432(%rsp), %rsi
+	call	L_poly_add2$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$17:
+	leaq	7064(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$15
+Ljade_kem_kyber_kyber768_amd64_ref_dec$16:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$15:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$16
+	leaq	7576(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$13
+Ljade_kem_kyber_kyber768_amd64_ref_dec$14:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$13:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$14
+	leaq	8088(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$11
+Ljade_kem_kyber_kyber768_amd64_ref_dec$12:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$11:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$12
+	leaq	920(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$9
+Ljade_kem_kyber_kyber768_amd64_ref_dec$10:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+Ljade_kem_kyber_kyber768_amd64_ref_dec$9:
+	cmpq	$256, %rcx
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$10
+	movq	24(%rsp), %rax
+	movq	%rax, %rdx
+	movq	$0, %rsi
+	movq	$0, %rdi
+	leaq	7064(%rsp), %rcx
+	call	L_poly_csubq$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$8:
+	leaq	7576(%rsp), %rcx
+	call	L_poly_csubq$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$7:
+	leaq	8088(%rsp), %rcx
+	call	L_poly_csubq$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$6:
+	jmp 	Ljade_kem_kyber_kyber768_amd64_ref_dec$4
+Ljade_kem_kyber_kyber768_amd64_ref_dec$5:
+	movzwq	7064(%rsp,%rsi,2), %rcx
+	incq	%rsi
+	shlq	$10, %rcx
+	addq	$1665, %rcx
+	imulq	$1290167, %rcx, %rcx
+	shrq	$32, %rcx
+	andq	$1023, %rcx
+	movzwq	7064(%rsp,%rsi,2), %r8
+	incq	%rsi
+	shlq	$10, %r8
+	addq	$1665, %r8
+	imulq	$1290167, %r8, %r8
+	shrq	$32, %r8
+	andq	$1023, %r8
+	movzwq	7064(%rsp,%rsi,2), %r9
+	incq	%rsi
+	shlq	$10, %r9
+	addq	$1665, %r9
+	imulq	$1290167, %r9, %r9
+	shrq	$32, %r9
+	andq	$1023, %r9
+	movzwq	7064(%rsp,%rsi,2), %r10
+	incq	%rsi
+	shlq	$10, %r10
+	addq	$1665, %r10
+	imulq	$1290167, %r10, %r10
+	shrq	$32, %r10
+	andq	$1023, %r10
+	movw	%cx, %r11w
+	andw	$255, %r11w
+	movb	%r11b, (%rdx,%rdi)
+	incq	%rdi
+	shrw	$8, %cx
+	movw	%r8w, %r11w
+	shlw	$2, %r11w
+	orw 	%cx, %r11w
+	movb	%r11b, (%rdx,%rdi)
+	incq	%rdi
+	shrw	$6, %r8w
+	movw	%r9w, %cx
+	shlw	$4, %cx
+	orw 	%r8w, %cx
+	movb	%cl, (%rdx,%rdi)
+	incq	%rdi
+	shrw	$4, %r9w
+	movw	%r10w, %cx
+	shlw	$6, %cx
+	orw 	%r9w, %cx
+	movb	%cl, (%rdx,%rdi)
+	incq	%rdi
+	shrq	$2, %r10
+	movb	%r10b, (%rdx,%rdi)
+	incq	%rdi
+Ljade_kem_kyber_kyber768_amd64_ref_dec$4:
+	cmpq	$768, %rsi
+	jb  	Ljade_kem_kyber_kyber768_amd64_ref_dec$5
+	leaq	960(%rax), %rax
+	leaq	920(%rsp), %rcx
+	call	L_i_poly_compress$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$3:
+	movq	8(%rsp), %rsi
+	leaq	13410(%rsp), %rax
+	movq	$0, %rcx
+	movb	(%rax), %dl
+	movb	(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1(%rax), %dl
+	movb	1(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	2(%rax), %dl
+	movb	2(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	3(%rax), %dl
+	movb	3(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	4(%rax), %dl
+	movb	4(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	5(%rax), %dl
+	movb	5(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	6(%rax), %dl
+	movb	6(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	7(%rax), %dl
+	movb	7(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	8(%rax), %dl
+	movb	8(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	9(%rax), %dl
+	movb	9(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	10(%rax), %dl
+	movb	10(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	11(%rax), %dl
+	movb	11(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	12(%rax), %dl
+	movb	12(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	13(%rax), %dl
+	movb	13(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	14(%rax), %dl
+	movb	14(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	15(%rax), %dl
+	movb	15(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	16(%rax), %dl
+	movb	16(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	17(%rax), %dl
+	movb	17(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	18(%rax), %dl
+	movb	18(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	19(%rax), %dl
+	movb	19(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	20(%rax), %dl
+	movb	20(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	21(%rax), %dl
+	movb	21(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	22(%rax), %dl
+	movb	22(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	23(%rax), %dl
+	movb	23(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	24(%rax), %dl
+	movb	24(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	25(%rax), %dl
+	movb	25(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	26(%rax), %dl
+	movb	26(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	27(%rax), %dl
+	movb	27(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	28(%rax), %dl
+	movb	28(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	29(%rax), %dl
+	movb	29(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	30(%rax), %dl
+	movb	30(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	31(%rax), %dl
+	movb	31(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	32(%rax), %dl
+	movb	32(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	33(%rax), %dl
+	movb	33(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	34(%rax), %dl
+	movb	34(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	35(%rax), %dl
+	movb	35(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	36(%rax), %dl
+	movb	36(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	37(%rax), %dl
+	movb	37(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	38(%rax), %dl
+	movb	38(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	39(%rax), %dl
+	movb	39(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	40(%rax), %dl
+	movb	40(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	41(%rax), %dl
+	movb	41(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	42(%rax), %dl
+	movb	42(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	43(%rax), %dl
+	movb	43(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	44(%rax), %dl
+	movb	44(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	45(%rax), %dl
+	movb	45(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	46(%rax), %dl
+	movb	46(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	47(%rax), %dl
+	movb	47(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	48(%rax), %dl
+	movb	48(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	49(%rax), %dl
+	movb	49(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	50(%rax), %dl
+	movb	50(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	51(%rax), %dl
+	movb	51(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	52(%rax), %dl
+	movb	52(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	53(%rax), %dl
+	movb	53(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	54(%rax), %dl
+	movb	54(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	55(%rax), %dl
+	movb	55(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	56(%rax), %dl
+	movb	56(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	57(%rax), %dl
+	movb	57(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	58(%rax), %dl
+	movb	58(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	59(%rax), %dl
+	movb	59(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	60(%rax), %dl
+	movb	60(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	61(%rax), %dl
+	movb	61(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	62(%rax), %dl
+	movb	62(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	63(%rax), %dl
+	movb	63(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	64(%rax), %dl
+	movb	64(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	65(%rax), %dl
+	movb	65(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	66(%rax), %dl
+	movb	66(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	67(%rax), %dl
+	movb	67(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	68(%rax), %dl
+	movb	68(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	69(%rax), %dl
+	movb	69(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	70(%rax), %dl
+	movb	70(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	71(%rax), %dl
+	movb	71(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	72(%rax), %dl
+	movb	72(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	73(%rax), %dl
+	movb	73(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	74(%rax), %dl
+	movb	74(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	75(%rax), %dl
+	movb	75(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	76(%rax), %dl
+	movb	76(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	77(%rax), %dl
+	movb	77(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	78(%rax), %dl
+	movb	78(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	79(%rax), %dl
+	movb	79(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	80(%rax), %dl
+	movb	80(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	81(%rax), %dl
+	movb	81(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	82(%rax), %dl
+	movb	82(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	83(%rax), %dl
+	movb	83(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	84(%rax), %dl
+	movb	84(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	85(%rax), %dl
+	movb	85(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	86(%rax), %dl
+	movb	86(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	87(%rax), %dl
+	movb	87(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	88(%rax), %dl
+	movb	88(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	89(%rax), %dl
+	movb	89(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	90(%rax), %dl
+	movb	90(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	91(%rax), %dl
+	movb	91(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	92(%rax), %dl
+	movb	92(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	93(%rax), %dl
+	movb	93(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	94(%rax), %dl
+	movb	94(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	95(%rax), %dl
+	movb	95(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	96(%rax), %dl
+	movb	96(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	97(%rax), %dl
+	movb	97(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	98(%rax), %dl
+	movb	98(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	99(%rax), %dl
+	movb	99(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	100(%rax), %dl
+	movb	100(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	101(%rax), %dl
+	movb	101(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	102(%rax), %dl
+	movb	102(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	103(%rax), %dl
+	movb	103(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	104(%rax), %dl
+	movb	104(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	105(%rax), %dl
+	movb	105(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	106(%rax), %dl
+	movb	106(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	107(%rax), %dl
+	movb	107(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	108(%rax), %dl
+	movb	108(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	109(%rax), %dl
+	movb	109(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	110(%rax), %dl
+	movb	110(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	111(%rax), %dl
+	movb	111(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	112(%rax), %dl
+	movb	112(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	113(%rax), %dl
+	movb	113(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	114(%rax), %dl
+	movb	114(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	115(%rax), %dl
+	movb	115(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	116(%rax), %dl
+	movb	116(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	117(%rax), %dl
+	movb	117(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	118(%rax), %dl
+	movb	118(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	119(%rax), %dl
+	movb	119(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	120(%rax), %dl
+	movb	120(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	121(%rax), %dl
+	movb	121(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	122(%rax), %dl
+	movb	122(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	123(%rax), %dl
+	movb	123(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	124(%rax), %dl
+	movb	124(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	125(%rax), %dl
+	movb	125(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	126(%rax), %dl
+	movb	126(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	127(%rax), %dl
+	movb	127(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	128(%rax), %dl
+	movb	128(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	129(%rax), %dl
+	movb	129(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	130(%rax), %dl
+	movb	130(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	131(%rax), %dl
+	movb	131(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	132(%rax), %dl
+	movb	132(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	133(%rax), %dl
+	movb	133(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	134(%rax), %dl
+	movb	134(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	135(%rax), %dl
+	movb	135(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	136(%rax), %dl
+	movb	136(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	137(%rax), %dl
+	movb	137(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	138(%rax), %dl
+	movb	138(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	139(%rax), %dl
+	movb	139(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	140(%rax), %dl
+	movb	140(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	141(%rax), %dl
+	movb	141(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	142(%rax), %dl
+	movb	142(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	143(%rax), %dl
+	movb	143(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	144(%rax), %dl
+	movb	144(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	145(%rax), %dl
+	movb	145(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	146(%rax), %dl
+	movb	146(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	147(%rax), %dl
+	movb	147(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	148(%rax), %dl
+	movb	148(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	149(%rax), %dl
+	movb	149(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	150(%rax), %dl
+	movb	150(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	151(%rax), %dl
+	movb	151(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	152(%rax), %dl
+	movb	152(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	153(%rax), %dl
+	movb	153(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	154(%rax), %dl
+	movb	154(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	155(%rax), %dl
+	movb	155(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	156(%rax), %dl
+	movb	156(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	157(%rax), %dl
+	movb	157(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	158(%rax), %dl
+	movb	158(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	159(%rax), %dl
+	movb	159(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	160(%rax), %dl
+	movb	160(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	161(%rax), %dl
+	movb	161(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	162(%rax), %dl
+	movb	162(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	163(%rax), %dl
+	movb	163(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	164(%rax), %dl
+	movb	164(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	165(%rax), %dl
+	movb	165(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	166(%rax), %dl
+	movb	166(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	167(%rax), %dl
+	movb	167(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	168(%rax), %dl
+	movb	168(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	169(%rax), %dl
+	movb	169(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	170(%rax), %dl
+	movb	170(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	171(%rax), %dl
+	movb	171(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	172(%rax), %dl
+	movb	172(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	173(%rax), %dl
+	movb	173(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	174(%rax), %dl
+	movb	174(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	175(%rax), %dl
+	movb	175(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	176(%rax), %dl
+	movb	176(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	177(%rax), %dl
+	movb	177(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	178(%rax), %dl
+	movb	178(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	179(%rax), %dl
+	movb	179(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	180(%rax), %dl
+	movb	180(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	181(%rax), %dl
+	movb	181(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	182(%rax), %dl
+	movb	182(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	183(%rax), %dl
+	movb	183(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	184(%rax), %dl
+	movb	184(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	185(%rax), %dl
+	movb	185(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	186(%rax), %dl
+	movb	186(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	187(%rax), %dl
+	movb	187(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	188(%rax), %dl
+	movb	188(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	189(%rax), %dl
+	movb	189(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	190(%rax), %dl
+	movb	190(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	191(%rax), %dl
+	movb	191(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	192(%rax), %dl
+	movb	192(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	193(%rax), %dl
+	movb	193(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	194(%rax), %dl
+	movb	194(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	195(%rax), %dl
+	movb	195(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	196(%rax), %dl
+	movb	196(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	197(%rax), %dl
+	movb	197(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	198(%rax), %dl
+	movb	198(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	199(%rax), %dl
+	movb	199(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	200(%rax), %dl
+	movb	200(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	201(%rax), %dl
+	movb	201(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	202(%rax), %dl
+	movb	202(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	203(%rax), %dl
+	movb	203(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	204(%rax), %dl
+	movb	204(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	205(%rax), %dl
+	movb	205(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	206(%rax), %dl
+	movb	206(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	207(%rax), %dl
+	movb	207(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	208(%rax), %dl
+	movb	208(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	209(%rax), %dl
+	movb	209(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	210(%rax), %dl
+	movb	210(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	211(%rax), %dl
+	movb	211(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	212(%rax), %dl
+	movb	212(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	213(%rax), %dl
+	movb	213(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	214(%rax), %dl
+	movb	214(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	215(%rax), %dl
+	movb	215(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	216(%rax), %dl
+	movb	216(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	217(%rax), %dl
+	movb	217(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	218(%rax), %dl
+	movb	218(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	219(%rax), %dl
+	movb	219(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	220(%rax), %dl
+	movb	220(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	221(%rax), %dl
+	movb	221(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	222(%rax), %dl
+	movb	222(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	223(%rax), %dl
+	movb	223(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	224(%rax), %dl
+	movb	224(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	225(%rax), %dl
+	movb	225(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	226(%rax), %dl
+	movb	226(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	227(%rax), %dl
+	movb	227(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	228(%rax), %dl
+	movb	228(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	229(%rax), %dl
+	movb	229(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	230(%rax), %dl
+	movb	230(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	231(%rax), %dl
+	movb	231(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	232(%rax), %dl
+	movb	232(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	233(%rax), %dl
+	movb	233(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	234(%rax), %dl
+	movb	234(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	235(%rax), %dl
+	movb	235(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	236(%rax), %dl
+	movb	236(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	237(%rax), %dl
+	movb	237(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	238(%rax), %dl
+	movb	238(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	239(%rax), %dl
+	movb	239(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	240(%rax), %dl
+	movb	240(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	241(%rax), %dl
+	movb	241(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	242(%rax), %dl
+	movb	242(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	243(%rax), %dl
+	movb	243(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	244(%rax), %dl
+	movb	244(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	245(%rax), %dl
+	movb	245(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	246(%rax), %dl
+	movb	246(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	247(%rax), %dl
+	movb	247(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	248(%rax), %dl
+	movb	248(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	249(%rax), %dl
+	movb	249(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	250(%rax), %dl
+	movb	250(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	251(%rax), %dl
+	movb	251(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	252(%rax), %dl
+	movb	252(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	253(%rax), %dl
+	movb	253(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	254(%rax), %dl
+	movb	254(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	255(%rax), %dl
+	movb	255(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	256(%rax), %dl
+	movb	256(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	257(%rax), %dl
+	movb	257(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	258(%rax), %dl
+	movb	258(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	259(%rax), %dl
+	movb	259(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	260(%rax), %dl
+	movb	260(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	261(%rax), %dl
+	movb	261(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	262(%rax), %dl
+	movb	262(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	263(%rax), %dl
+	movb	263(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	264(%rax), %dl
+	movb	264(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	265(%rax), %dl
+	movb	265(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	266(%rax), %dl
+	movb	266(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	267(%rax), %dl
+	movb	267(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	268(%rax), %dl
+	movb	268(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	269(%rax), %dl
+	movb	269(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	270(%rax), %dl
+	movb	270(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	271(%rax), %dl
+	movb	271(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	272(%rax), %dl
+	movb	272(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	273(%rax), %dl
+	movb	273(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	274(%rax), %dl
+	movb	274(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	275(%rax), %dl
+	movb	275(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	276(%rax), %dl
+	movb	276(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	277(%rax), %dl
+	movb	277(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	278(%rax), %dl
+	movb	278(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	279(%rax), %dl
+	movb	279(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	280(%rax), %dl
+	movb	280(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	281(%rax), %dl
+	movb	281(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	282(%rax), %dl
+	movb	282(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	283(%rax), %dl
+	movb	283(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	284(%rax), %dl
+	movb	284(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	285(%rax), %dl
+	movb	285(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	286(%rax), %dl
+	movb	286(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	287(%rax), %dl
+	movb	287(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	288(%rax), %dl
+	movb	288(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	289(%rax), %dl
+	movb	289(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	290(%rax), %dl
+	movb	290(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	291(%rax), %dl
+	movb	291(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	292(%rax), %dl
+	movb	292(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	293(%rax), %dl
+	movb	293(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	294(%rax), %dl
+	movb	294(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	295(%rax), %dl
+	movb	295(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	296(%rax), %dl
+	movb	296(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	297(%rax), %dl
+	movb	297(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	298(%rax), %dl
+	movb	298(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	299(%rax), %dl
+	movb	299(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	300(%rax), %dl
+	movb	300(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	301(%rax), %dl
+	movb	301(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	302(%rax), %dl
+	movb	302(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	303(%rax), %dl
+	movb	303(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	304(%rax), %dl
+	movb	304(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	305(%rax), %dl
+	movb	305(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	306(%rax), %dl
+	movb	306(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	307(%rax), %dl
+	movb	307(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	308(%rax), %dl
+	movb	308(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	309(%rax), %dl
+	movb	309(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	310(%rax), %dl
+	movb	310(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	311(%rax), %dl
+	movb	311(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	312(%rax), %dl
+	movb	312(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	313(%rax), %dl
+	movb	313(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	314(%rax), %dl
+	movb	314(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	315(%rax), %dl
+	movb	315(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	316(%rax), %dl
+	movb	316(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	317(%rax), %dl
+	movb	317(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	318(%rax), %dl
+	movb	318(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	319(%rax), %dl
+	movb	319(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	320(%rax), %dl
+	movb	320(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	321(%rax), %dl
+	movb	321(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	322(%rax), %dl
+	movb	322(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	323(%rax), %dl
+	movb	323(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	324(%rax), %dl
+	movb	324(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	325(%rax), %dl
+	movb	325(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	326(%rax), %dl
+	movb	326(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	327(%rax), %dl
+	movb	327(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	328(%rax), %dl
+	movb	328(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	329(%rax), %dl
+	movb	329(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	330(%rax), %dl
+	movb	330(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	331(%rax), %dl
+	movb	331(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	332(%rax), %dl
+	movb	332(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	333(%rax), %dl
+	movb	333(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	334(%rax), %dl
+	movb	334(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	335(%rax), %dl
+	movb	335(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	336(%rax), %dl
+	movb	336(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	337(%rax), %dl
+	movb	337(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	338(%rax), %dl
+	movb	338(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	339(%rax), %dl
+	movb	339(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	340(%rax), %dl
+	movb	340(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	341(%rax), %dl
+	movb	341(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	342(%rax), %dl
+	movb	342(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	343(%rax), %dl
+	movb	343(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	344(%rax), %dl
+	movb	344(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	345(%rax), %dl
+	movb	345(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	346(%rax), %dl
+	movb	346(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	347(%rax), %dl
+	movb	347(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	348(%rax), %dl
+	movb	348(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	349(%rax), %dl
+	movb	349(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	350(%rax), %dl
+	movb	350(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	351(%rax), %dl
+	movb	351(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	352(%rax), %dl
+	movb	352(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	353(%rax), %dl
+	movb	353(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	354(%rax), %dl
+	movb	354(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	355(%rax), %dl
+	movb	355(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	356(%rax), %dl
+	movb	356(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	357(%rax), %dl
+	movb	357(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	358(%rax), %dl
+	movb	358(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	359(%rax), %dl
+	movb	359(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	360(%rax), %dl
+	movb	360(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	361(%rax), %dl
+	movb	361(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	362(%rax), %dl
+	movb	362(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	363(%rax), %dl
+	movb	363(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	364(%rax), %dl
+	movb	364(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	365(%rax), %dl
+	movb	365(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	366(%rax), %dl
+	movb	366(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	367(%rax), %dl
+	movb	367(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	368(%rax), %dl
+	movb	368(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	369(%rax), %dl
+	movb	369(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	370(%rax), %dl
+	movb	370(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	371(%rax), %dl
+	movb	371(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	372(%rax), %dl
+	movb	372(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	373(%rax), %dl
+	movb	373(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	374(%rax), %dl
+	movb	374(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	375(%rax), %dl
+	movb	375(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	376(%rax), %dl
+	movb	376(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	377(%rax), %dl
+	movb	377(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	378(%rax), %dl
+	movb	378(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	379(%rax), %dl
+	movb	379(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	380(%rax), %dl
+	movb	380(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	381(%rax), %dl
+	movb	381(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	382(%rax), %dl
+	movb	382(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	383(%rax), %dl
+	movb	383(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	384(%rax), %dl
+	movb	384(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	385(%rax), %dl
+	movb	385(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	386(%rax), %dl
+	movb	386(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	387(%rax), %dl
+	movb	387(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	388(%rax), %dl
+	movb	388(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	389(%rax), %dl
+	movb	389(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	390(%rax), %dl
+	movb	390(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	391(%rax), %dl
+	movb	391(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	392(%rax), %dl
+	movb	392(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	393(%rax), %dl
+	movb	393(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	394(%rax), %dl
+	movb	394(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	395(%rax), %dl
+	movb	395(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	396(%rax), %dl
+	movb	396(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	397(%rax), %dl
+	movb	397(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	398(%rax), %dl
+	movb	398(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	399(%rax), %dl
+	movb	399(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	400(%rax), %dl
+	movb	400(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	401(%rax), %dl
+	movb	401(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	402(%rax), %dl
+	movb	402(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	403(%rax), %dl
+	movb	403(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	404(%rax), %dl
+	movb	404(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	405(%rax), %dl
+	movb	405(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	406(%rax), %dl
+	movb	406(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	407(%rax), %dl
+	movb	407(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	408(%rax), %dl
+	movb	408(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	409(%rax), %dl
+	movb	409(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	410(%rax), %dl
+	movb	410(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	411(%rax), %dl
+	movb	411(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	412(%rax), %dl
+	movb	412(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	413(%rax), %dl
+	movb	413(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	414(%rax), %dl
+	movb	414(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	415(%rax), %dl
+	movb	415(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	416(%rax), %dl
+	movb	416(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	417(%rax), %dl
+	movb	417(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	418(%rax), %dl
+	movb	418(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	419(%rax), %dl
+	movb	419(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	420(%rax), %dl
+	movb	420(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	421(%rax), %dl
+	movb	421(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	422(%rax), %dl
+	movb	422(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	423(%rax), %dl
+	movb	423(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	424(%rax), %dl
+	movb	424(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	425(%rax), %dl
+	movb	425(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	426(%rax), %dl
+	movb	426(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	427(%rax), %dl
+	movb	427(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	428(%rax), %dl
+	movb	428(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	429(%rax), %dl
+	movb	429(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	430(%rax), %dl
+	movb	430(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	431(%rax), %dl
+	movb	431(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	432(%rax), %dl
+	movb	432(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	433(%rax), %dl
+	movb	433(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	434(%rax), %dl
+	movb	434(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	435(%rax), %dl
+	movb	435(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	436(%rax), %dl
+	movb	436(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	437(%rax), %dl
+	movb	437(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	438(%rax), %dl
+	movb	438(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	439(%rax), %dl
+	movb	439(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	440(%rax), %dl
+	movb	440(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	441(%rax), %dl
+	movb	441(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	442(%rax), %dl
+	movb	442(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	443(%rax), %dl
+	movb	443(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	444(%rax), %dl
+	movb	444(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	445(%rax), %dl
+	movb	445(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	446(%rax), %dl
+	movb	446(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	447(%rax), %dl
+	movb	447(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	448(%rax), %dl
+	movb	448(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	449(%rax), %dl
+	movb	449(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	450(%rax), %dl
+	movb	450(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	451(%rax), %dl
+	movb	451(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	452(%rax), %dl
+	movb	452(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	453(%rax), %dl
+	movb	453(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	454(%rax), %dl
+	movb	454(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	455(%rax), %dl
+	movb	455(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	456(%rax), %dl
+	movb	456(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	457(%rax), %dl
+	movb	457(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	458(%rax), %dl
+	movb	458(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	459(%rax), %dl
+	movb	459(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	460(%rax), %dl
+	movb	460(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	461(%rax), %dl
+	movb	461(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	462(%rax), %dl
+	movb	462(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	463(%rax), %dl
+	movb	463(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	464(%rax), %dl
+	movb	464(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	465(%rax), %dl
+	movb	465(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	466(%rax), %dl
+	movb	466(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	467(%rax), %dl
+	movb	467(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	468(%rax), %dl
+	movb	468(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	469(%rax), %dl
+	movb	469(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	470(%rax), %dl
+	movb	470(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	471(%rax), %dl
+	movb	471(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	472(%rax), %dl
+	movb	472(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	473(%rax), %dl
+	movb	473(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	474(%rax), %dl
+	movb	474(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	475(%rax), %dl
+	movb	475(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	476(%rax), %dl
+	movb	476(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	477(%rax), %dl
+	movb	477(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	478(%rax), %dl
+	movb	478(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	479(%rax), %dl
+	movb	479(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	480(%rax), %dl
+	movb	480(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	481(%rax), %dl
+	movb	481(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	482(%rax), %dl
+	movb	482(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	483(%rax), %dl
+	movb	483(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	484(%rax), %dl
+	movb	484(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	485(%rax), %dl
+	movb	485(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	486(%rax), %dl
+	movb	486(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	487(%rax), %dl
+	movb	487(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	488(%rax), %dl
+	movb	488(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	489(%rax), %dl
+	movb	489(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	490(%rax), %dl
+	movb	490(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	491(%rax), %dl
+	movb	491(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	492(%rax), %dl
+	movb	492(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	493(%rax), %dl
+	movb	493(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	494(%rax), %dl
+	movb	494(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	495(%rax), %dl
+	movb	495(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	496(%rax), %dl
+	movb	496(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	497(%rax), %dl
+	movb	497(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	498(%rax), %dl
+	movb	498(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	499(%rax), %dl
+	movb	499(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	500(%rax), %dl
+	movb	500(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	501(%rax), %dl
+	movb	501(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	502(%rax), %dl
+	movb	502(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	503(%rax), %dl
+	movb	503(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	504(%rax), %dl
+	movb	504(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	505(%rax), %dl
+	movb	505(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	506(%rax), %dl
+	movb	506(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	507(%rax), %dl
+	movb	507(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	508(%rax), %dl
+	movb	508(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	509(%rax), %dl
+	movb	509(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	510(%rax), %dl
+	movb	510(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	511(%rax), %dl
+	movb	511(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	512(%rax), %dl
+	movb	512(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	513(%rax), %dl
+	movb	513(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	514(%rax), %dl
+	movb	514(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	515(%rax), %dl
+	movb	515(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	516(%rax), %dl
+	movb	516(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	517(%rax), %dl
+	movb	517(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	518(%rax), %dl
+	movb	518(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	519(%rax), %dl
+	movb	519(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	520(%rax), %dl
+	movb	520(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	521(%rax), %dl
+	movb	521(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	522(%rax), %dl
+	movb	522(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	523(%rax), %dl
+	movb	523(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	524(%rax), %dl
+	movb	524(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	525(%rax), %dl
+	movb	525(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	526(%rax), %dl
+	movb	526(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	527(%rax), %dl
+	movb	527(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	528(%rax), %dl
+	movb	528(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	529(%rax), %dl
+	movb	529(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	530(%rax), %dl
+	movb	530(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	531(%rax), %dl
+	movb	531(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	532(%rax), %dl
+	movb	532(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	533(%rax), %dl
+	movb	533(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	534(%rax), %dl
+	movb	534(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	535(%rax), %dl
+	movb	535(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	536(%rax), %dl
+	movb	536(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	537(%rax), %dl
+	movb	537(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	538(%rax), %dl
+	movb	538(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	539(%rax), %dl
+	movb	539(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	540(%rax), %dl
+	movb	540(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	541(%rax), %dl
+	movb	541(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	542(%rax), %dl
+	movb	542(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	543(%rax), %dl
+	movb	543(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	544(%rax), %dl
+	movb	544(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	545(%rax), %dl
+	movb	545(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	546(%rax), %dl
+	movb	546(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	547(%rax), %dl
+	movb	547(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	548(%rax), %dl
+	movb	548(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	549(%rax), %dl
+	movb	549(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	550(%rax), %dl
+	movb	550(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	551(%rax), %dl
+	movb	551(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	552(%rax), %dl
+	movb	552(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	553(%rax), %dl
+	movb	553(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	554(%rax), %dl
+	movb	554(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	555(%rax), %dl
+	movb	555(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	556(%rax), %dl
+	movb	556(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	557(%rax), %dl
+	movb	557(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	558(%rax), %dl
+	movb	558(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	559(%rax), %dl
+	movb	559(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	560(%rax), %dl
+	movb	560(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	561(%rax), %dl
+	movb	561(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	562(%rax), %dl
+	movb	562(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	563(%rax), %dl
+	movb	563(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	564(%rax), %dl
+	movb	564(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	565(%rax), %dl
+	movb	565(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	566(%rax), %dl
+	movb	566(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	567(%rax), %dl
+	movb	567(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	568(%rax), %dl
+	movb	568(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	569(%rax), %dl
+	movb	569(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	570(%rax), %dl
+	movb	570(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	571(%rax), %dl
+	movb	571(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	572(%rax), %dl
+	movb	572(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	573(%rax), %dl
+	movb	573(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	574(%rax), %dl
+	movb	574(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	575(%rax), %dl
+	movb	575(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	576(%rax), %dl
+	movb	576(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	577(%rax), %dl
+	movb	577(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	578(%rax), %dl
+	movb	578(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	579(%rax), %dl
+	movb	579(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	580(%rax), %dl
+	movb	580(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	581(%rax), %dl
+	movb	581(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	582(%rax), %dl
+	movb	582(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	583(%rax), %dl
+	movb	583(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	584(%rax), %dl
+	movb	584(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	585(%rax), %dl
+	movb	585(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	586(%rax), %dl
+	movb	586(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	587(%rax), %dl
+	movb	587(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	588(%rax), %dl
+	movb	588(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	589(%rax), %dl
+	movb	589(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	590(%rax), %dl
+	movb	590(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	591(%rax), %dl
+	movb	591(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	592(%rax), %dl
+	movb	592(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	593(%rax), %dl
+	movb	593(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	594(%rax), %dl
+	movb	594(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	595(%rax), %dl
+	movb	595(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	596(%rax), %dl
+	movb	596(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	597(%rax), %dl
+	movb	597(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	598(%rax), %dl
+	movb	598(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	599(%rax), %dl
+	movb	599(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	600(%rax), %dl
+	movb	600(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	601(%rax), %dl
+	movb	601(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	602(%rax), %dl
+	movb	602(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	603(%rax), %dl
+	movb	603(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	604(%rax), %dl
+	movb	604(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	605(%rax), %dl
+	movb	605(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	606(%rax), %dl
+	movb	606(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	607(%rax), %dl
+	movb	607(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	608(%rax), %dl
+	movb	608(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	609(%rax), %dl
+	movb	609(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	610(%rax), %dl
+	movb	610(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	611(%rax), %dl
+	movb	611(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	612(%rax), %dl
+	movb	612(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	613(%rax), %dl
+	movb	613(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	614(%rax), %dl
+	movb	614(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	615(%rax), %dl
+	movb	615(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	616(%rax), %dl
+	movb	616(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	617(%rax), %dl
+	movb	617(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	618(%rax), %dl
+	movb	618(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	619(%rax), %dl
+	movb	619(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	620(%rax), %dl
+	movb	620(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	621(%rax), %dl
+	movb	621(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	622(%rax), %dl
+	movb	622(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	623(%rax), %dl
+	movb	623(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	624(%rax), %dl
+	movb	624(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	625(%rax), %dl
+	movb	625(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	626(%rax), %dl
+	movb	626(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	627(%rax), %dl
+	movb	627(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	628(%rax), %dl
+	movb	628(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	629(%rax), %dl
+	movb	629(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	630(%rax), %dl
+	movb	630(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	631(%rax), %dl
+	movb	631(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	632(%rax), %dl
+	movb	632(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	633(%rax), %dl
+	movb	633(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	634(%rax), %dl
+	movb	634(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	635(%rax), %dl
+	movb	635(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	636(%rax), %dl
+	movb	636(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	637(%rax), %dl
+	movb	637(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	638(%rax), %dl
+	movb	638(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	639(%rax), %dl
+	movb	639(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	640(%rax), %dl
+	movb	640(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	641(%rax), %dl
+	movb	641(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	642(%rax), %dl
+	movb	642(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	643(%rax), %dl
+	movb	643(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	644(%rax), %dl
+	movb	644(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	645(%rax), %dl
+	movb	645(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	646(%rax), %dl
+	movb	646(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	647(%rax), %dl
+	movb	647(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	648(%rax), %dl
+	movb	648(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	649(%rax), %dl
+	movb	649(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	650(%rax), %dl
+	movb	650(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	651(%rax), %dl
+	movb	651(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	652(%rax), %dl
+	movb	652(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	653(%rax), %dl
+	movb	653(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	654(%rax), %dl
+	movb	654(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	655(%rax), %dl
+	movb	655(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	656(%rax), %dl
+	movb	656(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	657(%rax), %dl
+	movb	657(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	658(%rax), %dl
+	movb	658(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	659(%rax), %dl
+	movb	659(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	660(%rax), %dl
+	movb	660(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	661(%rax), %dl
+	movb	661(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	662(%rax), %dl
+	movb	662(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	663(%rax), %dl
+	movb	663(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	664(%rax), %dl
+	movb	664(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	665(%rax), %dl
+	movb	665(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	666(%rax), %dl
+	movb	666(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	667(%rax), %dl
+	movb	667(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	668(%rax), %dl
+	movb	668(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	669(%rax), %dl
+	movb	669(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	670(%rax), %dl
+	movb	670(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	671(%rax), %dl
+	movb	671(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	672(%rax), %dl
+	movb	672(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	673(%rax), %dl
+	movb	673(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	674(%rax), %dl
+	movb	674(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	675(%rax), %dl
+	movb	675(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	676(%rax), %dl
+	movb	676(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	677(%rax), %dl
+	movb	677(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	678(%rax), %dl
+	movb	678(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	679(%rax), %dl
+	movb	679(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	680(%rax), %dl
+	movb	680(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	681(%rax), %dl
+	movb	681(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	682(%rax), %dl
+	movb	682(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	683(%rax), %dl
+	movb	683(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	684(%rax), %dl
+	movb	684(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	685(%rax), %dl
+	movb	685(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	686(%rax), %dl
+	movb	686(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	687(%rax), %dl
+	movb	687(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	688(%rax), %dl
+	movb	688(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	689(%rax), %dl
+	movb	689(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	690(%rax), %dl
+	movb	690(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	691(%rax), %dl
+	movb	691(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	692(%rax), %dl
+	movb	692(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	693(%rax), %dl
+	movb	693(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	694(%rax), %dl
+	movb	694(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	695(%rax), %dl
+	movb	695(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	696(%rax), %dl
+	movb	696(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	697(%rax), %dl
+	movb	697(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	698(%rax), %dl
+	movb	698(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	699(%rax), %dl
+	movb	699(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	700(%rax), %dl
+	movb	700(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	701(%rax), %dl
+	movb	701(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	702(%rax), %dl
+	movb	702(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	703(%rax), %dl
+	movb	703(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	704(%rax), %dl
+	movb	704(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	705(%rax), %dl
+	movb	705(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	706(%rax), %dl
+	movb	706(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	707(%rax), %dl
+	movb	707(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	708(%rax), %dl
+	movb	708(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	709(%rax), %dl
+	movb	709(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	710(%rax), %dl
+	movb	710(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	711(%rax), %dl
+	movb	711(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	712(%rax), %dl
+	movb	712(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	713(%rax), %dl
+	movb	713(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	714(%rax), %dl
+	movb	714(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	715(%rax), %dl
+	movb	715(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	716(%rax), %dl
+	movb	716(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	717(%rax), %dl
+	movb	717(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	718(%rax), %dl
+	movb	718(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	719(%rax), %dl
+	movb	719(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	720(%rax), %dl
+	movb	720(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	721(%rax), %dl
+	movb	721(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	722(%rax), %dl
+	movb	722(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	723(%rax), %dl
+	movb	723(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	724(%rax), %dl
+	movb	724(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	725(%rax), %dl
+	movb	725(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	726(%rax), %dl
+	movb	726(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	727(%rax), %dl
+	movb	727(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	728(%rax), %dl
+	movb	728(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	729(%rax), %dl
+	movb	729(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	730(%rax), %dl
+	movb	730(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	731(%rax), %dl
+	movb	731(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	732(%rax), %dl
+	movb	732(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	733(%rax), %dl
+	movb	733(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	734(%rax), %dl
+	movb	734(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	735(%rax), %dl
+	movb	735(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	736(%rax), %dl
+	movb	736(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	737(%rax), %dl
+	movb	737(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	738(%rax), %dl
+	movb	738(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	739(%rax), %dl
+	movb	739(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	740(%rax), %dl
+	movb	740(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	741(%rax), %dl
+	movb	741(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	742(%rax), %dl
+	movb	742(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	743(%rax), %dl
+	movb	743(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	744(%rax), %dl
+	movb	744(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	745(%rax), %dl
+	movb	745(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	746(%rax), %dl
+	movb	746(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	747(%rax), %dl
+	movb	747(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	748(%rax), %dl
+	movb	748(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	749(%rax), %dl
+	movb	749(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	750(%rax), %dl
+	movb	750(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	751(%rax), %dl
+	movb	751(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	752(%rax), %dl
+	movb	752(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	753(%rax), %dl
+	movb	753(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	754(%rax), %dl
+	movb	754(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	755(%rax), %dl
+	movb	755(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	756(%rax), %dl
+	movb	756(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	757(%rax), %dl
+	movb	757(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	758(%rax), %dl
+	movb	758(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	759(%rax), %dl
+	movb	759(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	760(%rax), %dl
+	movb	760(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	761(%rax), %dl
+	movb	761(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	762(%rax), %dl
+	movb	762(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	763(%rax), %dl
+	movb	763(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	764(%rax), %dl
+	movb	764(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	765(%rax), %dl
+	movb	765(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	766(%rax), %dl
+	movb	766(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	767(%rax), %dl
+	movb	767(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	768(%rax), %dl
+	movb	768(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	769(%rax), %dl
+	movb	769(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	770(%rax), %dl
+	movb	770(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	771(%rax), %dl
+	movb	771(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	772(%rax), %dl
+	movb	772(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	773(%rax), %dl
+	movb	773(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	774(%rax), %dl
+	movb	774(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	775(%rax), %dl
+	movb	775(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	776(%rax), %dl
+	movb	776(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	777(%rax), %dl
+	movb	777(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	778(%rax), %dl
+	movb	778(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	779(%rax), %dl
+	movb	779(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	780(%rax), %dl
+	movb	780(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	781(%rax), %dl
+	movb	781(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	782(%rax), %dl
+	movb	782(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	783(%rax), %dl
+	movb	783(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	784(%rax), %dl
+	movb	784(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	785(%rax), %dl
+	movb	785(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	786(%rax), %dl
+	movb	786(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	787(%rax), %dl
+	movb	787(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	788(%rax), %dl
+	movb	788(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	789(%rax), %dl
+	movb	789(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	790(%rax), %dl
+	movb	790(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	791(%rax), %dl
+	movb	791(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	792(%rax), %dl
+	movb	792(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	793(%rax), %dl
+	movb	793(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	794(%rax), %dl
+	movb	794(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	795(%rax), %dl
+	movb	795(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	796(%rax), %dl
+	movb	796(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	797(%rax), %dl
+	movb	797(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	798(%rax), %dl
+	movb	798(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	799(%rax), %dl
+	movb	799(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	800(%rax), %dl
+	movb	800(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	801(%rax), %dl
+	movb	801(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	802(%rax), %dl
+	movb	802(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	803(%rax), %dl
+	movb	803(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	804(%rax), %dl
+	movb	804(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	805(%rax), %dl
+	movb	805(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	806(%rax), %dl
+	movb	806(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	807(%rax), %dl
+	movb	807(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	808(%rax), %dl
+	movb	808(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	809(%rax), %dl
+	movb	809(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	810(%rax), %dl
+	movb	810(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	811(%rax), %dl
+	movb	811(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	812(%rax), %dl
+	movb	812(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	813(%rax), %dl
+	movb	813(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	814(%rax), %dl
+	movb	814(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	815(%rax), %dl
+	movb	815(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	816(%rax), %dl
+	movb	816(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	817(%rax), %dl
+	movb	817(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	818(%rax), %dl
+	movb	818(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	819(%rax), %dl
+	movb	819(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	820(%rax), %dl
+	movb	820(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	821(%rax), %dl
+	movb	821(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	822(%rax), %dl
+	movb	822(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	823(%rax), %dl
+	movb	823(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	824(%rax), %dl
+	movb	824(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	825(%rax), %dl
+	movb	825(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	826(%rax), %dl
+	movb	826(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	827(%rax), %dl
+	movb	827(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	828(%rax), %dl
+	movb	828(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	829(%rax), %dl
+	movb	829(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	830(%rax), %dl
+	movb	830(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	831(%rax), %dl
+	movb	831(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	832(%rax), %dl
+	movb	832(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	833(%rax), %dl
+	movb	833(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	834(%rax), %dl
+	movb	834(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	835(%rax), %dl
+	movb	835(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	836(%rax), %dl
+	movb	836(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	837(%rax), %dl
+	movb	837(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	838(%rax), %dl
+	movb	838(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	839(%rax), %dl
+	movb	839(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	840(%rax), %dl
+	movb	840(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	841(%rax), %dl
+	movb	841(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	842(%rax), %dl
+	movb	842(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	843(%rax), %dl
+	movb	843(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	844(%rax), %dl
+	movb	844(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	845(%rax), %dl
+	movb	845(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	846(%rax), %dl
+	movb	846(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	847(%rax), %dl
+	movb	847(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	848(%rax), %dl
+	movb	848(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	849(%rax), %dl
+	movb	849(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	850(%rax), %dl
+	movb	850(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	851(%rax), %dl
+	movb	851(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	852(%rax), %dl
+	movb	852(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	853(%rax), %dl
+	movb	853(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	854(%rax), %dl
+	movb	854(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	855(%rax), %dl
+	movb	855(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	856(%rax), %dl
+	movb	856(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	857(%rax), %dl
+	movb	857(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	858(%rax), %dl
+	movb	858(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	859(%rax), %dl
+	movb	859(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	860(%rax), %dl
+	movb	860(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	861(%rax), %dl
+	movb	861(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	862(%rax), %dl
+	movb	862(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	863(%rax), %dl
+	movb	863(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	864(%rax), %dl
+	movb	864(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	865(%rax), %dl
+	movb	865(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	866(%rax), %dl
+	movb	866(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	867(%rax), %dl
+	movb	867(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	868(%rax), %dl
+	movb	868(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	869(%rax), %dl
+	movb	869(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	870(%rax), %dl
+	movb	870(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	871(%rax), %dl
+	movb	871(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	872(%rax), %dl
+	movb	872(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	873(%rax), %dl
+	movb	873(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	874(%rax), %dl
+	movb	874(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	875(%rax), %dl
+	movb	875(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	876(%rax), %dl
+	movb	876(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	877(%rax), %dl
+	movb	877(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	878(%rax), %dl
+	movb	878(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	879(%rax), %dl
+	movb	879(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	880(%rax), %dl
+	movb	880(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	881(%rax), %dl
+	movb	881(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	882(%rax), %dl
+	movb	882(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	883(%rax), %dl
+	movb	883(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	884(%rax), %dl
+	movb	884(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	885(%rax), %dl
+	movb	885(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	886(%rax), %dl
+	movb	886(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	887(%rax), %dl
+	movb	887(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	888(%rax), %dl
+	movb	888(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	889(%rax), %dl
+	movb	889(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	890(%rax), %dl
+	movb	890(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	891(%rax), %dl
+	movb	891(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	892(%rax), %dl
+	movb	892(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	893(%rax), %dl
+	movb	893(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	894(%rax), %dl
+	movb	894(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	895(%rax), %dl
+	movb	895(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	896(%rax), %dl
+	movb	896(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	897(%rax), %dl
+	movb	897(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	898(%rax), %dl
+	movb	898(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	899(%rax), %dl
+	movb	899(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	900(%rax), %dl
+	movb	900(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	901(%rax), %dl
+	movb	901(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	902(%rax), %dl
+	movb	902(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	903(%rax), %dl
+	movb	903(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	904(%rax), %dl
+	movb	904(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	905(%rax), %dl
+	movb	905(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	906(%rax), %dl
+	movb	906(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	907(%rax), %dl
+	movb	907(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	908(%rax), %dl
+	movb	908(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	909(%rax), %dl
+	movb	909(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	910(%rax), %dl
+	movb	910(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	911(%rax), %dl
+	movb	911(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	912(%rax), %dl
+	movb	912(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	913(%rax), %dl
+	movb	913(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	914(%rax), %dl
+	movb	914(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	915(%rax), %dl
+	movb	915(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	916(%rax), %dl
+	movb	916(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	917(%rax), %dl
+	movb	917(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	918(%rax), %dl
+	movb	918(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	919(%rax), %dl
+	movb	919(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	920(%rax), %dl
+	movb	920(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	921(%rax), %dl
+	movb	921(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	922(%rax), %dl
+	movb	922(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	923(%rax), %dl
+	movb	923(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	924(%rax), %dl
+	movb	924(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	925(%rax), %dl
+	movb	925(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	926(%rax), %dl
+	movb	926(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	927(%rax), %dl
+	movb	927(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	928(%rax), %dl
+	movb	928(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	929(%rax), %dl
+	movb	929(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	930(%rax), %dl
+	movb	930(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	931(%rax), %dl
+	movb	931(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	932(%rax), %dl
+	movb	932(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	933(%rax), %dl
+	movb	933(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	934(%rax), %dl
+	movb	934(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	935(%rax), %dl
+	movb	935(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	936(%rax), %dl
+	movb	936(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	937(%rax), %dl
+	movb	937(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	938(%rax), %dl
+	movb	938(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	939(%rax), %dl
+	movb	939(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	940(%rax), %dl
+	movb	940(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	941(%rax), %dl
+	movb	941(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	942(%rax), %dl
+	movb	942(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	943(%rax), %dl
+	movb	943(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	944(%rax), %dl
+	movb	944(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	945(%rax), %dl
+	movb	945(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	946(%rax), %dl
+	movb	946(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	947(%rax), %dl
+	movb	947(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	948(%rax), %dl
+	movb	948(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	949(%rax), %dl
+	movb	949(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	950(%rax), %dl
+	movb	950(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	951(%rax), %dl
+	movb	951(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	952(%rax), %dl
+	movb	952(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	953(%rax), %dl
+	movb	953(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	954(%rax), %dl
+	movb	954(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	955(%rax), %dl
+	movb	955(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	956(%rax), %dl
+	movb	956(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	957(%rax), %dl
+	movb	957(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	958(%rax), %dl
+	movb	958(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	959(%rax), %dl
+	movb	959(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	960(%rax), %dl
+	movb	960(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	961(%rax), %dl
+	movb	961(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	962(%rax), %dl
+	movb	962(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	963(%rax), %dl
+	movb	963(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	964(%rax), %dl
+	movb	964(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	965(%rax), %dl
+	movb	965(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	966(%rax), %dl
+	movb	966(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	967(%rax), %dl
+	movb	967(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	968(%rax), %dl
+	movb	968(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	969(%rax), %dl
+	movb	969(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	970(%rax), %dl
+	movb	970(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	971(%rax), %dl
+	movb	971(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	972(%rax), %dl
+	movb	972(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	973(%rax), %dl
+	movb	973(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	974(%rax), %dl
+	movb	974(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	975(%rax), %dl
+	movb	975(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	976(%rax), %dl
+	movb	976(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	977(%rax), %dl
+	movb	977(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	978(%rax), %dl
+	movb	978(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	979(%rax), %dl
+	movb	979(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	980(%rax), %dl
+	movb	980(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	981(%rax), %dl
+	movb	981(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	982(%rax), %dl
+	movb	982(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	983(%rax), %dl
+	movb	983(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	984(%rax), %dl
+	movb	984(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	985(%rax), %dl
+	movb	985(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	986(%rax), %dl
+	movb	986(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	987(%rax), %dl
+	movb	987(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	988(%rax), %dl
+	movb	988(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	989(%rax), %dl
+	movb	989(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	990(%rax), %dl
+	movb	990(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	991(%rax), %dl
+	movb	991(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	992(%rax), %dl
+	movb	992(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	993(%rax), %dl
+	movb	993(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	994(%rax), %dl
+	movb	994(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	995(%rax), %dl
+	movb	995(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	996(%rax), %dl
+	movb	996(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	997(%rax), %dl
+	movb	997(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	998(%rax), %dl
+	movb	998(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	999(%rax), %dl
+	movb	999(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1000(%rax), %dl
+	movb	1000(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1001(%rax), %dl
+	movb	1001(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1002(%rax), %dl
+	movb	1002(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1003(%rax), %dl
+	movb	1003(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1004(%rax), %dl
+	movb	1004(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1005(%rax), %dl
+	movb	1005(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1006(%rax), %dl
+	movb	1006(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1007(%rax), %dl
+	movb	1007(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1008(%rax), %dl
+	movb	1008(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1009(%rax), %dl
+	movb	1009(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1010(%rax), %dl
+	movb	1010(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1011(%rax), %dl
+	movb	1011(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1012(%rax), %dl
+	movb	1012(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1013(%rax), %dl
+	movb	1013(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1014(%rax), %dl
+	movb	1014(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1015(%rax), %dl
+	movb	1015(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1016(%rax), %dl
+	movb	1016(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1017(%rax), %dl
+	movb	1017(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1018(%rax), %dl
+	movb	1018(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1019(%rax), %dl
+	movb	1019(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1020(%rax), %dl
+	movb	1020(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1021(%rax), %dl
+	movb	1021(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1022(%rax), %dl
+	movb	1022(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1023(%rax), %dl
+	movb	1023(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1024(%rax), %dl
+	movb	1024(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1025(%rax), %dl
+	movb	1025(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1026(%rax), %dl
+	movb	1026(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1027(%rax), %dl
+	movb	1027(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1028(%rax), %dl
+	movb	1028(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1029(%rax), %dl
+	movb	1029(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1030(%rax), %dl
+	movb	1030(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1031(%rax), %dl
+	movb	1031(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1032(%rax), %dl
+	movb	1032(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1033(%rax), %dl
+	movb	1033(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1034(%rax), %dl
+	movb	1034(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1035(%rax), %dl
+	movb	1035(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1036(%rax), %dl
+	movb	1036(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1037(%rax), %dl
+	movb	1037(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1038(%rax), %dl
+	movb	1038(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1039(%rax), %dl
+	movb	1039(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1040(%rax), %dl
+	movb	1040(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1041(%rax), %dl
+	movb	1041(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1042(%rax), %dl
+	movb	1042(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1043(%rax), %dl
+	movb	1043(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1044(%rax), %dl
+	movb	1044(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1045(%rax), %dl
+	movb	1045(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1046(%rax), %dl
+	movb	1046(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1047(%rax), %dl
+	movb	1047(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1048(%rax), %dl
+	movb	1048(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1049(%rax), %dl
+	movb	1049(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1050(%rax), %dl
+	movb	1050(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1051(%rax), %dl
+	movb	1051(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1052(%rax), %dl
+	movb	1052(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1053(%rax), %dl
+	movb	1053(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1054(%rax), %dl
+	movb	1054(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1055(%rax), %dl
+	movb	1055(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1056(%rax), %dl
+	movb	1056(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1057(%rax), %dl
+	movb	1057(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1058(%rax), %dl
+	movb	1058(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1059(%rax), %dl
+	movb	1059(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1060(%rax), %dl
+	movb	1060(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1061(%rax), %dl
+	movb	1061(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1062(%rax), %dl
+	movb	1062(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1063(%rax), %dl
+	movb	1063(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1064(%rax), %dl
+	movb	1064(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1065(%rax), %dl
+	movb	1065(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1066(%rax), %dl
+	movb	1066(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1067(%rax), %dl
+	movb	1067(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1068(%rax), %dl
+	movb	1068(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1069(%rax), %dl
+	movb	1069(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1070(%rax), %dl
+	movb	1070(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1071(%rax), %dl
+	movb	1071(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1072(%rax), %dl
+	movb	1072(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1073(%rax), %dl
+	movb	1073(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1074(%rax), %dl
+	movb	1074(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1075(%rax), %dl
+	movb	1075(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1076(%rax), %dl
+	movb	1076(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1077(%rax), %dl
+	movb	1077(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1078(%rax), %dl
+	movb	1078(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1079(%rax), %dl
+	movb	1079(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1080(%rax), %dl
+	movb	1080(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1081(%rax), %dl
+	movb	1081(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1082(%rax), %dl
+	movb	1082(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1083(%rax), %dl
+	movb	1083(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1084(%rax), %dl
+	movb	1084(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1085(%rax), %dl
+	movb	1085(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1086(%rax), %dl
+	movb	1086(%rsi), %dil
+	xorb	%dil, %dl
+	movzbq	%dl, %rdx
+	orq 	%rdx, %rcx
+	movb	1087(%rax), %al
+	movb	1087(%rsi), %dl
+	xorb	%dl, %al
+	movzbq	%al, %rax
+	orq 	%rax, %rcx
+	negq	%rcx
+	shrq	$63, %rcx
+	movq	16(%rsp), %rax
+	addq	$64, %rax
+	addq	$2304, %rax
+	leaq	144(%rsp), %rdx
+	negq	%rcx
+	movb	(%rdx), %dil
+	movb	(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, (%rdx)
+	movb	1(%rdx), %dil
+	movb	1(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 1(%rdx)
+	movb	2(%rdx), %dil
+	movb	2(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 2(%rdx)
+	movb	3(%rdx), %dil
+	movb	3(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 3(%rdx)
+	movb	4(%rdx), %dil
+	movb	4(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 4(%rdx)
+	movb	5(%rdx), %dil
+	movb	5(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 5(%rdx)
+	movb	6(%rdx), %dil
+	movb	6(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 6(%rdx)
+	movb	7(%rdx), %dil
+	movb	7(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 7(%rdx)
+	movb	8(%rdx), %dil
+	movb	8(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 8(%rdx)
+	movb	9(%rdx), %dil
+	movb	9(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 9(%rdx)
+	movb	10(%rdx), %dil
+	movb	10(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 10(%rdx)
+	movb	11(%rdx), %dil
+	movb	11(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 11(%rdx)
+	movb	12(%rdx), %dil
+	movb	12(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 12(%rdx)
+	movb	13(%rdx), %dil
+	movb	13(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 13(%rdx)
+	movb	14(%rdx), %dil
+	movb	14(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 14(%rdx)
+	movb	15(%rdx), %dil
+	movb	15(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 15(%rdx)
+	movb	16(%rdx), %dil
+	movb	16(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 16(%rdx)
+	movb	17(%rdx), %dil
+	movb	17(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 17(%rdx)
+	movb	18(%rdx), %dil
+	movb	18(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 18(%rdx)
+	movb	19(%rdx), %dil
+	movb	19(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 19(%rdx)
+	movb	20(%rdx), %dil
+	movb	20(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 20(%rdx)
+	movb	21(%rdx), %dil
+	movb	21(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 21(%rdx)
+	movb	22(%rdx), %dil
+	movb	22(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 22(%rdx)
+	movb	23(%rdx), %dil
+	movb	23(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 23(%rdx)
+	movb	24(%rdx), %dil
+	movb	24(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 24(%rdx)
+	movb	25(%rdx), %dil
+	movb	25(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 25(%rdx)
+	movb	26(%rdx), %dil
+	movb	26(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 26(%rdx)
+	movb	27(%rdx), %dil
+	movb	27(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 27(%rdx)
+	movb	28(%rdx), %dil
+	movb	28(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 28(%rdx)
+	movb	29(%rdx), %dil
+	movb	29(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 29(%rdx)
+	movb	30(%rdx), %dil
+	movb	30(%rax), %r8b
+	xorb	%dil, %r8b
+	andb	%cl, %r8b
+	xorb	%r8b, %dil
+	movb	%dil, 30(%rdx)
+	movb	31(%rdx), %dil
+	movb	31(%rax), %al
+	xorb	%dil, %al
+	andb	%cl, %al
+	xorb	%al, %dil
+	movb	%dil, 31(%rdx)
+	movq	$1088, %rax
+	leaq	176(%rsp), %rcx
+	leaq	-232(%rsp), %rsp
+	call	L_sha3_256$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$2:
+	leaq	232(%rsp), %rsp
+	movq	(%rsp), %rax
+	movq	$32, %rcx
+	leaq	144(%rsp), %rdx
+	leaq	-216(%rsp), %rsp
+	call	L_shake256_64$1
+Ljade_kem_kyber_kyber768_amd64_ref_dec$1:
+	leaq	216(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	14504(%rsp), %r15
+	movq	14512(%rsp), %r14
+	movq	14520(%rsp), %r13
+	movq	14528(%rsp), %r12
+	movq	14536(%rsp), %rbp
+	movq	14544(%rsp), %rbx
+	movq	14552(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber768_amd64_ref_enc:
+jade_kem_kyber_kyber768_amd64_ref_enc:
+	movq	%rsp, %rax
+	leaq	-88(%rsp), %rsp
+	andq	$-16, %rsp
+	movq	%rax, 80(%rsp)
+	movq	%r15, 32(%rsp)
+	movq	%r14, 40(%rsp)
+	movq	%r13, 48(%rsp)
+	movq	%r12, 56(%rsp)
+	movq	%rbp, 64(%rsp)
+	movq	%rbx, 72(%rsp)
+	movq	%rdi, %rbp
+	movq	%rsi, %rbx
+	movq	%rdx, %r12
+	movq	%rsp, %rdi
+	movq	$32, %rsi
+	call	__jasmin_syscall_randombytes__
+	movq	%rsp, %rax
+	leaq	-13400(%rsp), %rsp
+	call	L_crypto_kem_enc_derand_jazz$1
+Ljade_kem_kyber_kyber768_amd64_ref_enc$1:
+	leaq	13400(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	32(%rsp), %r15
+	movq	40(%rsp), %r14
+	movq	48(%rsp), %r13
+	movq	56(%rsp), %r12
+	movq	64(%rsp), %rbp
+	movq	72(%rsp), %rbx
+	movq	80(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber768_amd64_ref_enc_derand:
+jade_kem_kyber_kyber768_amd64_ref_enc_derand:
+	movq	%rsp, %rax
+	leaq	-88(%rsp), %rsp
+	andq	$-8, %rsp
+	movq	%rax, 80(%rsp)
+	movq	%r15, 32(%rsp)
+	movq	%r14, 40(%rsp)
+	movq	%r13, 48(%rsp)
+	movq	%r12, 56(%rsp)
+	movq	%rbp, 64(%rsp)
+	movq	%rbx, 72(%rsp)
+	movq	%rdi, %rbp
+	movq	%rsi, %rbx
+	movq	%rdx, %r12
+	movq	%rsp, %rax
+	movb	(%rcx), %dl
+	movb	%dl, (%rax)
+	movb	1(%rcx), %dl
+	movb	%dl, 1(%rax)
+	movb	2(%rcx), %dl
+	movb	%dl, 2(%rax)
+	movb	3(%rcx), %dl
+	movb	%dl, 3(%rax)
+	movb	4(%rcx), %dl
+	movb	%dl, 4(%rax)
+	movb	5(%rcx), %dl
+	movb	%dl, 5(%rax)
+	movb	6(%rcx), %dl
+	movb	%dl, 6(%rax)
+	movb	7(%rcx), %dl
+	movb	%dl, 7(%rax)
+	movb	8(%rcx), %dl
+	movb	%dl, 8(%rax)
+	movb	9(%rcx), %dl
+	movb	%dl, 9(%rax)
+	movb	10(%rcx), %dl
+	movb	%dl, 10(%rax)
+	movb	11(%rcx), %dl
+	movb	%dl, 11(%rax)
+	movb	12(%rcx), %dl
+	movb	%dl, 12(%rax)
+	movb	13(%rcx), %dl
+	movb	%dl, 13(%rax)
+	movb	14(%rcx), %dl
+	movb	%dl, 14(%rax)
+	movb	15(%rcx), %dl
+	movb	%dl, 15(%rax)
+	movb	16(%rcx), %dl
+	movb	%dl, 16(%rax)
+	movb	17(%rcx), %dl
+	movb	%dl, 17(%rax)
+	movb	18(%rcx), %dl
+	movb	%dl, 18(%rax)
+	movb	19(%rcx), %dl
+	movb	%dl, 19(%rax)
+	movb	20(%rcx), %dl
+	movb	%dl, 20(%rax)
+	movb	21(%rcx), %dl
+	movb	%dl, 21(%rax)
+	movb	22(%rcx), %dl
+	movb	%dl, 22(%rax)
+	movb	23(%rcx), %dl
+	movb	%dl, 23(%rax)
+	movb	24(%rcx), %dl
+	movb	%dl, 24(%rax)
+	movb	25(%rcx), %dl
+	movb	%dl, 25(%rax)
+	movb	26(%rcx), %dl
+	movb	%dl, 26(%rax)
+	movb	27(%rcx), %dl
+	movb	%dl, 27(%rax)
+	movb	28(%rcx), %dl
+	movb	%dl, 28(%rax)
+	movb	29(%rcx), %dl
+	movb	%dl, 29(%rax)
+	movb	30(%rcx), %dl
+	movb	%dl, 30(%rax)
+	movb	31(%rcx), %cl
+	movb	%cl, 31(%rax)
+	movq	%rsp, %rax
+	leaq	-13400(%rsp), %rsp
+	call	L_crypto_kem_enc_derand_jazz$1
+Ljade_kem_kyber_kyber768_amd64_ref_enc_derand$1:
+	leaq	13400(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	32(%rsp), %r15
+	movq	40(%rsp), %r14
+	movq	48(%rsp), %r13
+	movq	56(%rsp), %r12
+	movq	64(%rsp), %rbp
+	movq	72(%rsp), %rbx
+	movq	80(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber768_amd64_ref_keypair:
+jade_kem_kyber_kyber768_amd64_ref_keypair:
+	movq	%rsp, %rax
+	leaq	-120(%rsp), %rsp
+	andq	$-16, %rsp
+	movq	%rax, 112(%rsp)
+	movq	%r15, 64(%rsp)
+	movq	%r14, 72(%rsp)
+	movq	%r13, 80(%rsp)
+	movq	%r12, 88(%rsp)
+	movq	%rbp, 96(%rsp)
+	movq	%rbx, 104(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %rbp
+	movq	%rsp, %rdi
+	movq	$64, %rsi
+	call	__jasmin_syscall_randombytes__
+	movq	%rsp, %rax
+	leaq	-10320(%rsp), %rsp
+	call	L_crypto_kem_keypair_derand_jazz$1
+Ljade_kem_kyber_kyber768_amd64_ref_keypair$1:
+	leaq	10320(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	64(%rsp), %r15
+	movq	72(%rsp), %r14
+	movq	80(%rsp), %r13
+	movq	88(%rsp), %r12
+	movq	96(%rsp), %rbp
+	movq	104(%rsp), %rbx
+	movq	112(%rsp), %rsp
+	ret
+_jade_kem_kyber_kyber768_amd64_ref_keypair_derand:
+jade_kem_kyber_kyber768_amd64_ref_keypair_derand:
+	movq	%rsp, %rax
+	leaq	-120(%rsp), %rsp
+	andq	$-8, %rsp
+	movq	%rax, 112(%rsp)
+	movq	%r15, 64(%rsp)
+	movq	%r14, 72(%rsp)
+	movq	%r13, 80(%rsp)
+	movq	%r12, 88(%rsp)
+	movq	%rbp, 96(%rsp)
+	movq	%rbx, 104(%rsp)
+	movq	%rdi, %rbx
+	movq	%rsi, %rbp
+	movq	%rsp, %rax
+	movb	(%rdx), %cl
+	movb	%cl, (%rax)
+	movb	1(%rdx), %cl
+	movb	%cl, 1(%rax)
+	movb	2(%rdx), %cl
+	movb	%cl, 2(%rax)
+	movb	3(%rdx), %cl
+	movb	%cl, 3(%rax)
+	movb	4(%rdx), %cl
+	movb	%cl, 4(%rax)
+	movb	5(%rdx), %cl
+	movb	%cl, 5(%rax)
+	movb	6(%rdx), %cl
+	movb	%cl, 6(%rax)
+	movb	7(%rdx), %cl
+	movb	%cl, 7(%rax)
+	movb	8(%rdx), %cl
+	movb	%cl, 8(%rax)
+	movb	9(%rdx), %cl
+	movb	%cl, 9(%rax)
+	movb	10(%rdx), %cl
+	movb	%cl, 10(%rax)
+	movb	11(%rdx), %cl
+	movb	%cl, 11(%rax)
+	movb	12(%rdx), %cl
+	movb	%cl, 12(%rax)
+	movb	13(%rdx), %cl
+	movb	%cl, 13(%rax)
+	movb	14(%rdx), %cl
+	movb	%cl, 14(%rax)
+	movb	15(%rdx), %cl
+	movb	%cl, 15(%rax)
+	movb	16(%rdx), %cl
+	movb	%cl, 16(%rax)
+	movb	17(%rdx), %cl
+	movb	%cl, 17(%rax)
+	movb	18(%rdx), %cl
+	movb	%cl, 18(%rax)
+	movb	19(%rdx), %cl
+	movb	%cl, 19(%rax)
+	movb	20(%rdx), %cl
+	movb	%cl, 20(%rax)
+	movb	21(%rdx), %cl
+	movb	%cl, 21(%rax)
+	movb	22(%rdx), %cl
+	movb	%cl, 22(%rax)
+	movb	23(%rdx), %cl
+	movb	%cl, 23(%rax)
+	movb	24(%rdx), %cl
+	movb	%cl, 24(%rax)
+	movb	25(%rdx), %cl
+	movb	%cl, 25(%rax)
+	movb	26(%rdx), %cl
+	movb	%cl, 26(%rax)
+	movb	27(%rdx), %cl
+	movb	%cl, 27(%rax)
+	movb	28(%rdx), %cl
+	movb	%cl, 28(%rax)
+	movb	29(%rdx), %cl
+	movb	%cl, 29(%rax)
+	movb	30(%rdx), %cl
+	movb	%cl, 30(%rax)
+	movb	31(%rdx), %cl
+	movb	%cl, 31(%rax)
+	movb	32(%rdx), %cl
+	movb	%cl, 32(%rax)
+	movb	33(%rdx), %cl
+	movb	%cl, 33(%rax)
+	movb	34(%rdx), %cl
+	movb	%cl, 34(%rax)
+	movb	35(%rdx), %cl
+	movb	%cl, 35(%rax)
+	movb	36(%rdx), %cl
+	movb	%cl, 36(%rax)
+	movb	37(%rdx), %cl
+	movb	%cl, 37(%rax)
+	movb	38(%rdx), %cl
+	movb	%cl, 38(%rax)
+	movb	39(%rdx), %cl
+	movb	%cl, 39(%rax)
+	movb	40(%rdx), %cl
+	movb	%cl, 40(%rax)
+	movb	41(%rdx), %cl
+	movb	%cl, 41(%rax)
+	movb	42(%rdx), %cl
+	movb	%cl, 42(%rax)
+	movb	43(%rdx), %cl
+	movb	%cl, 43(%rax)
+	movb	44(%rdx), %cl
+	movb	%cl, 44(%rax)
+	movb	45(%rdx), %cl
+	movb	%cl, 45(%rax)
+	movb	46(%rdx), %cl
+	movb	%cl, 46(%rax)
+	movb	47(%rdx), %cl
+	movb	%cl, 47(%rax)
+	movb	48(%rdx), %cl
+	movb	%cl, 48(%rax)
+	movb	49(%rdx), %cl
+	movb	%cl, 49(%rax)
+	movb	50(%rdx), %cl
+	movb	%cl, 50(%rax)
+	movb	51(%rdx), %cl
+	movb	%cl, 51(%rax)
+	movb	52(%rdx), %cl
+	movb	%cl, 52(%rax)
+	movb	53(%rdx), %cl
+	movb	%cl, 53(%rax)
+	movb	54(%rdx), %cl
+	movb	%cl, 54(%rax)
+	movb	55(%rdx), %cl
+	movb	%cl, 55(%rax)
+	movb	56(%rdx), %cl
+	movb	%cl, 56(%rax)
+	movb	57(%rdx), %cl
+	movb	%cl, 57(%rax)
+	movb	58(%rdx), %cl
+	movb	%cl, 58(%rax)
+	movb	59(%rdx), %cl
+	movb	%cl, 59(%rax)
+	movb	60(%rdx), %cl
+	movb	%cl, 60(%rax)
+	movb	61(%rdx), %cl
+	movb	%cl, 61(%rax)
+	movb	62(%rdx), %cl
+	movb	%cl, 62(%rax)
+	movb	63(%rdx), %cl
+	movb	%cl, 63(%rax)
+	movq	%rsp, %rax
+	leaq	-10320(%rsp), %rsp
+	call	L_crypto_kem_keypair_derand_jazz$1
+Ljade_kem_kyber_kyber768_amd64_ref_keypair_derand$1:
+	leaq	10320(%rsp), %rsp
+	xorq	%rax, %rax
+	movq	64(%rsp), %r15
+	movq	72(%rsp), %r14
+	movq	80(%rsp), %r13
+	movq	88(%rsp), %r12
+	movq	96(%rsp), %rbp
+	movq	104(%rsp), %rbx
+	movq	112(%rsp), %rsp
+	ret
+L_crypto_kem_enc_derand_jazz$1:
+	movq	%r12, 8(%rsp)
+	movq	%rbp, 16(%rsp)
+	movq	%rbx, 24(%rsp)
+	movq	(%rax), %rcx
+	movq	%rcx, 72(%rsp)
+	movq	8(%rax), %rcx
+	movq	%rcx, 80(%rsp)
+	movq	16(%rax), %rcx
+	movq	%rcx, 88(%rsp)
+	movq	24(%rax), %rax
+	movq	%rax, 96(%rsp)
+	leaq	136(%rsp), %rax
+	leaq	72(%rsp), %rdx
+	leaq	-208(%rsp), %rsp
+	call	L_sha3_256_32$1
+L_crypto_kem_enc_derand_jazz$208:
+	leaq	208(%rsp), %rsp
+	movq	8(%rsp), %rsi
+	movq	$1184, %rax
+	leaq	168(%rsp), %rcx
+	leaq	-232(%rsp), %rsp
+	call	L_sha3_256$1
+L_crypto_kem_enc_derand_jazz$207:
+	leaq	232(%rsp), %rsp
+	leaq	72(%rsp), %rax
+	leaq	136(%rsp), %rdx
+	leaq	-208(%rsp), %rsp
+	call	L_sha3_512_64$1
+L_crypto_kem_enc_derand_jazz$206:
+	leaq	208(%rsp), %rsp
+	movq	8(%rsp), %rdx
+	leaq	136(%rsp), %rcx
+	leaq	104(%rsp), %rax
+	movq	%rdx, %rsi
+	leaq	2448(%rsp), %rdi
+	call	L_poly_frombytes$1
+L_crypto_kem_enc_derand_jazz$205:
+	addq	$384, %rsi
+	leaq	2960(%rsp), %rdi
+	call	L_poly_frombytes$1
+L_crypto_kem_enc_derand_jazz$204:
+	addq	$384, %rsi
+	leaq	3472(%rsp), %rdi
+	call	L_poly_frombytes$1
+L_crypto_kem_enc_derand_jazz$203:
+	movq	$0, %rsi
+	addq	$1152, %rdx
+	jmp 	L_crypto_kem_enc_derand_jazz$201
+L_crypto_kem_enc_derand_jazz$202:
+	movq	(%rdx), %rdi
+	movq	%rdi, 40(%rsp,%rsi,8)
+	addq	$8, %rdx
+	incq	%rsi
+L_crypto_kem_enc_derand_jazz$201:
+	cmpq	$4, %rsi
+	jb  	L_crypto_kem_enc_derand_jazz$202
+	leaq	912(%rsp), %rdx
+	call	L_i_poly_frommsg$1
+L_crypto_kem_enc_derand_jazz$200:
+	movq	$1, %rcx
+	movq	%rcx, 8(%rsp)
+	movb	40(%rsp), %cl
+	movb	%cl, 13200(%rsp)
+	movb	41(%rsp), %cl
+	movb	%cl, 13201(%rsp)
+	movb	42(%rsp), %cl
+	movb	%cl, 13202(%rsp)
+	movb	43(%rsp), %cl
+	movb	%cl, 13203(%rsp)
+	movb	44(%rsp), %cl
+	movb	%cl, 13204(%rsp)
+	movb	45(%rsp), %cl
+	movb	%cl, 13205(%rsp)
+	movb	46(%rsp), %cl
+	movb	%cl, 13206(%rsp)
+	movb	47(%rsp), %cl
+	movb	%cl, 13207(%rsp)
+	movb	48(%rsp), %cl
+	movb	%cl, 13208(%rsp)
+	movb	49(%rsp), %cl
+	movb	%cl, 13209(%rsp)
+	movb	50(%rsp), %cl
+	movb	%cl, 13210(%rsp)
+	movb	51(%rsp), %cl
+	movb	%cl, 13211(%rsp)
+	movb	52(%rsp), %cl
+	movb	%cl, 13212(%rsp)
+	movb	53(%rsp), %cl
+	movb	%cl, 13213(%rsp)
+	movb	54(%rsp), %cl
+	movb	%cl, 13214(%rsp)
+	movb	55(%rsp), %cl
+	movb	%cl, 13215(%rsp)
+	movb	56(%rsp), %cl
+	movb	%cl, 13216(%rsp)
+	movb	57(%rsp), %cl
+	movb	%cl, 13217(%rsp)
+	movb	58(%rsp), %cl
+	movb	%cl, 13218(%rsp)
+	movb	59(%rsp), %cl
+	movb	%cl, 13219(%rsp)
+	movb	60(%rsp), %cl
+	movb	%cl, 13220(%rsp)
+	movb	61(%rsp), %cl
+	movb	%cl, 13221(%rsp)
+	movb	62(%rsp), %cl
+	movb	%cl, 13222(%rsp)
+	movb	63(%rsp), %cl
+	movb	%cl, 13223(%rsp)
+	movb	64(%rsp), %cl
+	movb	%cl, 13224(%rsp)
+	movb	65(%rsp), %cl
+	movb	%cl, 13225(%rsp)
+	movb	66(%rsp), %cl
+	movb	%cl, 13226(%rsp)
+	movb	67(%rsp), %cl
+	movb	%cl, 13227(%rsp)
+	movb	68(%rsp), %cl
+	movb	%cl, 13228(%rsp)
+	movb	69(%rsp), %cl
+	movb	%cl, 13229(%rsp)
+	movb	70(%rsp), %cl
+	movb	%cl, 13230(%rsp)
+	movb	71(%rsp), %cl
+	movb	%cl, 13231(%rsp)
+	movq	8(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	L_crypto_kem_enc_derand_jazz$198
+	movb	$0, 13232(%rsp)
+	movb	$0, 13233(%rsp)
+	jmp 	L_crypto_kem_enc_derand_jazz$199
+L_crypto_kem_enc_derand_jazz$198:
+	movb	$0, 13232(%rsp)
+	movb	$0, 13233(%rsp)
+L_crypto_kem_enc_derand_jazz$199:
+	leaq	200(%rsp), %rcx
+	leaq	13200(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_enc_derand_jazz$197:
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$195
+L_crypto_kem_enc_derand_jazz$196:
+	movq	%rcx, 400(%rsp,%rcx,8)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$195:
+	cmpq	$64, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$196
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$187
+L_crypto_kem_enc_derand_jazz$188:
+	movq	%rcx, 32(%rsp)
+	leaq	200(%rsp), %rcx
+	leaq	13234(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_enc_derand_jazz$194:
+	leaq	8(%rsp), %rsp
+	movq	32(%rsp), %rcx
+	movq	$0, %rdx
+L_crypto_kem_enc_derand_jazz$189:
+	movzbw	13234(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L_crypto_kem_enc_derand_jazz$192
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$192
+	movw	%si, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$193:
+L_crypto_kem_enc_derand_jazz$192:
+	cmpw	$3329, %r8w
+	jnb 	L_crypto_kem_enc_derand_jazz$190
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$190
+	movw	%r8w, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$191:
+L_crypto_kem_enc_derand_jazz$190:
+	cmpq	$166, %rdx
+	jb  	L_crypto_kem_enc_derand_jazz$189
+L_crypto_kem_enc_derand_jazz$187:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$188
+	movq	$0, %rcx
+	movq	$0, %rdx
+	jmp 	L_crypto_kem_enc_derand_jazz$185
+L_crypto_kem_enc_derand_jazz$186:
+	movw	400(%rsp,%rcx,2), %si
+	movw	%si, 8592(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+L_crypto_kem_enc_derand_jazz$185:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$186
+	movq	8(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	L_crypto_kem_enc_derand_jazz$183
+	movb	$0, 13232(%rsp)
+	movb	$1, 13233(%rsp)
+	jmp 	L_crypto_kem_enc_derand_jazz$184
+L_crypto_kem_enc_derand_jazz$183:
+	movb	$1, 13232(%rsp)
+	movb	$0, 13233(%rsp)
+L_crypto_kem_enc_derand_jazz$184:
+	leaq	200(%rsp), %rcx
+	leaq	13200(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_enc_derand_jazz$182:
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$180
+L_crypto_kem_enc_derand_jazz$181:
+	movq	%rcx, 400(%rsp,%rcx,8)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$180:
+	cmpq	$64, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$181
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$172
+L_crypto_kem_enc_derand_jazz$173:
+	movq	%rcx, 32(%rsp)
+	leaq	200(%rsp), %rcx
+	leaq	13234(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_enc_derand_jazz$179:
+	leaq	8(%rsp), %rsp
+	movq	32(%rsp), %rcx
+	movq	$0, %rdx
+L_crypto_kem_enc_derand_jazz$174:
+	movzbw	13234(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L_crypto_kem_enc_derand_jazz$177
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$177
+	movw	%si, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$178:
+L_crypto_kem_enc_derand_jazz$177:
+	cmpw	$3329, %r8w
+	jnb 	L_crypto_kem_enc_derand_jazz$175
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$175
+	movw	%r8w, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$176:
+L_crypto_kem_enc_derand_jazz$175:
+	cmpq	$166, %rdx
+	jb  	L_crypto_kem_enc_derand_jazz$174
+L_crypto_kem_enc_derand_jazz$172:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$173
+	movq	$0, %rcx
+	movq	$256, %rdx
+	jmp 	L_crypto_kem_enc_derand_jazz$170
+L_crypto_kem_enc_derand_jazz$171:
+	movw	400(%rsp,%rcx,2), %si
+	movw	%si, 8592(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+L_crypto_kem_enc_derand_jazz$170:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$171
+	movq	8(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	L_crypto_kem_enc_derand_jazz$168
+	movb	$0, 13232(%rsp)
+	movb	$2, 13233(%rsp)
+	jmp 	L_crypto_kem_enc_derand_jazz$169
+L_crypto_kem_enc_derand_jazz$168:
+	movb	$2, 13232(%rsp)
+	movb	$0, 13233(%rsp)
+L_crypto_kem_enc_derand_jazz$169:
+	leaq	200(%rsp), %rcx
+	leaq	13200(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_enc_derand_jazz$167:
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$165
+L_crypto_kem_enc_derand_jazz$166:
+	movq	%rcx, 400(%rsp,%rcx,8)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$165:
+	cmpq	$64, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$166
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$157
+L_crypto_kem_enc_derand_jazz$158:
+	movq	%rcx, 32(%rsp)
+	leaq	200(%rsp), %rcx
+	leaq	13234(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_enc_derand_jazz$164:
+	leaq	8(%rsp), %rsp
+	movq	32(%rsp), %rcx
+	movq	$0, %rdx
+L_crypto_kem_enc_derand_jazz$159:
+	movzbw	13234(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L_crypto_kem_enc_derand_jazz$162
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$162
+	movw	%si, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$163:
+L_crypto_kem_enc_derand_jazz$162:
+	cmpw	$3329, %r8w
+	jnb 	L_crypto_kem_enc_derand_jazz$160
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$160
+	movw	%r8w, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$161:
+L_crypto_kem_enc_derand_jazz$160:
+	cmpq	$166, %rdx
+	jb  	L_crypto_kem_enc_derand_jazz$159
+L_crypto_kem_enc_derand_jazz$157:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$158
+	movq	$0, %rcx
+	movq	$512, %rdx
+	jmp 	L_crypto_kem_enc_derand_jazz$155
+L_crypto_kem_enc_derand_jazz$156:
+	movw	400(%rsp,%rcx,2), %si
+	movw	%si, 8592(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+L_crypto_kem_enc_derand_jazz$155:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$156
+	movq	8(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	L_crypto_kem_enc_derand_jazz$153
+	movb	$1, 13232(%rsp)
+	movb	$0, 13233(%rsp)
+	jmp 	L_crypto_kem_enc_derand_jazz$154
+L_crypto_kem_enc_derand_jazz$153:
+	movb	$0, 13232(%rsp)
+	movb	$1, 13233(%rsp)
+L_crypto_kem_enc_derand_jazz$154:
+	leaq	200(%rsp), %rcx
+	leaq	13200(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_enc_derand_jazz$152:
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$150
+L_crypto_kem_enc_derand_jazz$151:
+	movq	%rcx, 400(%rsp,%rcx,8)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$150:
+	cmpq	$64, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$151
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$142
+L_crypto_kem_enc_derand_jazz$143:
+	movq	%rcx, 32(%rsp)
+	leaq	200(%rsp), %rcx
+	leaq	13234(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_enc_derand_jazz$149:
+	leaq	8(%rsp), %rsp
+	movq	32(%rsp), %rcx
+	movq	$0, %rdx
+L_crypto_kem_enc_derand_jazz$144:
+	movzbw	13234(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L_crypto_kem_enc_derand_jazz$147
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$147
+	movw	%si, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$148:
+L_crypto_kem_enc_derand_jazz$147:
+	cmpw	$3329, %r8w
+	jnb 	L_crypto_kem_enc_derand_jazz$145
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$145
+	movw	%r8w, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$146:
+L_crypto_kem_enc_derand_jazz$145:
+	cmpq	$166, %rdx
+	jb  	L_crypto_kem_enc_derand_jazz$144
+L_crypto_kem_enc_derand_jazz$142:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$143
+	movq	$0, %rcx
+	movq	$768, %rdx
+	jmp 	L_crypto_kem_enc_derand_jazz$140
+L_crypto_kem_enc_derand_jazz$141:
+	movw	400(%rsp,%rcx,2), %si
+	movw	%si, 8592(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+L_crypto_kem_enc_derand_jazz$140:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$141
+	movq	8(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	L_crypto_kem_enc_derand_jazz$138
+	movb	$1, 13232(%rsp)
+	movb	$1, 13233(%rsp)
+	jmp 	L_crypto_kem_enc_derand_jazz$139
+L_crypto_kem_enc_derand_jazz$138:
+	movb	$1, 13232(%rsp)
+	movb	$1, 13233(%rsp)
+L_crypto_kem_enc_derand_jazz$139:
+	leaq	200(%rsp), %rcx
+	leaq	13200(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_enc_derand_jazz$137:
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$135
+L_crypto_kem_enc_derand_jazz$136:
+	movq	%rcx, 400(%rsp,%rcx,8)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$135:
+	cmpq	$64, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$136
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$127
+L_crypto_kem_enc_derand_jazz$128:
+	movq	%rcx, 32(%rsp)
+	leaq	200(%rsp), %rcx
+	leaq	13234(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_enc_derand_jazz$134:
+	leaq	8(%rsp), %rsp
+	movq	32(%rsp), %rcx
+	movq	$0, %rdx
+L_crypto_kem_enc_derand_jazz$129:
+	movzbw	13234(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L_crypto_kem_enc_derand_jazz$132
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$132
+	movw	%si, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$133:
+L_crypto_kem_enc_derand_jazz$132:
+	cmpw	$3329, %r8w
+	jnb 	L_crypto_kem_enc_derand_jazz$130
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$130
+	movw	%r8w, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$131:
+L_crypto_kem_enc_derand_jazz$130:
+	cmpq	$166, %rdx
+	jb  	L_crypto_kem_enc_derand_jazz$129
+L_crypto_kem_enc_derand_jazz$127:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$128
+	movq	$0, %rcx
+	movq	$1024, %rdx
+	jmp 	L_crypto_kem_enc_derand_jazz$125
+L_crypto_kem_enc_derand_jazz$126:
+	movw	400(%rsp,%rcx,2), %si
+	movw	%si, 8592(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+L_crypto_kem_enc_derand_jazz$125:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$126
+	movq	8(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	L_crypto_kem_enc_derand_jazz$123
+	movb	$1, 13232(%rsp)
+	movb	$2, 13233(%rsp)
+	jmp 	L_crypto_kem_enc_derand_jazz$124
+L_crypto_kem_enc_derand_jazz$123:
+	movb	$2, 13232(%rsp)
+	movb	$1, 13233(%rsp)
+L_crypto_kem_enc_derand_jazz$124:
+	leaq	200(%rsp), %rcx
+	leaq	13200(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_enc_derand_jazz$122:
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$120
+L_crypto_kem_enc_derand_jazz$121:
+	movq	%rcx, 400(%rsp,%rcx,8)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$120:
+	cmpq	$64, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$121
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$112
+L_crypto_kem_enc_derand_jazz$113:
+	movq	%rcx, 32(%rsp)
+	leaq	200(%rsp), %rcx
+	leaq	13234(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_enc_derand_jazz$119:
+	leaq	8(%rsp), %rsp
+	movq	32(%rsp), %rcx
+	movq	$0, %rdx
+L_crypto_kem_enc_derand_jazz$114:
+	movzbw	13234(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L_crypto_kem_enc_derand_jazz$117
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$117
+	movw	%si, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$118:
+L_crypto_kem_enc_derand_jazz$117:
+	cmpw	$3329, %r8w
+	jnb 	L_crypto_kem_enc_derand_jazz$115
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$115
+	movw	%r8w, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$116:
+L_crypto_kem_enc_derand_jazz$115:
+	cmpq	$166, %rdx
+	jb  	L_crypto_kem_enc_derand_jazz$114
+L_crypto_kem_enc_derand_jazz$112:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$113
+	movq	$0, %rcx
+	movq	$1280, %rdx
+	jmp 	L_crypto_kem_enc_derand_jazz$110
+L_crypto_kem_enc_derand_jazz$111:
+	movw	400(%rsp,%rcx,2), %si
+	movw	%si, 8592(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+L_crypto_kem_enc_derand_jazz$110:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$111
+	movq	8(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	L_crypto_kem_enc_derand_jazz$108
+	movb	$2, 13232(%rsp)
+	movb	$0, 13233(%rsp)
+	jmp 	L_crypto_kem_enc_derand_jazz$109
+L_crypto_kem_enc_derand_jazz$108:
+	movb	$0, 13232(%rsp)
+	movb	$2, 13233(%rsp)
+L_crypto_kem_enc_derand_jazz$109:
+	leaq	200(%rsp), %rcx
+	leaq	13200(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_enc_derand_jazz$107:
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$105
+L_crypto_kem_enc_derand_jazz$106:
+	movq	%rcx, 400(%rsp,%rcx,8)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$105:
+	cmpq	$64, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$106
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$97
+L_crypto_kem_enc_derand_jazz$98:
+	movq	%rcx, 32(%rsp)
+	leaq	200(%rsp), %rcx
+	leaq	13234(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_enc_derand_jazz$104:
+	leaq	8(%rsp), %rsp
+	movq	32(%rsp), %rcx
+	movq	$0, %rdx
+L_crypto_kem_enc_derand_jazz$99:
+	movzbw	13234(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L_crypto_kem_enc_derand_jazz$102
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$102
+	movw	%si, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$103:
+L_crypto_kem_enc_derand_jazz$102:
+	cmpw	$3329, %r8w
+	jnb 	L_crypto_kem_enc_derand_jazz$100
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$100
+	movw	%r8w, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$101:
+L_crypto_kem_enc_derand_jazz$100:
+	cmpq	$166, %rdx
+	jb  	L_crypto_kem_enc_derand_jazz$99
+L_crypto_kem_enc_derand_jazz$97:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$98
+	movq	$0, %rcx
+	movq	$1536, %rdx
+	jmp 	L_crypto_kem_enc_derand_jazz$95
+L_crypto_kem_enc_derand_jazz$96:
+	movw	400(%rsp,%rcx,2), %si
+	movw	%si, 8592(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+L_crypto_kem_enc_derand_jazz$95:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$96
+	movq	8(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	L_crypto_kem_enc_derand_jazz$93
+	movb	$2, 13232(%rsp)
+	movb	$1, 13233(%rsp)
+	jmp 	L_crypto_kem_enc_derand_jazz$94
+L_crypto_kem_enc_derand_jazz$93:
+	movb	$1, 13232(%rsp)
+	movb	$2, 13233(%rsp)
+L_crypto_kem_enc_derand_jazz$94:
+	leaq	200(%rsp), %rcx
+	leaq	13200(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_enc_derand_jazz$92:
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$90
+L_crypto_kem_enc_derand_jazz$91:
+	movq	%rcx, 400(%rsp,%rcx,8)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$90:
+	cmpq	$64, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$91
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$82
+L_crypto_kem_enc_derand_jazz$83:
+	movq	%rcx, 32(%rsp)
+	leaq	200(%rsp), %rcx
+	leaq	13234(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_enc_derand_jazz$89:
+	leaq	8(%rsp), %rsp
+	movq	32(%rsp), %rcx
+	movq	$0, %rdx
+L_crypto_kem_enc_derand_jazz$84:
+	movzbw	13234(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L_crypto_kem_enc_derand_jazz$87
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$87
+	movw	%si, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$88:
+L_crypto_kem_enc_derand_jazz$87:
+	cmpw	$3329, %r8w
+	jnb 	L_crypto_kem_enc_derand_jazz$85
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$85
+	movw	%r8w, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$86:
+L_crypto_kem_enc_derand_jazz$85:
+	cmpq	$166, %rdx
+	jb  	L_crypto_kem_enc_derand_jazz$84
+L_crypto_kem_enc_derand_jazz$82:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$83
+	movq	$0, %rcx
+	movq	$1792, %rdx
+	jmp 	L_crypto_kem_enc_derand_jazz$80
+L_crypto_kem_enc_derand_jazz$81:
+	movw	400(%rsp,%rcx,2), %si
+	movw	%si, 8592(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+L_crypto_kem_enc_derand_jazz$80:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$81
+	movq	8(%rsp), %rcx
+	cmpq	$0, %rcx
+	je  	L_crypto_kem_enc_derand_jazz$78
+	movb	$2, 13232(%rsp)
+	movb	$2, 13233(%rsp)
+	jmp 	L_crypto_kem_enc_derand_jazz$79
+L_crypto_kem_enc_derand_jazz$78:
+	movb	$2, 13232(%rsp)
+	movb	$2, 13233(%rsp)
+L_crypto_kem_enc_derand_jazz$79:
+	leaq	200(%rsp), %rcx
+	leaq	13200(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_enc_derand_jazz$77:
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$75
+L_crypto_kem_enc_derand_jazz$76:
+	movq	%rcx, 400(%rsp,%rcx,8)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$75:
+	cmpq	$64, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$76
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$67
+L_crypto_kem_enc_derand_jazz$68:
+	movq	%rcx, 8(%rsp)
+	leaq	200(%rsp), %rcx
+	leaq	13234(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_enc_derand_jazz$74:
+	leaq	8(%rsp), %rsp
+	movq	8(%rsp), %rcx
+	movq	$0, %rdx
+L_crypto_kem_enc_derand_jazz$69:
+	movzbw	13234(%rsp,%rdx), %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	movw	%di, %r8w
+	shrw	$4, %r8w
+	andw	$15, %di
+	shlw	$8, %di
+	orw 	%di, %si
+	incq	%rdx
+	movzbw	13234(%rsp,%rdx), %di
+	shlw	$4, %di
+	orw 	%di, %r8w
+	incq	%rdx
+	cmpw	$3329, %si
+	jnb 	L_crypto_kem_enc_derand_jazz$72
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$72
+	movw	%si, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$73:
+L_crypto_kem_enc_derand_jazz$72:
+	cmpw	$3329, %r8w
+	jnb 	L_crypto_kem_enc_derand_jazz$70
+	cmpq	$256, %rcx
+	jnb 	L_crypto_kem_enc_derand_jazz$70
+	movw	%r8w, 400(%rsp,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$71:
+L_crypto_kem_enc_derand_jazz$70:
+	cmpq	$166, %rdx
+	jb  	L_crypto_kem_enc_derand_jazz$69
+L_crypto_kem_enc_derand_jazz$67:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$68
+	movq	$0, %rcx
+	movq	$2048, %rdx
+	jmp 	L_crypto_kem_enc_derand_jazz$65
+L_crypto_kem_enc_derand_jazz$66:
+	movw	400(%rsp,%rcx,2), %si
+	movw	%si, 8592(%rsp,%rdx,2)
+	incq	%rcx
+	incq	%rdx
+L_crypto_kem_enc_derand_jazz$65:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$66
+	movb	$0, %cl
+	leaq	3984(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_enc_derand_jazz$64:
+	leaq	176(%rsp), %rsp
+	movb	$1, %cl
+	leaq	4496(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_enc_derand_jazz$63:
+	leaq	176(%rsp), %rsp
+	movb	$2, %cl
+	leaq	5008(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_enc_derand_jazz$62:
+	leaq	176(%rsp), %rsp
+	movb	$3, %cl
+	leaq	5520(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_enc_derand_jazz$61:
+	leaq	176(%rsp), %rsp
+	movb	$4, %cl
+	leaq	6032(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_enc_derand_jazz$60:
+	leaq	176(%rsp), %rsp
+	movb	$5, %cl
+	leaq	6544(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_enc_derand_jazz$59:
+	leaq	176(%rsp), %rsp
+	movb	$6, %cl
+	leaq	400(%rsp), %rdx
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_enc_derand_jazz$58:
+	leaq	176(%rsp), %rsp
+	leaq	3984(%rsp), %rcx
+	call	L_poly_ntt$1
+L_crypto_kem_enc_derand_jazz$57:
+	leaq	4496(%rsp), %rcx
+	call	L_poly_ntt$1
+L_crypto_kem_enc_derand_jazz$56:
+	leaq	5008(%rsp), %rcx
+	call	L_poly_ntt$1
+L_crypto_kem_enc_derand_jazz$55:
+	leaq	7056(%rsp), %rdi
+	leaq	8592(%rsp), %rcx
+	leaq	3984(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_enc_derand_jazz$54:
+	leaq	16(%rsp), %rsp
+	leaq	1424(%rsp), %rdi
+	leaq	9104(%rsp), %rcx
+	leaq	4496(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_enc_derand_jazz$53:
+	leaq	16(%rsp), %rsp
+	leaq	7056(%rsp), %rcx
+	leaq	1424(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$52:
+	leaq	1424(%rsp), %rdi
+	leaq	9616(%rsp), %rcx
+	leaq	5008(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_enc_derand_jazz$51:
+	leaq	16(%rsp), %rsp
+	leaq	7056(%rsp), %rcx
+	leaq	1424(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$50:
+	leaq	7056(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$48
+L_crypto_kem_enc_derand_jazz$49:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$48:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$49
+	leaq	7568(%rsp), %rdi
+	leaq	10128(%rsp), %rcx
+	leaq	3984(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_enc_derand_jazz$47:
+	leaq	16(%rsp), %rsp
+	leaq	1424(%rsp), %rdi
+	leaq	10640(%rsp), %rcx
+	leaq	4496(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_enc_derand_jazz$46:
+	leaq	16(%rsp), %rsp
+	leaq	7568(%rsp), %rcx
+	leaq	1424(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$45:
+	leaq	1424(%rsp), %rdi
+	leaq	11152(%rsp), %rcx
+	leaq	5008(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_enc_derand_jazz$44:
+	leaq	16(%rsp), %rsp
+	leaq	7568(%rsp), %rcx
+	leaq	1424(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$43:
+	leaq	7568(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$41
+L_crypto_kem_enc_derand_jazz$42:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$41:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$42
+	leaq	8080(%rsp), %rdi
+	leaq	11664(%rsp), %rcx
+	leaq	3984(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_enc_derand_jazz$40:
+	leaq	16(%rsp), %rsp
+	leaq	1424(%rsp), %rdi
+	leaq	12176(%rsp), %rcx
+	leaq	4496(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_enc_derand_jazz$39:
+	leaq	16(%rsp), %rsp
+	leaq	8080(%rsp), %rcx
+	leaq	1424(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$38:
+	leaq	1424(%rsp), %rdi
+	leaq	12688(%rsp), %rcx
+	leaq	5008(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_enc_derand_jazz$37:
+	leaq	16(%rsp), %rsp
+	leaq	8080(%rsp), %rcx
+	leaq	1424(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$36:
+	leaq	8080(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$34
+L_crypto_kem_enc_derand_jazz$35:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$34:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$35
+	leaq	1424(%rsp), %rdi
+	leaq	2448(%rsp), %rcx
+	leaq	3984(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_enc_derand_jazz$33:
+	leaq	16(%rsp), %rsp
+	leaq	1936(%rsp), %rdi
+	leaq	2960(%rsp), %rcx
+	leaq	4496(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_enc_derand_jazz$32:
+	leaq	16(%rsp), %rsp
+	leaq	1424(%rsp), %rcx
+	leaq	1936(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$31:
+	leaq	1936(%rsp), %rdi
+	leaq	3472(%rsp), %rcx
+	leaq	5008(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_enc_derand_jazz$30:
+	leaq	16(%rsp), %rsp
+	leaq	1424(%rsp), %rcx
+	leaq	1936(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$29:
+	leaq	1424(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$27
+L_crypto_kem_enc_derand_jazz$28:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$27:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$28
+	leaq	7056(%rsp), %rcx
+	call	L_poly_invntt$1
+L_crypto_kem_enc_derand_jazz$26:
+	leaq	7568(%rsp), %rcx
+	call	L_poly_invntt$1
+L_crypto_kem_enc_derand_jazz$25:
+	leaq	8080(%rsp), %rcx
+	call	L_poly_invntt$1
+L_crypto_kem_enc_derand_jazz$24:
+	leaq	1424(%rsp), %rcx
+	call	L_poly_invntt$1
+L_crypto_kem_enc_derand_jazz$23:
+	leaq	7056(%rsp), %rcx
+	leaq	5520(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$22:
+	leaq	7568(%rsp), %rcx
+	leaq	6032(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$21:
+	leaq	8080(%rsp), %rcx
+	leaq	6544(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$20:
+	leaq	1424(%rsp), %rcx
+	leaq	400(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$19:
+	leaq	1424(%rsp), %rcx
+	leaq	912(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_enc_derand_jazz$18:
+	leaq	7056(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$16
+L_crypto_kem_enc_derand_jazz$17:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$16:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$17
+	leaq	7568(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$14
+L_crypto_kem_enc_derand_jazz$15:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$14:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$15
+	leaq	8080(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$12
+L_crypto_kem_enc_derand_jazz$13:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$12:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$13
+	leaq	1424(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_enc_derand_jazz$10
+L_crypto_kem_enc_derand_jazz$11:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_enc_derand_jazz$10:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_enc_derand_jazz$11
+	movq	16(%rsp), %rax
+	movq	$0, %rdx
+	movq	$0, %rsi
+	leaq	7056(%rsp), %rcx
+	call	L_poly_csubq$1
+L_crypto_kem_enc_derand_jazz$9:
+	leaq	7568(%rsp), %rcx
+	call	L_poly_csubq$1
+L_crypto_kem_enc_derand_jazz$8:
+	leaq	8080(%rsp), %rcx
+	call	L_poly_csubq$1
+L_crypto_kem_enc_derand_jazz$7:
+	jmp 	L_crypto_kem_enc_derand_jazz$5
+L_crypto_kem_enc_derand_jazz$6:
+	movzwq	7056(%rsp,%rdx,2), %rcx
+	incq	%rdx
+	shlq	$10, %rcx
+	addq	$1665, %rcx
+	imulq	$1290167, %rcx, %rcx
+	shrq	$32, %rcx
+	andq	$1023, %rcx
+	movzwq	7056(%rsp,%rdx,2), %rdi
+	incq	%rdx
+	shlq	$10, %rdi
+	addq	$1665, %rdi
+	imulq	$1290167, %rdi, %rdi
+	shrq	$32, %rdi
+	andq	$1023, %rdi
+	movzwq	7056(%rsp,%rdx,2), %r8
+	incq	%rdx
+	shlq	$10, %r8
+	addq	$1665, %r8
+	imulq	$1290167, %r8, %r8
+	shrq	$32, %r8
+	andq	$1023, %r8
+	movzwq	7056(%rsp,%rdx,2), %r9
+	incq	%rdx
+	shlq	$10, %r9
+	addq	$1665, %r9
+	imulq	$1290167, %r9, %r9
+	shrq	$32, %r9
+	andq	$1023, %r9
+	movw	%cx, %r10w
+	andw	$255, %r10w
+	movb	%r10b, (%rax,%rsi)
+	incq	%rsi
+	shrw	$8, %cx
+	movw	%di, %r10w
+	shlw	$2, %r10w
+	orw 	%cx, %r10w
+	movb	%r10b, (%rax,%rsi)
+	incq	%rsi
+	shrw	$6, %di
+	movw	%r8w, %cx
+	shlw	$4, %cx
+	orw 	%di, %cx
+	movb	%cl, (%rax,%rsi)
+	incq	%rsi
+	shrw	$4, %r8w
+	movw	%r9w, %cx
+	shlw	$6, %cx
+	orw 	%r8w, %cx
+	movb	%cl, (%rax,%rsi)
+	incq	%rsi
+	shrq	$2, %r9
+	movb	%r9b, (%rax,%rsi)
+	incq	%rsi
+L_crypto_kem_enc_derand_jazz$5:
+	cmpq	$768, %rdx
+	jb  	L_crypto_kem_enc_derand_jazz$6
+	addq	$960, %rax
+	leaq	1424(%rsp), %rcx
+	call	L_poly_compress$1
+L_crypto_kem_enc_derand_jazz$4:
+	movq	16(%rsp), %rsi
+	movq	$1088, %rax
+	leaq	104(%rsp), %rcx
+	leaq	-232(%rsp), %rsp
+	call	L_sha3_256$1
+L_crypto_kem_enc_derand_jazz$3:
+	leaq	232(%rsp), %rsp
+	movq	24(%rsp), %rax
+	movq	$32, %rcx
+	leaq	72(%rsp), %rdx
+	leaq	-216(%rsp), %rsp
+	call	L_shake256_64$1
+L_crypto_kem_enc_derand_jazz$2:
+	leaq	216(%rsp), %rsp
+	ret
+L_crypto_kem_keypair_derand_jazz$1:
+	movq	%rax, 8(%rsp)
+	movq	%rbx, 16(%rsp)
+	movq	%rbp, 24(%rsp)
+	movq	%rbx, 32(%rsp)
+	movq	%rbp, 40(%rsp)
+	movq	(%rax), %rcx
+	movq	%rcx, 64(%rsp)
+	movq	8(%rax), %rcx
+	movq	%rcx, 72(%rsp)
+	movq	16(%rax), %rcx
+	movq	%rcx, 80(%rsp)
+	movq	24(%rax), %rax
+	movq	%rax, 88(%rsp)
+	leaq	128(%rsp), %rcx
+	leaq	64(%rsp), %rax
+	leaq	-208(%rsp), %rsp
+	call	L_sha3_512_32$1
+L_crypto_kem_keypair_derand_jazz$189:
+	leaq	208(%rsp), %rsp
+	movq	128(%rsp), %rax
+	movq	%rax, 96(%rsp)
+	movq	160(%rsp), %rax
+	movq	%rax, 64(%rsp)
+	movq	136(%rsp), %rax
+	movq	%rax, 104(%rsp)
+	movq	168(%rsp), %rax
+	movq	%rax, 72(%rsp)
+	movq	144(%rsp), %rax
+	movq	%rax, 112(%rsp)
+	movq	176(%rsp), %rax
+	movq	%rax, 80(%rsp)
+	movq	152(%rsp), %rax
+	movq	%rax, 120(%rsp)
+	movq	184(%rsp), %rax
+	movq	%rax, 88(%rsp)
+	movq	$0, %rax
+	movq	%rax, 48(%rsp)
+	movb	96(%rsp), %al
+	movb	%al, 10120(%rsp)
+	movb	97(%rsp), %al
+	movb	%al, 10121(%rsp)
+	movb	98(%rsp), %al
+	movb	%al, 10122(%rsp)
+	movb	99(%rsp), %al
+	movb	%al, 10123(%rsp)
+	movb	100(%rsp), %al
+	movb	%al, 10124(%rsp)
+	movb	101(%rsp), %al
+	movb	%al, 10125(%rsp)
+	movb	102(%rsp), %al
+	movb	%al, 10126(%rsp)
+	movb	103(%rsp), %al
+	movb	%al, 10127(%rsp)
+	movb	104(%rsp), %al
+	movb	%al, 10128(%rsp)
+	movb	105(%rsp), %al
+	movb	%al, 10129(%rsp)
+	movb	106(%rsp), %al
+	movb	%al, 10130(%rsp)
+	movb	107(%rsp), %al
+	movb	%al, 10131(%rsp)
+	movb	108(%rsp), %al
+	movb	%al, 10132(%rsp)
+	movb	109(%rsp), %al
+	movb	%al, 10133(%rsp)
+	movb	110(%rsp), %al
+	movb	%al, 10134(%rsp)
+	movb	111(%rsp), %al
+	movb	%al, 10135(%rsp)
+	movb	112(%rsp), %al
+	movb	%al, 10136(%rsp)
+	movb	113(%rsp), %al
+	movb	%al, 10137(%rsp)
+	movb	114(%rsp), %al
+	movb	%al, 10138(%rsp)
+	movb	115(%rsp), %al
+	movb	%al, 10139(%rsp)
+	movb	116(%rsp), %al
+	movb	%al, 10140(%rsp)
+	movb	117(%rsp), %al
+	movb	%al, 10141(%rsp)
+	movb	118(%rsp), %al
+	movb	%al, 10142(%rsp)
+	movb	119(%rsp), %al
+	movb	%al, 10143(%rsp)
+	movb	120(%rsp), %al
+	movb	%al, 10144(%rsp)
+	movb	121(%rsp), %al
+	movb	%al, 10145(%rsp)
+	movb	122(%rsp), %al
+	movb	%al, 10146(%rsp)
+	movb	123(%rsp), %al
+	movb	%al, 10147(%rsp)
+	movb	124(%rsp), %al
+	movb	%al, 10148(%rsp)
+	movb	125(%rsp), %al
+	movb	%al, 10149(%rsp)
+	movb	126(%rsp), %al
+	movb	%al, 10150(%rsp)
+	movb	127(%rsp), %al
+	movb	%al, 10151(%rsp)
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L_crypto_kem_keypair_derand_jazz$187
+	movb	$0, 10152(%rsp)
+	movb	$0, 10153(%rsp)
+	jmp 	L_crypto_kem_keypair_derand_jazz$188
+L_crypto_kem_keypair_derand_jazz$187:
+	movb	$0, 10152(%rsp)
+	movb	$0, 10153(%rsp)
+L_crypto_kem_keypair_derand_jazz$188:
+	leaq	192(%rsp), %rcx
+	leaq	10120(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_keypair_derand_jazz$186:
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$184
+L_crypto_kem_keypair_derand_jazz$185:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$184:
+	cmpq	$64, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$185
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$176
+L_crypto_kem_keypair_derand_jazz$177:
+	movq	%rax, 56(%rsp)
+	leaq	192(%rsp), %rcx
+	leaq	10154(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_keypair_derand_jazz$183:
+	leaq	8(%rsp), %rsp
+	movq	56(%rsp), %rax
+	movq	$0, %rcx
+L_crypto_kem_keypair_derand_jazz$178:
+	movzbw	10154(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L_crypto_kem_keypair_derand_jazz$181
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$181
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$182:
+L_crypto_kem_keypair_derand_jazz$181:
+	cmpw	$3329, %di
+	jnb 	L_crypto_kem_keypair_derand_jazz$179
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$179
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$180:
+L_crypto_kem_keypair_derand_jazz$179:
+	cmpq	$166, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$178
+L_crypto_kem_keypair_derand_jazz$176:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$177
+	movq	$0, %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$174
+L_crypto_kem_keypair_derand_jazz$175:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 5512(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$174:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$175
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L_crypto_kem_keypair_derand_jazz$172
+	movb	$0, 10152(%rsp)
+	movb	$1, 10153(%rsp)
+	jmp 	L_crypto_kem_keypair_derand_jazz$173
+L_crypto_kem_keypair_derand_jazz$172:
+	movb	$1, 10152(%rsp)
+	movb	$0, 10153(%rsp)
+L_crypto_kem_keypair_derand_jazz$173:
+	leaq	192(%rsp), %rcx
+	leaq	10120(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_keypair_derand_jazz$171:
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$169
+L_crypto_kem_keypair_derand_jazz$170:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$169:
+	cmpq	$64, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$170
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$161
+L_crypto_kem_keypair_derand_jazz$162:
+	movq	%rax, 56(%rsp)
+	leaq	192(%rsp), %rcx
+	leaq	10154(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_keypair_derand_jazz$168:
+	leaq	8(%rsp), %rsp
+	movq	56(%rsp), %rax
+	movq	$0, %rcx
+L_crypto_kem_keypair_derand_jazz$163:
+	movzbw	10154(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L_crypto_kem_keypair_derand_jazz$166
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$166
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$167:
+L_crypto_kem_keypair_derand_jazz$166:
+	cmpw	$3329, %di
+	jnb 	L_crypto_kem_keypair_derand_jazz$164
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$164
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$165:
+L_crypto_kem_keypair_derand_jazz$164:
+	cmpq	$166, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$163
+L_crypto_kem_keypair_derand_jazz$161:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$162
+	movq	$0, %rax
+	movq	$256, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$159
+L_crypto_kem_keypair_derand_jazz$160:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 5512(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$159:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$160
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L_crypto_kem_keypair_derand_jazz$157
+	movb	$0, 10152(%rsp)
+	movb	$2, 10153(%rsp)
+	jmp 	L_crypto_kem_keypair_derand_jazz$158
+L_crypto_kem_keypair_derand_jazz$157:
+	movb	$2, 10152(%rsp)
+	movb	$0, 10153(%rsp)
+L_crypto_kem_keypair_derand_jazz$158:
+	leaq	192(%rsp), %rcx
+	leaq	10120(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_keypair_derand_jazz$156:
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$154
+L_crypto_kem_keypair_derand_jazz$155:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$154:
+	cmpq	$64, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$155
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$146
+L_crypto_kem_keypair_derand_jazz$147:
+	movq	%rax, 56(%rsp)
+	leaq	192(%rsp), %rcx
+	leaq	10154(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_keypair_derand_jazz$153:
+	leaq	8(%rsp), %rsp
+	movq	56(%rsp), %rax
+	movq	$0, %rcx
+L_crypto_kem_keypair_derand_jazz$148:
+	movzbw	10154(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L_crypto_kem_keypair_derand_jazz$151
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$151
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$152:
+L_crypto_kem_keypair_derand_jazz$151:
+	cmpw	$3329, %di
+	jnb 	L_crypto_kem_keypair_derand_jazz$149
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$149
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$150:
+L_crypto_kem_keypair_derand_jazz$149:
+	cmpq	$166, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$148
+L_crypto_kem_keypair_derand_jazz$146:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$147
+	movq	$0, %rax
+	movq	$512, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$144
+L_crypto_kem_keypair_derand_jazz$145:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 5512(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$144:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$145
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L_crypto_kem_keypair_derand_jazz$142
+	movb	$1, 10152(%rsp)
+	movb	$0, 10153(%rsp)
+	jmp 	L_crypto_kem_keypair_derand_jazz$143
+L_crypto_kem_keypair_derand_jazz$142:
+	movb	$0, 10152(%rsp)
+	movb	$1, 10153(%rsp)
+L_crypto_kem_keypair_derand_jazz$143:
+	leaq	192(%rsp), %rcx
+	leaq	10120(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_keypair_derand_jazz$141:
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$139
+L_crypto_kem_keypair_derand_jazz$140:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$139:
+	cmpq	$64, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$140
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$131
+L_crypto_kem_keypair_derand_jazz$132:
+	movq	%rax, 56(%rsp)
+	leaq	192(%rsp), %rcx
+	leaq	10154(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_keypair_derand_jazz$138:
+	leaq	8(%rsp), %rsp
+	movq	56(%rsp), %rax
+	movq	$0, %rcx
+L_crypto_kem_keypair_derand_jazz$133:
+	movzbw	10154(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L_crypto_kem_keypair_derand_jazz$136
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$136
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$137:
+L_crypto_kem_keypair_derand_jazz$136:
+	cmpw	$3329, %di
+	jnb 	L_crypto_kem_keypair_derand_jazz$134
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$134
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$135:
+L_crypto_kem_keypair_derand_jazz$134:
+	cmpq	$166, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$133
+L_crypto_kem_keypair_derand_jazz$131:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$132
+	movq	$0, %rax
+	movq	$768, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$129
+L_crypto_kem_keypair_derand_jazz$130:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 5512(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$129:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$130
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L_crypto_kem_keypair_derand_jazz$127
+	movb	$1, 10152(%rsp)
+	movb	$1, 10153(%rsp)
+	jmp 	L_crypto_kem_keypair_derand_jazz$128
+L_crypto_kem_keypair_derand_jazz$127:
+	movb	$1, 10152(%rsp)
+	movb	$1, 10153(%rsp)
+L_crypto_kem_keypair_derand_jazz$128:
+	leaq	192(%rsp), %rcx
+	leaq	10120(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_keypair_derand_jazz$126:
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$124
+L_crypto_kem_keypair_derand_jazz$125:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$124:
+	cmpq	$64, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$125
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$116
+L_crypto_kem_keypair_derand_jazz$117:
+	movq	%rax, 56(%rsp)
+	leaq	192(%rsp), %rcx
+	leaq	10154(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_keypair_derand_jazz$123:
+	leaq	8(%rsp), %rsp
+	movq	56(%rsp), %rax
+	movq	$0, %rcx
+L_crypto_kem_keypair_derand_jazz$118:
+	movzbw	10154(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L_crypto_kem_keypair_derand_jazz$121
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$121
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$122:
+L_crypto_kem_keypair_derand_jazz$121:
+	cmpw	$3329, %di
+	jnb 	L_crypto_kem_keypair_derand_jazz$119
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$119
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$120:
+L_crypto_kem_keypair_derand_jazz$119:
+	cmpq	$166, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$118
+L_crypto_kem_keypair_derand_jazz$116:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$117
+	movq	$0, %rax
+	movq	$1024, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$114
+L_crypto_kem_keypair_derand_jazz$115:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 5512(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$114:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$115
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L_crypto_kem_keypair_derand_jazz$112
+	movb	$1, 10152(%rsp)
+	movb	$2, 10153(%rsp)
+	jmp 	L_crypto_kem_keypair_derand_jazz$113
+L_crypto_kem_keypair_derand_jazz$112:
+	movb	$2, 10152(%rsp)
+	movb	$1, 10153(%rsp)
+L_crypto_kem_keypair_derand_jazz$113:
+	leaq	192(%rsp), %rcx
+	leaq	10120(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_keypair_derand_jazz$111:
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$109
+L_crypto_kem_keypair_derand_jazz$110:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$109:
+	cmpq	$64, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$110
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$101
+L_crypto_kem_keypair_derand_jazz$102:
+	movq	%rax, 56(%rsp)
+	leaq	192(%rsp), %rcx
+	leaq	10154(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_keypair_derand_jazz$108:
+	leaq	8(%rsp), %rsp
+	movq	56(%rsp), %rax
+	movq	$0, %rcx
+L_crypto_kem_keypair_derand_jazz$103:
+	movzbw	10154(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L_crypto_kem_keypair_derand_jazz$106
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$106
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$107:
+L_crypto_kem_keypair_derand_jazz$106:
+	cmpw	$3329, %di
+	jnb 	L_crypto_kem_keypair_derand_jazz$104
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$104
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$105:
+L_crypto_kem_keypair_derand_jazz$104:
+	cmpq	$166, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$103
+L_crypto_kem_keypair_derand_jazz$101:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$102
+	movq	$0, %rax
+	movq	$1280, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$99
+L_crypto_kem_keypair_derand_jazz$100:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 5512(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$99:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$100
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L_crypto_kem_keypair_derand_jazz$97
+	movb	$2, 10152(%rsp)
+	movb	$0, 10153(%rsp)
+	jmp 	L_crypto_kem_keypair_derand_jazz$98
+L_crypto_kem_keypair_derand_jazz$97:
+	movb	$0, 10152(%rsp)
+	movb	$2, 10153(%rsp)
+L_crypto_kem_keypair_derand_jazz$98:
+	leaq	192(%rsp), %rcx
+	leaq	10120(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_keypair_derand_jazz$96:
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$94
+L_crypto_kem_keypair_derand_jazz$95:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$94:
+	cmpq	$64, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$95
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$86
+L_crypto_kem_keypair_derand_jazz$87:
+	movq	%rax, 56(%rsp)
+	leaq	192(%rsp), %rcx
+	leaq	10154(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_keypair_derand_jazz$93:
+	leaq	8(%rsp), %rsp
+	movq	56(%rsp), %rax
+	movq	$0, %rcx
+L_crypto_kem_keypair_derand_jazz$88:
+	movzbw	10154(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L_crypto_kem_keypair_derand_jazz$91
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$91
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$92:
+L_crypto_kem_keypair_derand_jazz$91:
+	cmpw	$3329, %di
+	jnb 	L_crypto_kem_keypair_derand_jazz$89
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$89
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$90:
+L_crypto_kem_keypair_derand_jazz$89:
+	cmpq	$166, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$88
+L_crypto_kem_keypair_derand_jazz$86:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$87
+	movq	$0, %rax
+	movq	$1536, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$84
+L_crypto_kem_keypair_derand_jazz$85:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 5512(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$84:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$85
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L_crypto_kem_keypair_derand_jazz$82
+	movb	$2, 10152(%rsp)
+	movb	$1, 10153(%rsp)
+	jmp 	L_crypto_kem_keypair_derand_jazz$83
+L_crypto_kem_keypair_derand_jazz$82:
+	movb	$1, 10152(%rsp)
+	movb	$2, 10153(%rsp)
+L_crypto_kem_keypair_derand_jazz$83:
+	leaq	192(%rsp), %rcx
+	leaq	10120(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_keypair_derand_jazz$81:
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$79
+L_crypto_kem_keypair_derand_jazz$80:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$79:
+	cmpq	$64, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$80
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$71
+L_crypto_kem_keypair_derand_jazz$72:
+	movq	%rax, 56(%rsp)
+	leaq	192(%rsp), %rcx
+	leaq	10154(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_keypair_derand_jazz$78:
+	leaq	8(%rsp), %rsp
+	movq	56(%rsp), %rax
+	movq	$0, %rcx
+L_crypto_kem_keypair_derand_jazz$73:
+	movzbw	10154(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L_crypto_kem_keypair_derand_jazz$76
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$76
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$77:
+L_crypto_kem_keypair_derand_jazz$76:
+	cmpw	$3329, %di
+	jnb 	L_crypto_kem_keypair_derand_jazz$74
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$74
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$75:
+L_crypto_kem_keypair_derand_jazz$74:
+	cmpq	$166, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$73
+L_crypto_kem_keypair_derand_jazz$71:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$72
+	movq	$0, %rax
+	movq	$1792, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$69
+L_crypto_kem_keypair_derand_jazz$70:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 5512(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$69:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$70
+	movq	48(%rsp), %rax
+	cmpq	$0, %rax
+	je  	L_crypto_kem_keypair_derand_jazz$67
+	movb	$2, 10152(%rsp)
+	movb	$2, 10153(%rsp)
+	jmp 	L_crypto_kem_keypair_derand_jazz$68
+L_crypto_kem_keypair_derand_jazz$67:
+	movb	$2, 10152(%rsp)
+	movb	$2, 10153(%rsp)
+L_crypto_kem_keypair_derand_jazz$68:
+	leaq	192(%rsp), %rcx
+	leaq	10120(%rsp), %rdx
+	call	L_shake128_absorb34$1
+L_crypto_kem_keypair_derand_jazz$66:
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$64
+L_crypto_kem_keypair_derand_jazz$65:
+	movq	%rax, 392(%rsp,%rax,8)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$64:
+	cmpq	$64, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$65
+	movq	$0, %rax
+	jmp 	L_crypto_kem_keypair_derand_jazz$56
+L_crypto_kem_keypair_derand_jazz$57:
+	movq	%rax, 48(%rsp)
+	leaq	192(%rsp), %rcx
+	leaq	10154(%rsp), %rdx
+	leaq	-8(%rsp), %rsp
+	call	L_shake128_squeezeblock$1
+L_crypto_kem_keypair_derand_jazz$63:
+	leaq	8(%rsp), %rsp
+	movq	48(%rsp), %rax
+	movq	$0, %rcx
+L_crypto_kem_keypair_derand_jazz$58:
+	movzbw	10154(%rsp,%rcx), %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	movw	%si, %di
+	shrw	$4, %di
+	andw	$15, %si
+	shlw	$8, %si
+	orw 	%si, %dx
+	incq	%rcx
+	movzbw	10154(%rsp,%rcx), %si
+	shlw	$4, %si
+	orw 	%si, %di
+	incq	%rcx
+	cmpw	$3329, %dx
+	jnb 	L_crypto_kem_keypair_derand_jazz$61
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$61
+	movw	%dx, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$62:
+L_crypto_kem_keypair_derand_jazz$61:
+	cmpw	$3329, %di
+	jnb 	L_crypto_kem_keypair_derand_jazz$59
+	cmpq	$256, %rax
+	jnb 	L_crypto_kem_keypair_derand_jazz$59
+	movw	%di, 392(%rsp,%rax,2)
+	incq	%rax
+L_crypto_kem_keypair_derand_jazz$60:
+L_crypto_kem_keypair_derand_jazz$59:
+	cmpq	$166, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$58
+L_crypto_kem_keypair_derand_jazz$56:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$57
+	movq	$0, %rax
+	movq	$2048, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$54
+L_crypto_kem_keypair_derand_jazz$55:
+	movw	392(%rsp,%rax,2), %dx
+	movw	%dx, 5512(%rsp,%rcx,2)
+	incq	%rax
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$54:
+	cmpq	$256, %rax
+	jb  	L_crypto_kem_keypair_derand_jazz$55
+	movb	$0, %cl
+	leaq	904(%rsp), %rdx
+	leaq	64(%rsp), %rax
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_keypair_derand_jazz$53:
+	leaq	176(%rsp), %rsp
+	movb	$1, %cl
+	leaq	1416(%rsp), %rdx
+	leaq	64(%rsp), %rax
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_keypair_derand_jazz$52:
+	leaq	176(%rsp), %rsp
+	movb	$2, %cl
+	leaq	1928(%rsp), %rdx
+	leaq	64(%rsp), %rax
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_keypair_derand_jazz$51:
+	leaq	176(%rsp), %rsp
+	movb	$3, %cl
+	leaq	2440(%rsp), %rdx
+	leaq	64(%rsp), %rax
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_keypair_derand_jazz$50:
+	leaq	176(%rsp), %rsp
+	movb	$4, %cl
+	leaq	2952(%rsp), %rdx
+	leaq	64(%rsp), %rax
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_keypair_derand_jazz$49:
+	leaq	176(%rsp), %rsp
+	movb	$5, %cl
+	leaq	3464(%rsp), %rdx
+	leaq	64(%rsp), %rax
+	leaq	-176(%rsp), %rsp
+	call	L_poly_getnoise$1
+L_crypto_kem_keypair_derand_jazz$48:
+	leaq	176(%rsp), %rsp
+	leaq	904(%rsp), %rcx
+	call	L_poly_ntt$1
+L_crypto_kem_keypair_derand_jazz$47:
+	leaq	1416(%rsp), %rcx
+	call	L_poly_ntt$1
+L_crypto_kem_keypair_derand_jazz$46:
+	leaq	1928(%rsp), %rcx
+	call	L_poly_ntt$1
+L_crypto_kem_keypair_derand_jazz$45:
+	leaq	2440(%rsp), %rcx
+	call	L_poly_ntt$1
+L_crypto_kem_keypair_derand_jazz$44:
+	leaq	2952(%rsp), %rcx
+	call	L_poly_ntt$1
+L_crypto_kem_keypair_derand_jazz$43:
+	leaq	3464(%rsp), %rcx
+	call	L_poly_ntt$1
+L_crypto_kem_keypair_derand_jazz$42:
+	leaq	3976(%rsp), %rdi
+	leaq	5512(%rsp), %rcx
+	leaq	904(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_keypair_derand_jazz$41:
+	leaq	16(%rsp), %rsp
+	leaq	392(%rsp), %rdi
+	leaq	6024(%rsp), %rcx
+	leaq	1416(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_keypair_derand_jazz$40:
+	leaq	16(%rsp), %rsp
+	leaq	3976(%rsp), %rcx
+	leaq	392(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_keypair_derand_jazz$39:
+	leaq	392(%rsp), %rdi
+	leaq	6536(%rsp), %rcx
+	leaq	1928(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_keypair_derand_jazz$38:
+	leaq	16(%rsp), %rsp
+	leaq	3976(%rsp), %rcx
+	leaq	392(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_keypair_derand_jazz$37:
+	leaq	3976(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$35
+L_crypto_kem_keypair_derand_jazz$36:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$35:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$36
+	leaq	3976(%rsp), %rax
+	call	L_poly_frommont$1
+L_crypto_kem_keypair_derand_jazz$34:
+	leaq	4488(%rsp), %rdi
+	leaq	7048(%rsp), %rcx
+	leaq	904(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_keypair_derand_jazz$33:
+	leaq	16(%rsp), %rsp
+	leaq	392(%rsp), %rdi
+	leaq	7560(%rsp), %rcx
+	leaq	1416(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_keypair_derand_jazz$32:
+	leaq	16(%rsp), %rsp
+	leaq	4488(%rsp), %rcx
+	leaq	392(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_keypair_derand_jazz$31:
+	leaq	392(%rsp), %rdi
+	leaq	8072(%rsp), %rcx
+	leaq	1928(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_keypair_derand_jazz$30:
+	leaq	16(%rsp), %rsp
+	leaq	4488(%rsp), %rcx
+	leaq	392(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_keypair_derand_jazz$29:
+	leaq	4488(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$27
+L_crypto_kem_keypair_derand_jazz$28:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$27:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$28
+	leaq	4488(%rsp), %rax
+	call	L_poly_frommont$1
+L_crypto_kem_keypair_derand_jazz$26:
+	leaq	5000(%rsp), %rdi
+	leaq	8584(%rsp), %rcx
+	leaq	904(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_keypair_derand_jazz$25:
+	leaq	16(%rsp), %rsp
+	leaq	392(%rsp), %rdi
+	leaq	9096(%rsp), %rcx
+	leaq	1416(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_keypair_derand_jazz$24:
+	leaq	16(%rsp), %rsp
+	leaq	5000(%rsp), %rcx
+	leaq	392(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_keypair_derand_jazz$23:
+	leaq	392(%rsp), %rdi
+	leaq	9608(%rsp), %rcx
+	leaq	1928(%rsp), %rsi
+	leaq	-16(%rsp), %rsp
+	call	L_poly_basemul$1
+L_crypto_kem_keypair_derand_jazz$22:
+	leaq	16(%rsp), %rsp
+	leaq	5000(%rsp), %rcx
+	leaq	392(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_keypair_derand_jazz$21:
+	leaq	5000(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$19
+L_crypto_kem_keypair_derand_jazz$20:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$19:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$20
+	leaq	5000(%rsp), %rax
+	call	L_poly_frommont$1
+L_crypto_kem_keypair_derand_jazz$18:
+	leaq	3976(%rsp), %rcx
+	leaq	2440(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_keypair_derand_jazz$17:
+	leaq	4488(%rsp), %rcx
+	leaq	2952(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_keypair_derand_jazz$16:
+	leaq	5000(%rsp), %rcx
+	leaq	3464(%rsp), %rsi
+	call	L_poly_add2$1
+L_crypto_kem_keypair_derand_jazz$15:
+	leaq	3976(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$13
+L_crypto_kem_keypair_derand_jazz$14:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$13:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$14
+	leaq	4488(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$11
+L_crypto_kem_keypair_derand_jazz$12:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$11:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$12
+	leaq	5000(%rsp), %rax
+	movq	$0, %rcx
+	jmp 	L_crypto_kem_keypair_derand_jazz$9
+L_crypto_kem_keypair_derand_jazz$10:
+	movw	(%rax,%rcx,2), %dx
+	movswl	%dx, %esi
+	imull	$20159, %esi, %esi
+	sarl	$26, %esi
+	imull	$3329, %esi, %esi
+	subw	%si, %dx
+	movw	%dx, (%rax,%rcx,2)
+	incq	%rcx
+L_crypto_kem_keypair_derand_jazz$9:
+	cmpq	$256, %rcx
+	jb  	L_crypto_kem_keypair_derand_jazz$10
+	movq	32(%rsp), %rax
+	movq	40(%rsp), %rcx
+	movq	%rcx, %rdx
+	leaq	904(%rsp), %rcx
+	call	L_poly_tobytes$1
+L_crypto_kem_keypair_derand_jazz$8:
+	addq	$384, %rdx
+	leaq	1416(%rsp), %rcx
+	call	L_poly_tobytes$1
+L_crypto_kem_keypair_derand_jazz$7:
+	addq	$384, %rdx
+	leaq	1928(%rsp), %rcx
+	call	L_poly_tobytes$1
+L_crypto_kem_keypair_derand_jazz$6:
+	movq	%rax, %rdx
+	leaq	3976(%rsp), %rcx
+	call	L_poly_tobytes$1
+L_crypto_kem_keypair_derand_jazz$5:
+	addq	$384, %rdx
+	leaq	4488(%rsp), %rcx
+	call	L_poly_tobytes$1
+L_crypto_kem_keypair_derand_jazz$4:
+	addq	$384, %rdx
+	leaq	5000(%rsp), %rcx
+	call	L_poly_tobytes$1
+L_crypto_kem_keypair_derand_jazz$3:
+	addq	$1152, %rax
+	movq	96(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	104(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	112(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	120(%rsp), %rcx
+	movq	%rcx, (%rax)
+	movq	24(%rsp), %rax
+	addq	$1152, %rax
+	movq	16(%rsp), %rcx
+	movq	(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	8(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	16(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	24(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	32(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	40(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	48(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	56(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	64(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	72(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	80(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	88(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	96(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	104(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	112(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	120(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	128(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	136(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	144(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	152(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	160(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	168(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	176(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	184(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	192(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	200(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	208(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	216(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	224(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	232(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	240(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	248(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	256(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	264(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	272(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	280(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	288(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	296(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	304(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	312(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	320(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	328(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	336(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	344(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	352(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	360(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	368(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	376(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	384(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	392(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	400(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	408(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	416(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	424(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	432(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	440(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	448(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	456(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	464(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	472(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	480(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	488(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	496(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	504(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	512(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	520(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	528(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	536(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	544(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	552(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	560(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	568(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	576(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	584(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	592(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	600(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	608(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	616(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	624(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	632(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	640(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	648(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	656(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	664(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	672(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	680(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	688(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	696(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	704(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	712(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	720(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	728(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	736(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	744(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	752(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	760(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	768(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	776(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	784(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	792(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	800(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	808(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	816(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	824(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	832(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	840(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	848(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	856(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	864(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	872(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	880(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	888(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	896(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	904(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	912(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	920(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	928(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	936(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	944(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	952(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	960(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	968(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	976(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	984(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	992(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1000(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1008(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1016(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1024(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1032(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1040(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1048(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1056(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1064(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1072(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1080(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1088(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1096(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1104(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1112(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1120(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1128(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1136(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1144(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1152(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1160(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1168(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	1176(%rcx), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	%rax, 24(%rsp)
+	movq	16(%rsp), %rsi
+	movq	$1184, %rax
+	leaq	96(%rsp), %rcx
+	leaq	-232(%rsp), %rsp
+	call	L_sha3_256$1
+L_crypto_kem_keypair_derand_jazz$2:
+	leaq	232(%rsp), %rsp
+	movq	24(%rsp), %rax
+	movq	96(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	104(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	112(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	120(%rsp), %rcx
+	movq	%rcx, (%rax)
+	addq	$8, %rax
+	movq	8(%rsp), %rcx
+	leaq	32(%rcx), %rcx
+	movq	(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	8(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	16(%rcx), %rdx
+	movq	%rdx, (%rax)
+	addq	$8, %rax
+	movq	24(%rcx), %rcx
+	movq	%rcx, (%rax)
+	ret
+L_i_poly_tomsg$1:
+	call	L_poly_csubq$1
+L_i_poly_tomsg$2:
+	movb	$0, %sil
+	movw	(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	2(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	4(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	6(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	8(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	10(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	12(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	14(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, (%rax)
+	movb	$0, %sil
+	movw	16(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	18(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	20(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	22(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	24(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	26(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	28(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	30(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 1(%rax)
+	movb	$0, %sil
+	movw	32(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	34(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	36(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	38(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	40(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	42(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	44(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	46(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 2(%rax)
+	movb	$0, %sil
+	movw	48(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	50(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	52(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	54(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	56(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	58(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	60(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	62(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 3(%rax)
+	movb	$0, %sil
+	movw	64(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	66(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	68(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	70(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	72(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	74(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	76(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	78(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 4(%rax)
+	movb	$0, %sil
+	movw	80(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	82(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	84(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	86(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	88(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	90(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	92(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	94(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 5(%rax)
+	movb	$0, %sil
+	movw	96(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	98(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	100(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	102(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	104(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	106(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	108(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	110(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 6(%rax)
+	movb	$0, %sil
+	movw	112(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	114(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	116(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	118(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	120(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	122(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	124(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	126(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 7(%rax)
+	movb	$0, %sil
+	movw	128(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	130(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	132(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	134(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	136(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	138(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	140(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	142(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 8(%rax)
+	movb	$0, %sil
+	movw	144(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	146(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	148(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	150(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	152(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	154(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	156(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	158(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 9(%rax)
+	movb	$0, %sil
+	movw	160(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	162(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	164(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	166(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	168(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	170(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	172(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	174(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 10(%rax)
+	movb	$0, %sil
+	movw	176(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	178(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	180(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	182(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	184(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	186(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	188(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	190(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 11(%rax)
+	movb	$0, %sil
+	movw	192(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	194(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	196(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	198(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	200(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	202(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	204(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	206(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 12(%rax)
+	movb	$0, %sil
+	movw	208(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	210(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	212(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	214(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	216(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	218(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	220(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	222(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 13(%rax)
+	movb	$0, %sil
+	movw	224(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	226(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	228(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	230(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	232(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	234(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	236(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	238(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 14(%rax)
+	movb	$0, %sil
+	movw	240(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	242(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	244(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	246(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	248(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	250(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	252(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	254(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 15(%rax)
+	movb	$0, %sil
+	movw	256(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	258(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	260(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	262(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	264(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	266(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	268(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	270(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 16(%rax)
+	movb	$0, %sil
+	movw	272(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	274(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	276(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	278(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	280(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	282(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	284(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	286(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 17(%rax)
+	movb	$0, %sil
+	movw	288(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	290(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	292(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	294(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	296(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	298(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	300(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	302(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 18(%rax)
+	movb	$0, %sil
+	movw	304(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	306(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	308(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	310(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	312(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	314(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	316(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	318(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 19(%rax)
+	movb	$0, %sil
+	movw	320(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	322(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	324(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	326(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	328(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	330(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	332(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	334(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 20(%rax)
+	movb	$0, %sil
+	movw	336(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	338(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	340(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	342(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	344(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	346(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	348(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	350(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 21(%rax)
+	movb	$0, %sil
+	movw	352(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	354(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	356(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	358(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	360(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	362(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	364(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	366(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 22(%rax)
+	movb	$0, %sil
+	movw	368(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	370(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	372(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	374(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	376(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	378(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	380(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	382(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 23(%rax)
+	movb	$0, %sil
+	movw	384(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	386(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	388(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	390(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	392(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	394(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	396(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	398(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 24(%rax)
+	movb	$0, %sil
+	movw	400(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	402(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	404(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	406(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	408(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	410(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	412(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	414(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 25(%rax)
+	movb	$0, %sil
+	movw	416(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	418(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	420(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	422(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	424(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	426(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	428(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	430(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 26(%rax)
+	movb	$0, %sil
+	movw	432(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	434(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	436(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	438(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	440(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	442(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	444(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	446(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 27(%rax)
+	movb	$0, %sil
+	movw	448(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	450(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	452(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	454(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	456(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	458(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	460(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	462(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 28(%rax)
+	movb	$0, %sil
+	movw	464(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	466(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	468(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	470(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	472(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	474(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	476(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	478(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 29(%rax)
+	movb	$0, %sil
+	movw	480(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	482(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	484(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	486(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	488(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	490(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	492(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	494(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$7, %edi
+	orb 	%dil, %sil
+	movb	%sil, 30(%rax)
+	movb	$0, %sil
+	movw	496(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$0, %edi
+	orb 	%dil, %sil
+	movw	498(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$1, %edi
+	orb 	%dil, %sil
+	movw	500(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$2, %edi
+	orb 	%dil, %sil
+	movw	502(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$3, %edi
+	orb 	%dil, %sil
+	movw	504(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$4, %edi
+	orb 	%dil, %sil
+	movw	506(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$5, %edi
+	orb 	%dil, %sil
+	movw	508(%rcx), %di
+	movzwl	%di, %edi
+	shll	$1, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$1, %edi
+	shll	$6, %edi
+	orb 	%dil, %sil
+	movw	510(%rcx), %cx
+	movzwl	%cx, %ecx
+	shll	$1, %ecx
+	addl	$1665, %ecx
+	imull	$80635, %ecx, %ecx
+	shrl	$28, %ecx
+	andl	$1, %ecx
+	shll	$7, %ecx
+	orb 	%cl, %sil
+	movb	%sil, 31(%rax)
+	ret
+L_poly_tobytes$1:
+	call	L_poly_csubq$1
+L_poly_tobytes$4:
+	movq	$0, %rsi
+	movq	$0, %rdi
+	jmp 	L_poly_tobytes$2
+L_poly_tobytes$3:
+	movw	(%rcx,%rsi,2), %r8w
+	incq	%rsi
+	movw	(%rcx,%rsi,2), %r9w
+	incq	%rsi
+	movw	%r8w, %r10w
+	andw	$255, %r10w
+	movb	%r10b, (%rdx,%rdi)
+	incq	%rdi
+	shrw	$8, %r8w
+	movw	%r9w, %r10w
+	andw	$15, %r10w
+	shlw	$4, %r10w
+	orw 	%r8w, %r10w
+	movb	%r10b, (%rdx,%rdi)
+	incq	%rdi
+	shrw	$4, %r9w
+	movb	%r9b, (%rdx,%rdi)
+	incq	%rdi
+L_poly_tobytes$2:
+	cmpq	$256, %rsi
+	jb  	L_poly_tobytes$3
+	ret
+L_poly_sub$1:
+	movq	$0, %r8
+	jmp 	L_poly_sub$2
+L_poly_sub$3:
+	movw	(%rsi,%r8,2), %r9w
+	movw	(%rdi,%r8,2), %r10w
+	subw	%r10w, %r9w
+	movw	%r9w, (%rcx,%r8,2)
+	incq	%r8
+L_poly_sub$2:
+	cmpq	$256, %r8
+	jb  	L_poly_sub$3
+	ret
+L_poly_ntt$1:
+	leaq	glob_data + 448(%rip), %rsi
+	movq	$0, %rdi
+	movq	$128, %r8
+	jmp 	L_poly_ntt$4
+L_poly_ntt$5:
+	movq	$0, %r11
+	jmp 	L_poly_ntt$6
+L_poly_ntt$7:
+	incq	%rdi
+	movw	(%rsi,%rdi,2), %r9w
+	movq	%r11, %r10
+	leaq	(%r11,%r8), %r11
+	jmp 	L_poly_ntt$8
+L_poly_ntt$9:
+	leaq	(%r10,%r8), %rbx
+	movw	(%rcx,%rbx,2), %bp
+	movswl	%bp, %ebp
+	movswl	%r9w, %r12d
+	imull	%r12d, %ebp
+	imull	$62209, %ebp, %r12d
+	shll	$16, %r12d
+	sarl	$16, %r12d
+	imull	$3329, %r12d, %r12d
+	subl	%r12d, %ebp
+	sarl	$16, %ebp
+	movw	(%rcx,%r10,2), %r12w
+	movw	%r12w, %r13w
+	subw	%bp, %r13w
+	movw	%r13w, (%rcx,%rbx,2)
+	addw	%r12w, %bp
+	movw	%bp, (%rcx,%r10,2)
+	incq	%r10
+L_poly_ntt$8:
+	cmpq	%r11, %r10
+	jb  	L_poly_ntt$9
+	leaq	(%r10,%r8), %r11
+L_poly_ntt$6:
+	cmpq	$256, %r11
+	jb  	L_poly_ntt$7
+	shrq	$1, %r8
+L_poly_ntt$4:
+	cmpq	$2, %r8
+	jnb 	L_poly_ntt$5
+	movq	$0, %rsi
+	jmp 	L_poly_ntt$2
+L_poly_ntt$3:
+	movw	(%rcx,%rsi,2), %di
+	movswl	%di, %r8d
+	imull	$20159, %r8d, %r8d
+	sarl	$26, %r8d
+	imull	$3329, %r8d, %r8d
+	subw	%r8w, %di
+	movw	%di, (%rcx,%rsi,2)
+	incq	%rsi
+L_poly_ntt$2:
+	cmpq	$256, %rsi
+	jb  	L_poly_ntt$3
+	ret
+L_poly_invntt$1:
+	leaq	glob_data + 192(%rip), %rsi
+	movq	$0, %rdi
+	movq	$2, %r8
+	jmp 	L_poly_invntt$4
+L_poly_invntt$5:
+	movq	$0, %r11
+	jmp 	L_poly_invntt$6
+L_poly_invntt$7:
+	movw	(%rsi,%rdi,2), %r9w
+	incq	%rdi
+	movq	%r11, %r10
+	leaq	(%r11,%r8), %r11
+	jmp 	L_poly_invntt$8
+L_poly_invntt$9:
+	leaq	(%r10,%r8), %rbx
+	movw	(%rcx,%rbx,2), %bp
+	movw	(%rcx,%r10,2), %r12w
+	movw	%bp, %r13w
+	addw	%r12w, %r13w
+	movswl	%r13w, %r14d
+	imull	$20159, %r14d, %r14d
+	sarl	$26, %r14d
+	imull	$3329, %r14d, %r14d
+	subw	%r14w, %r13w
+	movw	%r13w, (%rcx,%r10,2)
+	subw	%bp, %r12w
+	movswl	%r12w, %ebp
+	movswl	%r9w, %r12d
+	imull	%r12d, %ebp
+	imull	$62209, %ebp, %r12d
+	shll	$16, %r12d
+	sarl	$16, %r12d
+	imull	$3329, %r12d, %r12d
+	subl	%r12d, %ebp
+	sarl	$16, %ebp
+	movw	%bp, (%rcx,%rbx,2)
+	incq	%r10
+L_poly_invntt$8:
+	cmpq	%r11, %r10
+	jb  	L_poly_invntt$9
+	leaq	(%r10,%r8), %r11
+L_poly_invntt$6:
+	cmpq	$256, %r11
+	jb  	L_poly_invntt$7
+	shlq	$1, %r8
+L_poly_invntt$4:
+	cmpq	$128, %r8
+	jbe 	L_poly_invntt$5
+	movw	254(%rsi), %si
+	movq	$0, %rdi
+	jmp 	L_poly_invntt$2
+L_poly_invntt$3:
+	movw	(%rcx,%rdi,2), %r8w
+	movswl	%r8w, %r8d
+	movswl	%si, %r9d
+	imull	%r9d, %r8d
+	imull	$62209, %r8d, %r9d
+	shll	$16, %r9d
+	sarl	$16, %r9d
+	imull	$3329, %r9d, %r9d
+	subl	%r9d, %r8d
+	sarl	$16, %r8d
+	movw	%r8w, (%rcx,%rdi,2)
+	incq	%rdi
+L_poly_invntt$2:
+	cmpq	$256, %rdi
+	jb  	L_poly_invntt$3
+	ret
+L_poly_getnoise$1:
+	movq	%rdx, 8(%rsp)
+	movb	(%rax), %dl
+	movb	%dl, 16(%rsp)
+	movb	1(%rax), %dl
+	movb	%dl, 17(%rsp)
+	movb	2(%rax), %dl
+	movb	%dl, 18(%rsp)
+	movb	3(%rax), %dl
+	movb	%dl, 19(%rsp)
+	movb	4(%rax), %dl
+	movb	%dl, 20(%rsp)
+	movb	5(%rax), %dl
+	movb	%dl, 21(%rsp)
+	movb	6(%rax), %dl
+	movb	%dl, 22(%rsp)
+	movb	7(%rax), %dl
+	movb	%dl, 23(%rsp)
+	movb	8(%rax), %dl
+	movb	%dl, 24(%rsp)
+	movb	9(%rax), %dl
+	movb	%dl, 25(%rsp)
+	movb	10(%rax), %dl
+	movb	%dl, 26(%rsp)
+	movb	11(%rax), %dl
+	movb	%dl, 27(%rsp)
+	movb	12(%rax), %dl
+	movb	%dl, 28(%rsp)
+	movb	13(%rax), %dl
+	movb	%dl, 29(%rsp)
+	movb	14(%rax), %dl
+	movb	%dl, 30(%rsp)
+	movb	15(%rax), %dl
+	movb	%dl, 31(%rsp)
+	movb	16(%rax), %dl
+	movb	%dl, 32(%rsp)
+	movb	17(%rax), %dl
+	movb	%dl, 33(%rsp)
+	movb	18(%rax), %dl
+	movb	%dl, 34(%rsp)
+	movb	19(%rax), %dl
+	movb	%dl, 35(%rsp)
+	movb	20(%rax), %dl
+	movb	%dl, 36(%rsp)
+	movb	21(%rax), %dl
+	movb	%dl, 37(%rsp)
+	movb	22(%rax), %dl
+	movb	%dl, 38(%rsp)
+	movb	23(%rax), %dl
+	movb	%dl, 39(%rsp)
+	movb	24(%rax), %dl
+	movb	%dl, 40(%rsp)
+	movb	25(%rax), %dl
+	movb	%dl, 41(%rsp)
+	movb	26(%rax), %dl
+	movb	%dl, 42(%rsp)
+	movb	27(%rax), %dl
+	movb	%dl, 43(%rsp)
+	movb	28(%rax), %dl
+	movb	%dl, 44(%rsp)
+	movb	29(%rax), %dl
+	movb	%dl, 45(%rsp)
+	movb	30(%rax), %dl
+	movb	%dl, 46(%rsp)
+	movb	31(%rax), %dl
+	movb	%dl, 47(%rsp)
+	movb	%cl, 48(%rsp)
+	leaq	49(%rsp), %rcx
+	leaq	16(%rsp), %rdx
+	leaq	-208(%rsp), %rsp
+	call	L_shake256_128_33$1
+L_poly_getnoise$4:
+	leaq	208(%rsp), %rsp
+	movq	8(%rsp), %rcx
+	movq	$0, %rdx
+	movq	$0, %rsi
+	jmp 	L_poly_getnoise$2
+L_poly_getnoise$3:
+	movb	49(%rsp,%rdx), %dil
+	movb	%dil, %r8b
+	andb	$85, %r8b
+	shrb	$1, %dil
+	andb	$85, %dil
+	addb	%r8b, %dil
+	movb	%dil, %r8b
+	andb	$3, %r8b
+	movb	%dil, %r9b
+	shrb	$2, %r9b
+	andb	$3, %r9b
+	subb	%r9b, %r8b
+	movsbw	%r8b, %r8w
+	movw	%r8w, (%rcx,%rsi,2)
+	movb	%dil, %r8b
+	shrb	$4, %r8b
+	andb	$3, %r8b
+	shrb	$6, %dil
+	andb	$3, %dil
+	subb	%dil, %r8b
+	movsbw	%r8b, %di
+	incq	%rsi
+	movw	%di, (%rcx,%rsi,2)
+	incq	%rdx
+	incq	%rsi
+L_poly_getnoise$2:
+	cmpq	$128, %rdx
+	jb  	L_poly_getnoise$3
+	ret
+L_i_poly_frommsg$1:
+	movb	(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, (%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 2(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 4(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 6(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 8(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 10(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 12(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 14(%rdx)
+	movb	1(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 16(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 18(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 20(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 22(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 24(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 26(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 28(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 30(%rdx)
+	movb	2(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 32(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 34(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 36(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 38(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 40(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 42(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 44(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 46(%rdx)
+	movb	3(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 48(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 50(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 52(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 54(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 56(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 58(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 60(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 62(%rdx)
+	movb	4(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 64(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 66(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 68(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 70(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 72(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 74(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 76(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 78(%rdx)
+	movb	5(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 80(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 82(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 84(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 86(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 88(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 90(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 92(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 94(%rdx)
+	movb	6(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 96(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 98(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 100(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 102(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 104(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 106(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 108(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 110(%rdx)
+	movb	7(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 112(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 114(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 116(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 118(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 120(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 122(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 124(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 126(%rdx)
+	movb	8(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 128(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 130(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 132(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 134(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 136(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 138(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 140(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 142(%rdx)
+	movb	9(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 144(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 146(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 148(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 150(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 152(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 154(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 156(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 158(%rdx)
+	movb	10(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 160(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 162(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 164(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 166(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 168(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 170(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 172(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 174(%rdx)
+	movb	11(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 176(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 178(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 180(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 182(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 184(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 186(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 188(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 190(%rdx)
+	movb	12(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 192(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 194(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 196(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 198(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 200(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 202(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 204(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 206(%rdx)
+	movb	13(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 208(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 210(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 212(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 214(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 216(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 218(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 220(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 222(%rdx)
+	movb	14(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 224(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 226(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 228(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 230(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 232(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 234(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 236(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 238(%rdx)
+	movb	15(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 240(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 242(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 244(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 246(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 248(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 250(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 252(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 254(%rdx)
+	movb	16(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 256(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 258(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 260(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 262(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 264(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 266(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 268(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 270(%rdx)
+	movb	17(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 272(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 274(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 276(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 278(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 280(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 282(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 284(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 286(%rdx)
+	movb	18(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 288(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 290(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 292(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 294(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 296(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 298(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 300(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 302(%rdx)
+	movb	19(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 304(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 306(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 308(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 310(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 312(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 314(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 316(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 318(%rdx)
+	movb	20(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 320(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 322(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 324(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 326(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 328(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 330(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 332(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 334(%rdx)
+	movb	21(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 336(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 338(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 340(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 342(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 344(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 346(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 348(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 350(%rdx)
+	movb	22(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 352(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 354(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 356(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 358(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 360(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 362(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 364(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 366(%rdx)
+	movb	23(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 368(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 370(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 372(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 374(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 376(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 378(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 380(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 382(%rdx)
+	movb	24(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 384(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 386(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 388(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 390(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 392(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 394(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 396(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 398(%rdx)
+	movb	25(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 400(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 402(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 404(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 406(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 408(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 410(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 412(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 414(%rdx)
+	movb	26(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 416(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 418(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 420(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 422(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 424(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 426(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 428(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 430(%rdx)
+	movb	27(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 432(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 434(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 436(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 438(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 440(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 442(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 444(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 446(%rdx)
+	movb	28(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 448(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 450(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 452(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 454(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 456(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 458(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 460(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 462(%rdx)
+	movb	29(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 464(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 466(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 468(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 470(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 472(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 474(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 476(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 478(%rdx)
+	movb	30(%rcx), %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 480(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 482(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 484(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 486(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 488(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 490(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %di
+	andw	$1, %di
+	imulw	$1665, %di, %di
+	movw	%di, 492(%rdx)
+	shrb	$1, %sil
+	movzbw	%sil, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 494(%rdx)
+	movb	31(%rcx), %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 496(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 498(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 500(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 502(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 504(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 506(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %si
+	andw	$1, %si
+	imulw	$1665, %si, %si
+	movw	%si, 508(%rdx)
+	shrb	$1, %cl
+	movzbw	%cl, %cx
+	andw	$1, %cx
+	imulw	$1665, %cx, %cx
+	movw	%cx, 510(%rdx)
+	ret
+L_poly_frommont$1:
+	movw	$1353, %cx
+	movq	$0, %rdx
+	jmp 	L_poly_frommont$2
+L_poly_frommont$3:
+	movw	(%rax,%rdx,2), %si
+	movswl	%si, %esi
+	movswl	%cx, %edi
+	imull	%edi, %esi
+	imull	$62209, %esi, %edi
+	shll	$16, %edi
+	sarl	$16, %edi
+	imull	$3329, %edi, %edi
+	subl	%edi, %esi
+	sarl	$16, %esi
+	movw	%si, (%rax,%rdx,2)
+	incq	%rdx
+L_poly_frommont$2:
+	cmpq	$256, %rdx
+	jb  	L_poly_frommont$3
+	ret
+L_poly_frombytes$1:
+	movb	(%rsi), %r8b
+	movb	1(%rsi), %r9b
+	movb	2(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, (%rdi)
+	movw	%r10w, 2(%rdi)
+	movb	3(%rsi), %r8b
+	movb	4(%rsi), %r9b
+	movb	5(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 4(%rdi)
+	movw	%r10w, 6(%rdi)
+	movb	6(%rsi), %r8b
+	movb	7(%rsi), %r9b
+	movb	8(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 8(%rdi)
+	movw	%r10w, 10(%rdi)
+	movb	9(%rsi), %r8b
+	movb	10(%rsi), %r9b
+	movb	11(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 12(%rdi)
+	movw	%r10w, 14(%rdi)
+	movb	12(%rsi), %r8b
+	movb	13(%rsi), %r9b
+	movb	14(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 16(%rdi)
+	movw	%r10w, 18(%rdi)
+	movb	15(%rsi), %r8b
+	movb	16(%rsi), %r9b
+	movb	17(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 20(%rdi)
+	movw	%r10w, 22(%rdi)
+	movb	18(%rsi), %r8b
+	movb	19(%rsi), %r9b
+	movb	20(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 24(%rdi)
+	movw	%r10w, 26(%rdi)
+	movb	21(%rsi), %r8b
+	movb	22(%rsi), %r9b
+	movb	23(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 28(%rdi)
+	movw	%r10w, 30(%rdi)
+	movb	24(%rsi), %r8b
+	movb	25(%rsi), %r9b
+	movb	26(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 32(%rdi)
+	movw	%r10w, 34(%rdi)
+	movb	27(%rsi), %r8b
+	movb	28(%rsi), %r9b
+	movb	29(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 36(%rdi)
+	movw	%r10w, 38(%rdi)
+	movb	30(%rsi), %r8b
+	movb	31(%rsi), %r9b
+	movb	32(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 40(%rdi)
+	movw	%r10w, 42(%rdi)
+	movb	33(%rsi), %r8b
+	movb	34(%rsi), %r9b
+	movb	35(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 44(%rdi)
+	movw	%r10w, 46(%rdi)
+	movb	36(%rsi), %r8b
+	movb	37(%rsi), %r9b
+	movb	38(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 48(%rdi)
+	movw	%r10w, 50(%rdi)
+	movb	39(%rsi), %r8b
+	movb	40(%rsi), %r9b
+	movb	41(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 52(%rdi)
+	movw	%r10w, 54(%rdi)
+	movb	42(%rsi), %r8b
+	movb	43(%rsi), %r9b
+	movb	44(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 56(%rdi)
+	movw	%r10w, 58(%rdi)
+	movb	45(%rsi), %r8b
+	movb	46(%rsi), %r9b
+	movb	47(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 60(%rdi)
+	movw	%r10w, 62(%rdi)
+	movb	48(%rsi), %r8b
+	movb	49(%rsi), %r9b
+	movb	50(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 64(%rdi)
+	movw	%r10w, 66(%rdi)
+	movb	51(%rsi), %r8b
+	movb	52(%rsi), %r9b
+	movb	53(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 68(%rdi)
+	movw	%r10w, 70(%rdi)
+	movb	54(%rsi), %r8b
+	movb	55(%rsi), %r9b
+	movb	56(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 72(%rdi)
+	movw	%r10w, 74(%rdi)
+	movb	57(%rsi), %r8b
+	movb	58(%rsi), %r9b
+	movb	59(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 76(%rdi)
+	movw	%r10w, 78(%rdi)
+	movb	60(%rsi), %r8b
+	movb	61(%rsi), %r9b
+	movb	62(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 80(%rdi)
+	movw	%r10w, 82(%rdi)
+	movb	63(%rsi), %r8b
+	movb	64(%rsi), %r9b
+	movb	65(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 84(%rdi)
+	movw	%r10w, 86(%rdi)
+	movb	66(%rsi), %r8b
+	movb	67(%rsi), %r9b
+	movb	68(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 88(%rdi)
+	movw	%r10w, 90(%rdi)
+	movb	69(%rsi), %r8b
+	movb	70(%rsi), %r9b
+	movb	71(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 92(%rdi)
+	movw	%r10w, 94(%rdi)
+	movb	72(%rsi), %r8b
+	movb	73(%rsi), %r9b
+	movb	74(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 96(%rdi)
+	movw	%r10w, 98(%rdi)
+	movb	75(%rsi), %r8b
+	movb	76(%rsi), %r9b
+	movb	77(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 100(%rdi)
+	movw	%r10w, 102(%rdi)
+	movb	78(%rsi), %r8b
+	movb	79(%rsi), %r9b
+	movb	80(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 104(%rdi)
+	movw	%r10w, 106(%rdi)
+	movb	81(%rsi), %r8b
+	movb	82(%rsi), %r9b
+	movb	83(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 108(%rdi)
+	movw	%r10w, 110(%rdi)
+	movb	84(%rsi), %r8b
+	movb	85(%rsi), %r9b
+	movb	86(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 112(%rdi)
+	movw	%r10w, 114(%rdi)
+	movb	87(%rsi), %r8b
+	movb	88(%rsi), %r9b
+	movb	89(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 116(%rdi)
+	movw	%r10w, 118(%rdi)
+	movb	90(%rsi), %r8b
+	movb	91(%rsi), %r9b
+	movb	92(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 120(%rdi)
+	movw	%r10w, 122(%rdi)
+	movb	93(%rsi), %r8b
+	movb	94(%rsi), %r9b
+	movb	95(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 124(%rdi)
+	movw	%r10w, 126(%rdi)
+	movb	96(%rsi), %r8b
+	movb	97(%rsi), %r9b
+	movb	98(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 128(%rdi)
+	movw	%r10w, 130(%rdi)
+	movb	99(%rsi), %r8b
+	movb	100(%rsi), %r9b
+	movb	101(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 132(%rdi)
+	movw	%r10w, 134(%rdi)
+	movb	102(%rsi), %r8b
+	movb	103(%rsi), %r9b
+	movb	104(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 136(%rdi)
+	movw	%r10w, 138(%rdi)
+	movb	105(%rsi), %r8b
+	movb	106(%rsi), %r9b
+	movb	107(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 140(%rdi)
+	movw	%r10w, 142(%rdi)
+	movb	108(%rsi), %r8b
+	movb	109(%rsi), %r9b
+	movb	110(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 144(%rdi)
+	movw	%r10w, 146(%rdi)
+	movb	111(%rsi), %r8b
+	movb	112(%rsi), %r9b
+	movb	113(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 148(%rdi)
+	movw	%r10w, 150(%rdi)
+	movb	114(%rsi), %r8b
+	movb	115(%rsi), %r9b
+	movb	116(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 152(%rdi)
+	movw	%r10w, 154(%rdi)
+	movb	117(%rsi), %r8b
+	movb	118(%rsi), %r9b
+	movb	119(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 156(%rdi)
+	movw	%r10w, 158(%rdi)
+	movb	120(%rsi), %r8b
+	movb	121(%rsi), %r9b
+	movb	122(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 160(%rdi)
+	movw	%r10w, 162(%rdi)
+	movb	123(%rsi), %r8b
+	movb	124(%rsi), %r9b
+	movb	125(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 164(%rdi)
+	movw	%r10w, 166(%rdi)
+	movb	126(%rsi), %r8b
+	movb	127(%rsi), %r9b
+	movb	128(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 168(%rdi)
+	movw	%r10w, 170(%rdi)
+	movb	129(%rsi), %r8b
+	movb	130(%rsi), %r9b
+	movb	131(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 172(%rdi)
+	movw	%r10w, 174(%rdi)
+	movb	132(%rsi), %r8b
+	movb	133(%rsi), %r9b
+	movb	134(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 176(%rdi)
+	movw	%r10w, 178(%rdi)
+	movb	135(%rsi), %r8b
+	movb	136(%rsi), %r9b
+	movb	137(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 180(%rdi)
+	movw	%r10w, 182(%rdi)
+	movb	138(%rsi), %r8b
+	movb	139(%rsi), %r9b
+	movb	140(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 184(%rdi)
+	movw	%r10w, 186(%rdi)
+	movb	141(%rsi), %r8b
+	movb	142(%rsi), %r9b
+	movb	143(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 188(%rdi)
+	movw	%r10w, 190(%rdi)
+	movb	144(%rsi), %r8b
+	movb	145(%rsi), %r9b
+	movb	146(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 192(%rdi)
+	movw	%r10w, 194(%rdi)
+	movb	147(%rsi), %r8b
+	movb	148(%rsi), %r9b
+	movb	149(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 196(%rdi)
+	movw	%r10w, 198(%rdi)
+	movb	150(%rsi), %r8b
+	movb	151(%rsi), %r9b
+	movb	152(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 200(%rdi)
+	movw	%r10w, 202(%rdi)
+	movb	153(%rsi), %r8b
+	movb	154(%rsi), %r9b
+	movb	155(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 204(%rdi)
+	movw	%r10w, 206(%rdi)
+	movb	156(%rsi), %r8b
+	movb	157(%rsi), %r9b
+	movb	158(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 208(%rdi)
+	movw	%r10w, 210(%rdi)
+	movb	159(%rsi), %r8b
+	movb	160(%rsi), %r9b
+	movb	161(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 212(%rdi)
+	movw	%r10w, 214(%rdi)
+	movb	162(%rsi), %r8b
+	movb	163(%rsi), %r9b
+	movb	164(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 216(%rdi)
+	movw	%r10w, 218(%rdi)
+	movb	165(%rsi), %r8b
+	movb	166(%rsi), %r9b
+	movb	167(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 220(%rdi)
+	movw	%r10w, 222(%rdi)
+	movb	168(%rsi), %r8b
+	movb	169(%rsi), %r9b
+	movb	170(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 224(%rdi)
+	movw	%r10w, 226(%rdi)
+	movb	171(%rsi), %r8b
+	movb	172(%rsi), %r9b
+	movb	173(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 228(%rdi)
+	movw	%r10w, 230(%rdi)
+	movb	174(%rsi), %r8b
+	movb	175(%rsi), %r9b
+	movb	176(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 232(%rdi)
+	movw	%r10w, 234(%rdi)
+	movb	177(%rsi), %r8b
+	movb	178(%rsi), %r9b
+	movb	179(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 236(%rdi)
+	movw	%r10w, 238(%rdi)
+	movb	180(%rsi), %r8b
+	movb	181(%rsi), %r9b
+	movb	182(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 240(%rdi)
+	movw	%r10w, 242(%rdi)
+	movb	183(%rsi), %r8b
+	movb	184(%rsi), %r9b
+	movb	185(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 244(%rdi)
+	movw	%r10w, 246(%rdi)
+	movb	186(%rsi), %r8b
+	movb	187(%rsi), %r9b
+	movb	188(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 248(%rdi)
+	movw	%r10w, 250(%rdi)
+	movb	189(%rsi), %r8b
+	movb	190(%rsi), %r9b
+	movb	191(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 252(%rdi)
+	movw	%r10w, 254(%rdi)
+	movb	192(%rsi), %r8b
+	movb	193(%rsi), %r9b
+	movb	194(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 256(%rdi)
+	movw	%r10w, 258(%rdi)
+	movb	195(%rsi), %r8b
+	movb	196(%rsi), %r9b
+	movb	197(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 260(%rdi)
+	movw	%r10w, 262(%rdi)
+	movb	198(%rsi), %r8b
+	movb	199(%rsi), %r9b
+	movb	200(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 264(%rdi)
+	movw	%r10w, 266(%rdi)
+	movb	201(%rsi), %r8b
+	movb	202(%rsi), %r9b
+	movb	203(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 268(%rdi)
+	movw	%r10w, 270(%rdi)
+	movb	204(%rsi), %r8b
+	movb	205(%rsi), %r9b
+	movb	206(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 272(%rdi)
+	movw	%r10w, 274(%rdi)
+	movb	207(%rsi), %r8b
+	movb	208(%rsi), %r9b
+	movb	209(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 276(%rdi)
+	movw	%r10w, 278(%rdi)
+	movb	210(%rsi), %r8b
+	movb	211(%rsi), %r9b
+	movb	212(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 280(%rdi)
+	movw	%r10w, 282(%rdi)
+	movb	213(%rsi), %r8b
+	movb	214(%rsi), %r9b
+	movb	215(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 284(%rdi)
+	movw	%r10w, 286(%rdi)
+	movb	216(%rsi), %r8b
+	movb	217(%rsi), %r9b
+	movb	218(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 288(%rdi)
+	movw	%r10w, 290(%rdi)
+	movb	219(%rsi), %r8b
+	movb	220(%rsi), %r9b
+	movb	221(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 292(%rdi)
+	movw	%r10w, 294(%rdi)
+	movb	222(%rsi), %r8b
+	movb	223(%rsi), %r9b
+	movb	224(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 296(%rdi)
+	movw	%r10w, 298(%rdi)
+	movb	225(%rsi), %r8b
+	movb	226(%rsi), %r9b
+	movb	227(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 300(%rdi)
+	movw	%r10w, 302(%rdi)
+	movb	228(%rsi), %r8b
+	movb	229(%rsi), %r9b
+	movb	230(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 304(%rdi)
+	movw	%r10w, 306(%rdi)
+	movb	231(%rsi), %r8b
+	movb	232(%rsi), %r9b
+	movb	233(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 308(%rdi)
+	movw	%r10w, 310(%rdi)
+	movb	234(%rsi), %r8b
+	movb	235(%rsi), %r9b
+	movb	236(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 312(%rdi)
+	movw	%r10w, 314(%rdi)
+	movb	237(%rsi), %r8b
+	movb	238(%rsi), %r9b
+	movb	239(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 316(%rdi)
+	movw	%r10w, 318(%rdi)
+	movb	240(%rsi), %r8b
+	movb	241(%rsi), %r9b
+	movb	242(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 320(%rdi)
+	movw	%r10w, 322(%rdi)
+	movb	243(%rsi), %r8b
+	movb	244(%rsi), %r9b
+	movb	245(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 324(%rdi)
+	movw	%r10w, 326(%rdi)
+	movb	246(%rsi), %r8b
+	movb	247(%rsi), %r9b
+	movb	248(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 328(%rdi)
+	movw	%r10w, 330(%rdi)
+	movb	249(%rsi), %r8b
+	movb	250(%rsi), %r9b
+	movb	251(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 332(%rdi)
+	movw	%r10w, 334(%rdi)
+	movb	252(%rsi), %r8b
+	movb	253(%rsi), %r9b
+	movb	254(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 336(%rdi)
+	movw	%r10w, 338(%rdi)
+	movb	255(%rsi), %r8b
+	movb	256(%rsi), %r9b
+	movb	257(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 340(%rdi)
+	movw	%r10w, 342(%rdi)
+	movb	258(%rsi), %r8b
+	movb	259(%rsi), %r9b
+	movb	260(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 344(%rdi)
+	movw	%r10w, 346(%rdi)
+	movb	261(%rsi), %r8b
+	movb	262(%rsi), %r9b
+	movb	263(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 348(%rdi)
+	movw	%r10w, 350(%rdi)
+	movb	264(%rsi), %r8b
+	movb	265(%rsi), %r9b
+	movb	266(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 352(%rdi)
+	movw	%r10w, 354(%rdi)
+	movb	267(%rsi), %r8b
+	movb	268(%rsi), %r9b
+	movb	269(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 356(%rdi)
+	movw	%r10w, 358(%rdi)
+	movb	270(%rsi), %r8b
+	movb	271(%rsi), %r9b
+	movb	272(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 360(%rdi)
+	movw	%r10w, 362(%rdi)
+	movb	273(%rsi), %r8b
+	movb	274(%rsi), %r9b
+	movb	275(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 364(%rdi)
+	movw	%r10w, 366(%rdi)
+	movb	276(%rsi), %r8b
+	movb	277(%rsi), %r9b
+	movb	278(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 368(%rdi)
+	movw	%r10w, 370(%rdi)
+	movb	279(%rsi), %r8b
+	movb	280(%rsi), %r9b
+	movb	281(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 372(%rdi)
+	movw	%r10w, 374(%rdi)
+	movb	282(%rsi), %r8b
+	movb	283(%rsi), %r9b
+	movb	284(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 376(%rdi)
+	movw	%r10w, 378(%rdi)
+	movb	285(%rsi), %r8b
+	movb	286(%rsi), %r9b
+	movb	287(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 380(%rdi)
+	movw	%r10w, 382(%rdi)
+	movb	288(%rsi), %r8b
+	movb	289(%rsi), %r9b
+	movb	290(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 384(%rdi)
+	movw	%r10w, 386(%rdi)
+	movb	291(%rsi), %r8b
+	movb	292(%rsi), %r9b
+	movb	293(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 388(%rdi)
+	movw	%r10w, 390(%rdi)
+	movb	294(%rsi), %r8b
+	movb	295(%rsi), %r9b
+	movb	296(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 392(%rdi)
+	movw	%r10w, 394(%rdi)
+	movb	297(%rsi), %r8b
+	movb	298(%rsi), %r9b
+	movb	299(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 396(%rdi)
+	movw	%r10w, 398(%rdi)
+	movb	300(%rsi), %r8b
+	movb	301(%rsi), %r9b
+	movb	302(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 400(%rdi)
+	movw	%r10w, 402(%rdi)
+	movb	303(%rsi), %r8b
+	movb	304(%rsi), %r9b
+	movb	305(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 404(%rdi)
+	movw	%r10w, 406(%rdi)
+	movb	306(%rsi), %r8b
+	movb	307(%rsi), %r9b
+	movb	308(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 408(%rdi)
+	movw	%r10w, 410(%rdi)
+	movb	309(%rsi), %r8b
+	movb	310(%rsi), %r9b
+	movb	311(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 412(%rdi)
+	movw	%r10w, 414(%rdi)
+	movb	312(%rsi), %r8b
+	movb	313(%rsi), %r9b
+	movb	314(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 416(%rdi)
+	movw	%r10w, 418(%rdi)
+	movb	315(%rsi), %r8b
+	movb	316(%rsi), %r9b
+	movb	317(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 420(%rdi)
+	movw	%r10w, 422(%rdi)
+	movb	318(%rsi), %r8b
+	movb	319(%rsi), %r9b
+	movb	320(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 424(%rdi)
+	movw	%r10w, 426(%rdi)
+	movb	321(%rsi), %r8b
+	movb	322(%rsi), %r9b
+	movb	323(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 428(%rdi)
+	movw	%r10w, 430(%rdi)
+	movb	324(%rsi), %r8b
+	movb	325(%rsi), %r9b
+	movb	326(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 432(%rdi)
+	movw	%r10w, 434(%rdi)
+	movb	327(%rsi), %r8b
+	movb	328(%rsi), %r9b
+	movb	329(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 436(%rdi)
+	movw	%r10w, 438(%rdi)
+	movb	330(%rsi), %r8b
+	movb	331(%rsi), %r9b
+	movb	332(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 440(%rdi)
+	movw	%r10w, 442(%rdi)
+	movb	333(%rsi), %r8b
+	movb	334(%rsi), %r9b
+	movb	335(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 444(%rdi)
+	movw	%r10w, 446(%rdi)
+	movb	336(%rsi), %r8b
+	movb	337(%rsi), %r9b
+	movb	338(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 448(%rdi)
+	movw	%r10w, 450(%rdi)
+	movb	339(%rsi), %r8b
+	movb	340(%rsi), %r9b
+	movb	341(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 452(%rdi)
+	movw	%r10w, 454(%rdi)
+	movb	342(%rsi), %r8b
+	movb	343(%rsi), %r9b
+	movb	344(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 456(%rdi)
+	movw	%r10w, 458(%rdi)
+	movb	345(%rsi), %r8b
+	movb	346(%rsi), %r9b
+	movb	347(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 460(%rdi)
+	movw	%r10w, 462(%rdi)
+	movb	348(%rsi), %r8b
+	movb	349(%rsi), %r9b
+	movb	350(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 464(%rdi)
+	movw	%r10w, 466(%rdi)
+	movb	351(%rsi), %r8b
+	movb	352(%rsi), %r9b
+	movb	353(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 468(%rdi)
+	movw	%r10w, 470(%rdi)
+	movb	354(%rsi), %r8b
+	movb	355(%rsi), %r9b
+	movb	356(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 472(%rdi)
+	movw	%r10w, 474(%rdi)
+	movb	357(%rsi), %r8b
+	movb	358(%rsi), %r9b
+	movb	359(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 476(%rdi)
+	movw	%r10w, 478(%rdi)
+	movb	360(%rsi), %r8b
+	movb	361(%rsi), %r9b
+	movb	362(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 480(%rdi)
+	movw	%r10w, 482(%rdi)
+	movb	363(%rsi), %r8b
+	movb	364(%rsi), %r9b
+	movb	365(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 484(%rdi)
+	movw	%r10w, 486(%rdi)
+	movb	366(%rsi), %r8b
+	movb	367(%rsi), %r9b
+	movb	368(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 488(%rdi)
+	movw	%r10w, 490(%rdi)
+	movb	369(%rsi), %r8b
+	movb	370(%rsi), %r9b
+	movb	371(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 492(%rdi)
+	movw	%r10w, 494(%rdi)
+	movb	372(%rsi), %r8b
+	movb	373(%rsi), %r9b
+	movb	374(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 496(%rdi)
+	movw	%r10w, 498(%rdi)
+	movb	375(%rsi), %r8b
+	movb	376(%rsi), %r9b
+	movb	377(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 500(%rdi)
+	movw	%r10w, 502(%rdi)
+	movb	378(%rsi), %r8b
+	movb	379(%rsi), %r9b
+	movb	380(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 504(%rdi)
+	movw	%r10w, 506(%rdi)
+	movb	381(%rsi), %r8b
+	movb	382(%rsi), %r9b
+	movb	383(%rsi), %r10b
+	movzbw	%r8b, %r8w
+	movzbw	%r9b, %r11w
+	andw	$15, %r11w
+	shlw	$8, %r11w
+	orw 	%r11w, %r8w
+	movzbw	%r10b, %r10w
+	shlw	$4, %r10w
+	movzbw	%r9b, %r9w
+	shrw	$4, %r9w
+	orw 	%r9w, %r10w
+	movw	%r8w, 508(%rdi)
+	movw	%r10w, 510(%rdi)
+	ret
+L_poly_decompress$1:
+	movq	$0, %rdi
+	movq	$0, %r8
+	jmp 	L_poly_decompress$2
+L_poly_decompress$3:
+	movb	(%rsi,%rdi), %r9b
+	movzbw	%r9b, %r10w
+	movzbw	%r9b, %r9w
+	andw	$15, %r10w
+	shrw	$4, %r9w
+	imulw	$3329, %r10w, %r10w
+	imulw	$3329, %r9w, %r9w
+	addw	$8, %r10w
+	addw	$8, %r9w
+	shrw	$4, %r10w
+	shrw	$4, %r9w
+	movw	%r10w, (%rcx,%r8,2)
+	incq	%r8
+	movw	%r9w, (%rcx,%r8,2)
+	incq	%r8
+	incq	%rdi
+L_poly_decompress$2:
+	cmpq	$128, %rdi
+	jb  	L_poly_decompress$3
+	ret
+L_i_poly_compress$1:
+	call	L_poly_csubq$1
+L_i_poly_compress$4:
+	movq	$0, %rdx
+	movq	$0, %rsi
+	jmp 	L_i_poly_compress$2
+L_i_poly_compress$3:
+	movw	(%rcx,%rsi,2), %di
+	movzwl	%di, %edi
+	shll	$4, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$15, %edi
+	incq	%rsi
+	movw	(%rcx,%rsi,2), %r8w
+	movzwl	%r8w, %r8d
+	shll	$4, %r8d
+	addl	$1665, %r8d
+	imull	$80635, %r8d, %r8d
+	shrl	$28, %r8d
+	andl	$15, %r8d
+	shll	$4, %r8d
+	orl 	%r8d, %edi
+	movb	%dil, (%rax,%rdx)
+	incq	%rdx
+	incq	%rsi
+L_i_poly_compress$2:
+	cmpq	$128, %rdx
+	jb  	L_i_poly_compress$3
+	ret
+L_poly_compress$1:
+	call	L_poly_csubq$1
+L_poly_compress$4:
+	movq	$0, %rdx
+	movq	$0, %rsi
+	jmp 	L_poly_compress$2
+L_poly_compress$3:
+	movw	(%rcx,%rsi,2), %di
+	movzwl	%di, %edi
+	shll	$4, %edi
+	addl	$1665, %edi
+	imull	$80635, %edi, %edi
+	shrl	$28, %edi
+	andl	$15, %edi
+	incq	%rsi
+	movw	(%rcx,%rsi,2), %r8w
+	movzwl	%r8w, %r8d
+	shll	$4, %r8d
+	addl	$1665, %r8d
+	imull	$80635, %r8d, %r8d
+	shrl	$28, %r8d
+	andl	$15, %r8d
+	shll	$4, %r8d
+	orl 	%r8d, %edi
+	movb	%dil, (%rax,%rdx)
+	incq	%rdx
+	incq	%rsi
+L_poly_compress$2:
+	cmpq	$128, %rdx
+	jb  	L_poly_compress$3
+	ret
+L_poly_basemul$1:
+	movq	%rdi, 8(%rsp)
+	movq	$64, %rdi
+	movq	$0, %r8
+	jmp 	L_poly_basemul$2
+L_poly_basemul$3:
+	leaq	glob_data + 448(%rip), %r9
+	movw	(%r9,%rdi,2), %r9w
+	incq	%rdi
+	movw	(%rcx,%r8,2), %r10w
+	movw	(%rsi,%r8,2), %r11w
+	incq	%r8
+	movw	(%rcx,%r8,2), %bx
+	movw	(%rsi,%r8,2), %bp
+	addq	$-1, %r8
+	movswl	%bx, %r12d
+	movswl	%bp, %r13d
+	imull	%r13d, %r12d
+	imull	$62209, %r12d, %r13d
+	shll	$16, %r13d
+	sarl	$16, %r13d
+	imull	$3329, %r13d, %r13d
+	subl	%r13d, %r12d
+	sarl	$16, %r12d
+	movswl	%r12w, %r12d
+	movswl	%r9w, %r13d
+	imull	%r13d, %r12d
+	imull	$62209, %r12d, %r13d
+	shll	$16, %r13d
+	sarl	$16, %r13d
+	imull	$3329, %r13d, %r13d
+	subl	%r13d, %r12d
+	sarl	$16, %r12d
+	movswl	%r10w, %r13d
+	movswl	%r11w, %r14d
+	imull	%r14d, %r13d
+	imull	$62209, %r13d, %r14d
+	shll	$16, %r14d
+	sarl	$16, %r14d
+	imull	$3329, %r14d, %r14d
+	subl	%r14d, %r13d
+	sarl	$16, %r13d
+	addw	%r13w, %r12w
+	movswl	%r10w, %r10d
+	movswl	%bp, %ebp
+	imull	%ebp, %r10d
+	imull	$62209, %r10d, %ebp
+	shll	$16, %ebp
+	sarl	$16, %ebp
+	imull	$3329, %ebp, %ebp
+	subl	%ebp, %r10d
+	sarl	$16, %r10d
+	movswl	%bx, %ebx
+	movswl	%r11w, %r11d
+	imull	%r11d, %ebx
+	imull	$62209, %ebx, %r11d
+	shll	$16, %r11d
+	sarl	$16, %r11d
+	imull	$3329, %r11d, %r11d
+	subl	%r11d, %ebx
+	sarl	$16, %ebx
+	addw	%bx, %r10w
+	movq	8(%rsp), %r11
+	movw	%r12w, (%r11,%r8,2)
+	incq	%r8
+	movw	%r10w, (%r11,%r8,2)
+	movq	%r11, 16(%rsp)
+	negw	%r9w
+	incq	%r8
+	movw	(%rcx,%r8,2), %r10w
+	movw	(%rsi,%r8,2), %r11w
+	incq	%r8
+	movw	(%rcx,%r8,2), %bx
+	movw	(%rsi,%r8,2), %bp
+	addq	$-1, %r8
+	movswl	%bx, %r12d
+	movswl	%bp, %r13d
+	imull	%r13d, %r12d
+	imull	$62209, %r12d, %r13d
+	shll	$16, %r13d
+	sarl	$16, %r13d
+	imull	$3329, %r13d, %r13d
+	subl	%r13d, %r12d
+	sarl	$16, %r12d
+	movswl	%r12w, %r12d
+	movswl	%r9w, %r9d
+	imull	%r9d, %r12d
+	imull	$62209, %r12d, %r9d
+	shll	$16, %r9d
+	sarl	$16, %r9d
+	imull	$3329, %r9d, %r9d
+	subl	%r9d, %r12d
+	sarl	$16, %r12d
+	movw	%r12w, %r9w
+	movswl	%r10w, %r12d
+	movswl	%r11w, %r13d
+	imull	%r13d, %r12d
+	imull	$62209, %r12d, %r13d
+	shll	$16, %r13d
+	sarl	$16, %r13d
+	imull	$3329, %r13d, %r13d
+	subl	%r13d, %r12d
+	sarl	$16, %r12d
+	addw	%r12w, %r9w
+	movswl	%r10w, %r10d
+	movswl	%bp, %ebp
+	imull	%ebp, %r10d
+	imull	$62209, %r10d, %ebp
+	shll	$16, %ebp
+	sarl	$16, %ebp
+	imull	$3329, %ebp, %ebp
+	subl	%ebp, %r10d
+	sarl	$16, %r10d
+	movswl	%bx, %ebx
+	movswl	%r11w, %r11d
+	imull	%r11d, %ebx
+	imull	$62209, %ebx, %r11d
+	shll	$16, %r11d
+	sarl	$16, %r11d
+	imull	$3329, %r11d, %r11d
+	subl	%r11d, %ebx
+	sarl	$16, %ebx
+	addw	%bx, %r10w
+	movq	16(%rsp), %r11
+	movw	%r9w, (%r11,%r8,2)
+	incq	%r8
+	movw	%r10w, (%r11,%r8,2)
+	incq	%r8
+L_poly_basemul$2:
+	cmpq	$256, %r8
+	jb  	L_poly_basemul$3
+	ret
+L_poly_csubq$1:
+	movq	$0, %r8
+	jmp 	L_poly_csubq$2
+L_poly_csubq$3:
+	movw	(%rcx,%r8,2), %r9w
+	addw	$-3329, %r9w
+	movw	%r9w, %r10w
+	sarw	$15, %r10w
+	andw	$3329, %r10w
+	addw	%r10w, %r9w
+	movw	%r9w, (%rcx,%r8,2)
+	incq	%r8
+L_poly_csubq$2:
+	cmpq	$256, %r8
+	jb  	L_poly_csubq$3
+	ret
+L_poly_add2$1:
+	movq	$0, %rdi
+	jmp 	L_poly_add2$2
+L_poly_add2$3:
+	movw	(%rcx,%rdi,2), %r8w
+	movw	(%rsi,%rdi,2), %r9w
+	addw	%r9w, %r8w
+	movw	%r8w, (%rcx,%rdi,2)
+	incq	%rdi
+L_poly_add2$2:
+	cmpq	$256, %rdi
+	jb  	L_poly_add2$3
+	ret
+L_shake256_64$1:
+	movq	%rax, 8(%rsp)
+	movq	%rcx, 16(%rsp)
+	leaq	24(%rsp), %rcx
+	xorq	%rax, %rax
+	movq	%rax, (%rcx)
+	movq	%rax, 8(%rcx)
+	movq	%rax, 16(%rcx)
+	movq	%rax, 24(%rcx)
+	movq	%rax, 32(%rcx)
+	movq	%rax, 40(%rcx)
+	movq	%rax, 48(%rcx)
+	movq	%rax, 56(%rcx)
+	movq	%rax, 64(%rcx)
+	movq	%rax, 72(%rcx)
+	movq	%rax, 80(%rcx)
+	movq	%rax, 88(%rcx)
+	movq	%rax, 96(%rcx)
+	movq	%rax, 104(%rcx)
+	movq	%rax, 112(%rcx)
+	movq	%rax, 120(%rcx)
+	movq	%rax, 128(%rcx)
+	movq	%rax, 136(%rcx)
+	movq	%rax, 144(%rcx)
+	movq	%rax, 152(%rcx)
+	movq	%rax, 160(%rcx)
+	movq	%rax, 168(%rcx)
+	movq	%rax, 176(%rcx)
+	movq	%rax, 184(%rcx)
+	movq	%rax, 192(%rcx)
+	movq	(%rdx), %rax
+	xorq	%rax, (%rcx)
+	movq	8(%rdx), %rax
+	xorq	%rax, 8(%rcx)
+	movq	16(%rdx), %rax
+	xorq	%rax, 16(%rcx)
+	movq	24(%rdx), %rax
+	xorq	%rax, 24(%rcx)
+	movq	32(%rdx), %rax
+	xorq	%rax, 32(%rcx)
+	movq	40(%rdx), %rax
+	xorq	%rax, 40(%rcx)
+	movq	48(%rdx), %rax
+	xorq	%rax, 48(%rcx)
+	movq	56(%rdx), %rax
+	xorq	%rax, 56(%rcx)
+	xorb	$31, 64(%rcx)
+	xorb	$-128, 135(%rcx)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_shake256_64$9:
+	leaq	216(%rsp), %rsp
+	movq	16(%rsp), %rax
+	movq	8(%rsp), %rdx
+	jmp 	L_shake256_64$6
+L_shake256_64$7:
+	movq	(%rcx), %rsi
+	movq	%rsi, (%rdx)
+	movq	8(%rcx), %rsi
+	movq	%rsi, 8(%rdx)
+	movq	16(%rcx), %rsi
+	movq	%rsi, 16(%rdx)
+	movq	24(%rcx), %rsi
+	movq	%rsi, 24(%rdx)
+	movq	32(%rcx), %rsi
+	movq	%rsi, 32(%rdx)
+	movq	40(%rcx), %rsi
+	movq	%rsi, 40(%rdx)
+	movq	48(%rcx), %rsi
+	movq	%rsi, 48(%rdx)
+	movq	56(%rcx), %rsi
+	movq	%rsi, 56(%rdx)
+	movq	64(%rcx), %rsi
+	movq	%rsi, 64(%rdx)
+	movq	72(%rcx), %rsi
+	movq	%rsi, 72(%rdx)
+	movq	80(%rcx), %rsi
+	movq	%rsi, 80(%rdx)
+	movq	88(%rcx), %rsi
+	movq	%rsi, 88(%rdx)
+	movq	96(%rcx), %rsi
+	movq	%rsi, 96(%rdx)
+	movq	104(%rcx), %rsi
+	movq	%rsi, 104(%rdx)
+	movq	112(%rcx), %rsi
+	movq	%rsi, 112(%rdx)
+	movq	120(%rcx), %rsi
+	movq	%rsi, 120(%rdx)
+	movq	128(%rcx), %rsi
+	movq	%rsi, 128(%rdx)
+	addq	$136, %rdx
+	addq	$-136, %rax
+	movq	%rdx, 8(%rsp)
+	movq	%rax, 16(%rsp)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_shake256_64$8:
+	leaq	216(%rsp), %rsp
+	movq	16(%rsp), %rax
+	movq	8(%rsp), %rdx
+L_shake256_64$6:
+	cmpq	$136, %rax
+	jnbe	L_shake256_64$7
+	movq	%rax, 8(%rsp)
+	shrq	$3, %rax
+	movq	$0, %rsi
+	jmp 	L_shake256_64$4
+L_shake256_64$5:
+	movq	(%rcx,%rsi,8), %rdi
+	movq	%rdi, (%rdx,%rsi,8)
+	incq	%rsi
+L_shake256_64$4:
+	cmpq	%rax, %rsi
+	jb  	L_shake256_64$5
+	shlq	$3, %rsi
+	movq	8(%rsp), %rax
+	jmp 	L_shake256_64$2
+L_shake256_64$3:
+	movb	(%rcx,%rsi), %dil
+	movb	%dil, (%rdx,%rsi)
+	incq	%rsi
+L_shake256_64$2:
+	cmpq	%rax, %rsi
+	jb  	L_shake256_64$3
+	ret
+L_sha3_512_64$1:
+	movq	%rax, 8(%rsp)
+	leaq	16(%rsp), %rcx
+	xorq	%rax, %rax
+	movq	%rax, (%rcx)
+	movq	%rax, 8(%rcx)
+	movq	%rax, 16(%rcx)
+	movq	%rax, 24(%rcx)
+	movq	%rax, 32(%rcx)
+	movq	%rax, 40(%rcx)
+	movq	%rax, 48(%rcx)
+	movq	%rax, 56(%rcx)
+	movq	%rax, 64(%rcx)
+	movq	%rax, 72(%rcx)
+	movq	%rax, 80(%rcx)
+	movq	%rax, 88(%rcx)
+	movq	%rax, 96(%rcx)
+	movq	%rax, 104(%rcx)
+	movq	%rax, 112(%rcx)
+	movq	%rax, 120(%rcx)
+	movq	%rax, 128(%rcx)
+	movq	%rax, 136(%rcx)
+	movq	%rax, 144(%rcx)
+	movq	%rax, 152(%rcx)
+	movq	%rax, 160(%rcx)
+	movq	%rax, 168(%rcx)
+	movq	%rax, 176(%rcx)
+	movq	%rax, 184(%rcx)
+	movq	%rax, 192(%rcx)
+	movq	(%rdx), %rax
+	xorq	%rax, (%rcx)
+	movq	8(%rdx), %rax
+	xorq	%rax, 8(%rcx)
+	movq	16(%rdx), %rax
+	xorq	%rax, 16(%rcx)
+	movq	24(%rdx), %rax
+	xorq	%rax, 24(%rcx)
+	movq	32(%rdx), %rax
+	xorq	%rax, 32(%rcx)
+	movq	40(%rdx), %rax
+	xorq	%rax, 40(%rcx)
+	movq	48(%rdx), %rax
+	xorq	%rax, 48(%rcx)
+	movq	56(%rdx), %rax
+	xorq	%rax, 56(%rcx)
+	xorb	$6, 64(%rcx)
+	xorb	$-128, 71(%rcx)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_sha3_512_64$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rax
+	movq	(%rcx), %rdx
+	movq	%rdx, (%rax)
+	movq	8(%rcx), %rdx
+	movq	%rdx, 8(%rax)
+	movq	16(%rcx), %rdx
+	movq	%rdx, 16(%rax)
+	movq	24(%rcx), %rdx
+	movq	%rdx, 24(%rax)
+	movq	32(%rcx), %rdx
+	movq	%rdx, 32(%rax)
+	movq	40(%rcx), %rdx
+	movq	%rdx, 40(%rax)
+	movq	48(%rcx), %rdx
+	movq	%rdx, 48(%rax)
+	movq	56(%rcx), %rcx
+	movq	%rcx, 56(%rax)
+	ret
+L_sha3_256_32$1:
+	movq	%rax, 8(%rsp)
+	leaq	16(%rsp), %rcx
+	xorq	%rax, %rax
+	movq	%rax, (%rcx)
+	movq	%rax, 8(%rcx)
+	movq	%rax, 16(%rcx)
+	movq	%rax, 24(%rcx)
+	movq	%rax, 32(%rcx)
+	movq	%rax, 40(%rcx)
+	movq	%rax, 48(%rcx)
+	movq	%rax, 56(%rcx)
+	movq	%rax, 64(%rcx)
+	movq	%rax, 72(%rcx)
+	movq	%rax, 80(%rcx)
+	movq	%rax, 88(%rcx)
+	movq	%rax, 96(%rcx)
+	movq	%rax, 104(%rcx)
+	movq	%rax, 112(%rcx)
+	movq	%rax, 120(%rcx)
+	movq	%rax, 128(%rcx)
+	movq	%rax, 136(%rcx)
+	movq	%rax, 144(%rcx)
+	movq	%rax, 152(%rcx)
+	movq	%rax, 160(%rcx)
+	movq	%rax, 168(%rcx)
+	movq	%rax, 176(%rcx)
+	movq	%rax, 184(%rcx)
+	movq	%rax, 192(%rcx)
+	movq	(%rdx), %rax
+	movq	%rax, (%rcx)
+	movq	8(%rdx), %rax
+	movq	%rax, 8(%rcx)
+	movq	16(%rdx), %rax
+	movq	%rax, 16(%rcx)
+	movq	24(%rdx), %rax
+	movq	%rax, 24(%rcx)
+	xorb	$6, 32(%rcx)
+	movb	$-128, 135(%rcx)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_sha3_256_32$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rax
+	movq	(%rcx), %rdx
+	movq	%rdx, (%rax)
+	movq	8(%rcx), %rdx
+	movq	%rdx, 8(%rax)
+	movq	16(%rcx), %rdx
+	movq	%rdx, 16(%rax)
+	movq	24(%rcx), %rcx
+	movq	%rcx, 24(%rax)
+	ret
+L_sha3_256$1:
+	movq	%rcx, 8(%rsp)
+	leaq	40(%rsp), %rcx
+	xorq	%rdx, %rdx
+	movq	%rdx, (%rcx)
+	movq	%rdx, 8(%rcx)
+	movq	%rdx, 16(%rcx)
+	movq	%rdx, 24(%rcx)
+	movq	%rdx, 32(%rcx)
+	movq	%rdx, 40(%rcx)
+	movq	%rdx, 48(%rcx)
+	movq	%rdx, 56(%rcx)
+	movq	%rdx, 64(%rcx)
+	movq	%rdx, 72(%rcx)
+	movq	%rdx, 80(%rcx)
+	movq	%rdx, 88(%rcx)
+	movq	%rdx, 96(%rcx)
+	movq	%rdx, 104(%rcx)
+	movq	%rdx, 112(%rcx)
+	movq	%rdx, 120(%rcx)
+	movq	%rdx, 128(%rcx)
+	movq	%rdx, 136(%rcx)
+	movq	%rdx, 144(%rcx)
+	movq	%rdx, 152(%rcx)
+	movq	%rdx, 160(%rcx)
+	movq	%rdx, 168(%rcx)
+	movq	%rdx, 176(%rcx)
+	movq	%rdx, 184(%rcx)
+	movq	%rdx, 192(%rcx)
+	movq	$136, %rdx
+	jmp 	L_sha3_256$7
+L_sha3_256$8:
+	movq	%rdx, %rdi
+	shrq	$3, %rdi
+	movq	$0, %r8
+	jmp 	L_sha3_256$10
+L_sha3_256$11:
+	movq	(%rsi,%r8,8), %r9
+	xorq	%r9, (%rcx,%r8,8)
+	incq	%r8
+L_sha3_256$10:
+	cmpq	%rdi, %r8
+	jb  	L_sha3_256$11
+	addq	%rdx, %rsi
+	subq	%rdx, %rax
+	movq	%rsi, 16(%rsp)
+	movq	%rax, 24(%rsp)
+	movq	%rdx, 32(%rsp)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_sha3_256$9:
+	leaq	216(%rsp), %rsp
+	movq	16(%rsp), %rsi
+	movq	24(%rsp), %rax
+	movq	32(%rsp), %rdx
+L_sha3_256$7:
+	cmpq	%rdx, %rax
+	jnb 	L_sha3_256$8
+	movb	$6, %dil
+	movq	%rax, %r8
+	shrq	$3, %r8
+	movq	$0, %r9
+	jmp 	L_sha3_256$5
+L_sha3_256$6:
+	movq	(%rsi,%r9,8), %r10
+	xorq	%r10, (%rcx,%r9,8)
+	incq	%r9
+L_sha3_256$5:
+	cmpq	%r8, %r9
+	jb  	L_sha3_256$6
+	shlq	$3, %r9
+	jmp 	L_sha3_256$3
+L_sha3_256$4:
+	movb	(%rsi,%r9), %r8b
+	xorb	%r8b, (%rcx,%r9)
+	incq	%r9
+L_sha3_256$3:
+	cmpq	%rax, %r9
+	jb  	L_sha3_256$4
+	xorb	%dil, (%rcx,%r9)
+	addq	$-1, %rdx
+	xorb	$-128, (%rcx,%rdx)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_sha3_256$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rax
+	movq	(%rcx), %rdx
+	movq	%rdx, (%rax)
+	movq	8(%rcx), %rdx
+	movq	%rdx, 8(%rax)
+	movq	16(%rcx), %rdx
+	movq	%rdx, 16(%rax)
+	movq	24(%rcx), %rcx
+	movq	%rcx, 24(%rax)
+	ret
+L_shake128_squeezeblock$1:
+	movq	%rdx, 8(%rsp)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_shake128_squeezeblock$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rdx
+	movb	(%rcx), %sil
+	movb	%sil, (%rdx)
+	movb	1(%rcx), %sil
+	movb	%sil, 1(%rdx)
+	movb	2(%rcx), %sil
+	movb	%sil, 2(%rdx)
+	movb	3(%rcx), %sil
+	movb	%sil, 3(%rdx)
+	movb	4(%rcx), %sil
+	movb	%sil, 4(%rdx)
+	movb	5(%rcx), %sil
+	movb	%sil, 5(%rdx)
+	movb	6(%rcx), %sil
+	movb	%sil, 6(%rdx)
+	movb	7(%rcx), %sil
+	movb	%sil, 7(%rdx)
+	movb	8(%rcx), %sil
+	movb	%sil, 8(%rdx)
+	movb	9(%rcx), %sil
+	movb	%sil, 9(%rdx)
+	movb	10(%rcx), %sil
+	movb	%sil, 10(%rdx)
+	movb	11(%rcx), %sil
+	movb	%sil, 11(%rdx)
+	movb	12(%rcx), %sil
+	movb	%sil, 12(%rdx)
+	movb	13(%rcx), %sil
+	movb	%sil, 13(%rdx)
+	movb	14(%rcx), %sil
+	movb	%sil, 14(%rdx)
+	movb	15(%rcx), %sil
+	movb	%sil, 15(%rdx)
+	movb	16(%rcx), %sil
+	movb	%sil, 16(%rdx)
+	movb	17(%rcx), %sil
+	movb	%sil, 17(%rdx)
+	movb	18(%rcx), %sil
+	movb	%sil, 18(%rdx)
+	movb	19(%rcx), %sil
+	movb	%sil, 19(%rdx)
+	movb	20(%rcx), %sil
+	movb	%sil, 20(%rdx)
+	movb	21(%rcx), %sil
+	movb	%sil, 21(%rdx)
+	movb	22(%rcx), %sil
+	movb	%sil, 22(%rdx)
+	movb	23(%rcx), %sil
+	movb	%sil, 23(%rdx)
+	movb	24(%rcx), %sil
+	movb	%sil, 24(%rdx)
+	movb	25(%rcx), %sil
+	movb	%sil, 25(%rdx)
+	movb	26(%rcx), %sil
+	movb	%sil, 26(%rdx)
+	movb	27(%rcx), %sil
+	movb	%sil, 27(%rdx)
+	movb	28(%rcx), %sil
+	movb	%sil, 28(%rdx)
+	movb	29(%rcx), %sil
+	movb	%sil, 29(%rdx)
+	movb	30(%rcx), %sil
+	movb	%sil, 30(%rdx)
+	movb	31(%rcx), %sil
+	movb	%sil, 31(%rdx)
+	movb	32(%rcx), %sil
+	movb	%sil, 32(%rdx)
+	movb	33(%rcx), %sil
+	movb	%sil, 33(%rdx)
+	movb	34(%rcx), %sil
+	movb	%sil, 34(%rdx)
+	movb	35(%rcx), %sil
+	movb	%sil, 35(%rdx)
+	movb	36(%rcx), %sil
+	movb	%sil, 36(%rdx)
+	movb	37(%rcx), %sil
+	movb	%sil, 37(%rdx)
+	movb	38(%rcx), %sil
+	movb	%sil, 38(%rdx)
+	movb	39(%rcx), %sil
+	movb	%sil, 39(%rdx)
+	movb	40(%rcx), %sil
+	movb	%sil, 40(%rdx)
+	movb	41(%rcx), %sil
+	movb	%sil, 41(%rdx)
+	movb	42(%rcx), %sil
+	movb	%sil, 42(%rdx)
+	movb	43(%rcx), %sil
+	movb	%sil, 43(%rdx)
+	movb	44(%rcx), %sil
+	movb	%sil, 44(%rdx)
+	movb	45(%rcx), %sil
+	movb	%sil, 45(%rdx)
+	movb	46(%rcx), %sil
+	movb	%sil, 46(%rdx)
+	movb	47(%rcx), %sil
+	movb	%sil, 47(%rdx)
+	movb	48(%rcx), %sil
+	movb	%sil, 48(%rdx)
+	movb	49(%rcx), %sil
+	movb	%sil, 49(%rdx)
+	movb	50(%rcx), %sil
+	movb	%sil, 50(%rdx)
+	movb	51(%rcx), %sil
+	movb	%sil, 51(%rdx)
+	movb	52(%rcx), %sil
+	movb	%sil, 52(%rdx)
+	movb	53(%rcx), %sil
+	movb	%sil, 53(%rdx)
+	movb	54(%rcx), %sil
+	movb	%sil, 54(%rdx)
+	movb	55(%rcx), %sil
+	movb	%sil, 55(%rdx)
+	movb	56(%rcx), %sil
+	movb	%sil, 56(%rdx)
+	movb	57(%rcx), %sil
+	movb	%sil, 57(%rdx)
+	movb	58(%rcx), %sil
+	movb	%sil, 58(%rdx)
+	movb	59(%rcx), %sil
+	movb	%sil, 59(%rdx)
+	movb	60(%rcx), %sil
+	movb	%sil, 60(%rdx)
+	movb	61(%rcx), %sil
+	movb	%sil, 61(%rdx)
+	movb	62(%rcx), %sil
+	movb	%sil, 62(%rdx)
+	movb	63(%rcx), %sil
+	movb	%sil, 63(%rdx)
+	movb	64(%rcx), %sil
+	movb	%sil, 64(%rdx)
+	movb	65(%rcx), %sil
+	movb	%sil, 65(%rdx)
+	movb	66(%rcx), %sil
+	movb	%sil, 66(%rdx)
+	movb	67(%rcx), %sil
+	movb	%sil, 67(%rdx)
+	movb	68(%rcx), %sil
+	movb	%sil, 68(%rdx)
+	movb	69(%rcx), %sil
+	movb	%sil, 69(%rdx)
+	movb	70(%rcx), %sil
+	movb	%sil, 70(%rdx)
+	movb	71(%rcx), %sil
+	movb	%sil, 71(%rdx)
+	movb	72(%rcx), %sil
+	movb	%sil, 72(%rdx)
+	movb	73(%rcx), %sil
+	movb	%sil, 73(%rdx)
+	movb	74(%rcx), %sil
+	movb	%sil, 74(%rdx)
+	movb	75(%rcx), %sil
+	movb	%sil, 75(%rdx)
+	movb	76(%rcx), %sil
+	movb	%sil, 76(%rdx)
+	movb	77(%rcx), %sil
+	movb	%sil, 77(%rdx)
+	movb	78(%rcx), %sil
+	movb	%sil, 78(%rdx)
+	movb	79(%rcx), %sil
+	movb	%sil, 79(%rdx)
+	movb	80(%rcx), %sil
+	movb	%sil, 80(%rdx)
+	movb	81(%rcx), %sil
+	movb	%sil, 81(%rdx)
+	movb	82(%rcx), %sil
+	movb	%sil, 82(%rdx)
+	movb	83(%rcx), %sil
+	movb	%sil, 83(%rdx)
+	movb	84(%rcx), %sil
+	movb	%sil, 84(%rdx)
+	movb	85(%rcx), %sil
+	movb	%sil, 85(%rdx)
+	movb	86(%rcx), %sil
+	movb	%sil, 86(%rdx)
+	movb	87(%rcx), %sil
+	movb	%sil, 87(%rdx)
+	movb	88(%rcx), %sil
+	movb	%sil, 88(%rdx)
+	movb	89(%rcx), %sil
+	movb	%sil, 89(%rdx)
+	movb	90(%rcx), %sil
+	movb	%sil, 90(%rdx)
+	movb	91(%rcx), %sil
+	movb	%sil, 91(%rdx)
+	movb	92(%rcx), %sil
+	movb	%sil, 92(%rdx)
+	movb	93(%rcx), %sil
+	movb	%sil, 93(%rdx)
+	movb	94(%rcx), %sil
+	movb	%sil, 94(%rdx)
+	movb	95(%rcx), %sil
+	movb	%sil, 95(%rdx)
+	movb	96(%rcx), %sil
+	movb	%sil, 96(%rdx)
+	movb	97(%rcx), %sil
+	movb	%sil, 97(%rdx)
+	movb	98(%rcx), %sil
+	movb	%sil, 98(%rdx)
+	movb	99(%rcx), %sil
+	movb	%sil, 99(%rdx)
+	movb	100(%rcx), %sil
+	movb	%sil, 100(%rdx)
+	movb	101(%rcx), %sil
+	movb	%sil, 101(%rdx)
+	movb	102(%rcx), %sil
+	movb	%sil, 102(%rdx)
+	movb	103(%rcx), %sil
+	movb	%sil, 103(%rdx)
+	movb	104(%rcx), %sil
+	movb	%sil, 104(%rdx)
+	movb	105(%rcx), %sil
+	movb	%sil, 105(%rdx)
+	movb	106(%rcx), %sil
+	movb	%sil, 106(%rdx)
+	movb	107(%rcx), %sil
+	movb	%sil, 107(%rdx)
+	movb	108(%rcx), %sil
+	movb	%sil, 108(%rdx)
+	movb	109(%rcx), %sil
+	movb	%sil, 109(%rdx)
+	movb	110(%rcx), %sil
+	movb	%sil, 110(%rdx)
+	movb	111(%rcx), %sil
+	movb	%sil, 111(%rdx)
+	movb	112(%rcx), %sil
+	movb	%sil, 112(%rdx)
+	movb	113(%rcx), %sil
+	movb	%sil, 113(%rdx)
+	movb	114(%rcx), %sil
+	movb	%sil, 114(%rdx)
+	movb	115(%rcx), %sil
+	movb	%sil, 115(%rdx)
+	movb	116(%rcx), %sil
+	movb	%sil, 116(%rdx)
+	movb	117(%rcx), %sil
+	movb	%sil, 117(%rdx)
+	movb	118(%rcx), %sil
+	movb	%sil, 118(%rdx)
+	movb	119(%rcx), %sil
+	movb	%sil, 119(%rdx)
+	movb	120(%rcx), %sil
+	movb	%sil, 120(%rdx)
+	movb	121(%rcx), %sil
+	movb	%sil, 121(%rdx)
+	movb	122(%rcx), %sil
+	movb	%sil, 122(%rdx)
+	movb	123(%rcx), %sil
+	movb	%sil, 123(%rdx)
+	movb	124(%rcx), %sil
+	movb	%sil, 124(%rdx)
+	movb	125(%rcx), %sil
+	movb	%sil, 125(%rdx)
+	movb	126(%rcx), %sil
+	movb	%sil, 126(%rdx)
+	movb	127(%rcx), %sil
+	movb	%sil, 127(%rdx)
+	movb	128(%rcx), %sil
+	movb	%sil, 128(%rdx)
+	movb	129(%rcx), %sil
+	movb	%sil, 129(%rdx)
+	movb	130(%rcx), %sil
+	movb	%sil, 130(%rdx)
+	movb	131(%rcx), %sil
+	movb	%sil, 131(%rdx)
+	movb	132(%rcx), %sil
+	movb	%sil, 132(%rdx)
+	movb	133(%rcx), %sil
+	movb	%sil, 133(%rdx)
+	movb	134(%rcx), %sil
+	movb	%sil, 134(%rdx)
+	movb	135(%rcx), %sil
+	movb	%sil, 135(%rdx)
+	movb	136(%rcx), %sil
+	movb	%sil, 136(%rdx)
+	movb	137(%rcx), %sil
+	movb	%sil, 137(%rdx)
+	movb	138(%rcx), %sil
+	movb	%sil, 138(%rdx)
+	movb	139(%rcx), %sil
+	movb	%sil, 139(%rdx)
+	movb	140(%rcx), %sil
+	movb	%sil, 140(%rdx)
+	movb	141(%rcx), %sil
+	movb	%sil, 141(%rdx)
+	movb	142(%rcx), %sil
+	movb	%sil, 142(%rdx)
+	movb	143(%rcx), %sil
+	movb	%sil, 143(%rdx)
+	movb	144(%rcx), %sil
+	movb	%sil, 144(%rdx)
+	movb	145(%rcx), %sil
+	movb	%sil, 145(%rdx)
+	movb	146(%rcx), %sil
+	movb	%sil, 146(%rdx)
+	movb	147(%rcx), %sil
+	movb	%sil, 147(%rdx)
+	movb	148(%rcx), %sil
+	movb	%sil, 148(%rdx)
+	movb	149(%rcx), %sil
+	movb	%sil, 149(%rdx)
+	movb	150(%rcx), %sil
+	movb	%sil, 150(%rdx)
+	movb	151(%rcx), %sil
+	movb	%sil, 151(%rdx)
+	movb	152(%rcx), %sil
+	movb	%sil, 152(%rdx)
+	movb	153(%rcx), %sil
+	movb	%sil, 153(%rdx)
+	movb	154(%rcx), %sil
+	movb	%sil, 154(%rdx)
+	movb	155(%rcx), %sil
+	movb	%sil, 155(%rdx)
+	movb	156(%rcx), %sil
+	movb	%sil, 156(%rdx)
+	movb	157(%rcx), %sil
+	movb	%sil, 157(%rdx)
+	movb	158(%rcx), %sil
+	movb	%sil, 158(%rdx)
+	movb	159(%rcx), %sil
+	movb	%sil, 159(%rdx)
+	movb	160(%rcx), %sil
+	movb	%sil, 160(%rdx)
+	movb	161(%rcx), %sil
+	movb	%sil, 161(%rdx)
+	movb	162(%rcx), %sil
+	movb	%sil, 162(%rdx)
+	movb	163(%rcx), %sil
+	movb	%sil, 163(%rdx)
+	movb	164(%rcx), %sil
+	movb	%sil, 164(%rdx)
+	movb	165(%rcx), %sil
+	movb	%sil, 165(%rdx)
+	movb	166(%rcx), %sil
+	movb	%sil, 166(%rdx)
+	movb	167(%rcx), %cl
+	movb	%cl, 167(%rdx)
+	ret
+L_shake128_absorb34$1:
+	xorq	%rsi, %rsi
+	movq	%rsi, (%rcx)
+	movq	%rsi, 8(%rcx)
+	movq	%rsi, 16(%rcx)
+	movq	%rsi, 24(%rcx)
+	movq	%rsi, 32(%rcx)
+	movq	%rsi, 40(%rcx)
+	movq	%rsi, 48(%rcx)
+	movq	%rsi, 56(%rcx)
+	movq	%rsi, 64(%rcx)
+	movq	%rsi, 72(%rcx)
+	movq	%rsi, 80(%rcx)
+	movq	%rsi, 88(%rcx)
+	movq	%rsi, 96(%rcx)
+	movq	%rsi, 104(%rcx)
+	movq	%rsi, 112(%rcx)
+	movq	%rsi, 120(%rcx)
+	movq	%rsi, 128(%rcx)
+	movq	%rsi, 136(%rcx)
+	movq	%rsi, 144(%rcx)
+	movq	%rsi, 152(%rcx)
+	movq	%rsi, 160(%rcx)
+	movq	%rsi, 168(%rcx)
+	movq	%rsi, 176(%rcx)
+	movq	%rsi, 184(%rcx)
+	movq	%rsi, 192(%rcx)
+	movb	(%rdx), %sil
+	xorb	%sil, (%rcx)
+	movb	1(%rdx), %sil
+	xorb	%sil, 1(%rcx)
+	movb	2(%rdx), %sil
+	xorb	%sil, 2(%rcx)
+	movb	3(%rdx), %sil
+	xorb	%sil, 3(%rcx)
+	movb	4(%rdx), %sil
+	xorb	%sil, 4(%rcx)
+	movb	5(%rdx), %sil
+	xorb	%sil, 5(%rcx)
+	movb	6(%rdx), %sil
+	xorb	%sil, 6(%rcx)
+	movb	7(%rdx), %sil
+	xorb	%sil, 7(%rcx)
+	movb	8(%rdx), %sil
+	xorb	%sil, 8(%rcx)
+	movb	9(%rdx), %sil
+	xorb	%sil, 9(%rcx)
+	movb	10(%rdx), %sil
+	xorb	%sil, 10(%rcx)
+	movb	11(%rdx), %sil
+	xorb	%sil, 11(%rcx)
+	movb	12(%rdx), %sil
+	xorb	%sil, 12(%rcx)
+	movb	13(%rdx), %sil
+	xorb	%sil, 13(%rcx)
+	movb	14(%rdx), %sil
+	xorb	%sil, 14(%rcx)
+	movb	15(%rdx), %sil
+	xorb	%sil, 15(%rcx)
+	movb	16(%rdx), %sil
+	xorb	%sil, 16(%rcx)
+	movb	17(%rdx), %sil
+	xorb	%sil, 17(%rcx)
+	movb	18(%rdx), %sil
+	xorb	%sil, 18(%rcx)
+	movb	19(%rdx), %sil
+	xorb	%sil, 19(%rcx)
+	movb	20(%rdx), %sil
+	xorb	%sil, 20(%rcx)
+	movb	21(%rdx), %sil
+	xorb	%sil, 21(%rcx)
+	movb	22(%rdx), %sil
+	xorb	%sil, 22(%rcx)
+	movb	23(%rdx), %sil
+	xorb	%sil, 23(%rcx)
+	movb	24(%rdx), %sil
+	xorb	%sil, 24(%rcx)
+	movb	25(%rdx), %sil
+	xorb	%sil, 25(%rcx)
+	movb	26(%rdx), %sil
+	xorb	%sil, 26(%rcx)
+	movb	27(%rdx), %sil
+	xorb	%sil, 27(%rcx)
+	movb	28(%rdx), %sil
+	xorb	%sil, 28(%rcx)
+	movb	29(%rdx), %sil
+	xorb	%sil, 29(%rcx)
+	movb	30(%rdx), %sil
+	xorb	%sil, 30(%rcx)
+	movb	31(%rdx), %sil
+	xorb	%sil, 31(%rcx)
+	movb	32(%rdx), %sil
+	xorb	%sil, 32(%rcx)
+	movb	33(%rdx), %dl
+	xorb	%dl, 33(%rcx)
+	xorb	$31, 34(%rcx)
+	xorb	$-128, 167(%rcx)
+	ret
+L_sha3_512_32$1:
+	movq	%rcx, 8(%rsp)
+	leaq	16(%rsp), %rcx
+	xorq	%rdx, %rdx
+	movq	%rdx, (%rcx)
+	movq	%rdx, 8(%rcx)
+	movq	%rdx, 16(%rcx)
+	movq	%rdx, 24(%rcx)
+	movq	%rdx, 32(%rcx)
+	movq	%rdx, 40(%rcx)
+	movq	%rdx, 48(%rcx)
+	movq	%rdx, 56(%rcx)
+	movq	%rdx, 64(%rcx)
+	movq	%rdx, 72(%rcx)
+	movq	%rdx, 80(%rcx)
+	movq	%rdx, 88(%rcx)
+	movq	%rdx, 96(%rcx)
+	movq	%rdx, 104(%rcx)
+	movq	%rdx, 112(%rcx)
+	movq	%rdx, 120(%rcx)
+	movq	%rdx, 128(%rcx)
+	movq	%rdx, 136(%rcx)
+	movq	%rdx, 144(%rcx)
+	movq	%rdx, 152(%rcx)
+	movq	%rdx, 160(%rcx)
+	movq	%rdx, 168(%rcx)
+	movq	%rdx, 176(%rcx)
+	movq	%rdx, 184(%rcx)
+	movq	%rdx, 192(%rcx)
+	movb	(%rax), %dl
+	xorb	%dl, (%rcx)
+	movb	1(%rax), %dl
+	xorb	%dl, 1(%rcx)
+	movb	2(%rax), %dl
+	xorb	%dl, 2(%rcx)
+	movb	3(%rax), %dl
+	xorb	%dl, 3(%rcx)
+	movb	4(%rax), %dl
+	xorb	%dl, 4(%rcx)
+	movb	5(%rax), %dl
+	xorb	%dl, 5(%rcx)
+	movb	6(%rax), %dl
+	xorb	%dl, 6(%rcx)
+	movb	7(%rax), %dl
+	xorb	%dl, 7(%rcx)
+	movb	8(%rax), %dl
+	xorb	%dl, 8(%rcx)
+	movb	9(%rax), %dl
+	xorb	%dl, 9(%rcx)
+	movb	10(%rax), %dl
+	xorb	%dl, 10(%rcx)
+	movb	11(%rax), %dl
+	xorb	%dl, 11(%rcx)
+	movb	12(%rax), %dl
+	xorb	%dl, 12(%rcx)
+	movb	13(%rax), %dl
+	xorb	%dl, 13(%rcx)
+	movb	14(%rax), %dl
+	xorb	%dl, 14(%rcx)
+	movb	15(%rax), %dl
+	xorb	%dl, 15(%rcx)
+	movb	16(%rax), %dl
+	xorb	%dl, 16(%rcx)
+	movb	17(%rax), %dl
+	xorb	%dl, 17(%rcx)
+	movb	18(%rax), %dl
+	xorb	%dl, 18(%rcx)
+	movb	19(%rax), %dl
+	xorb	%dl, 19(%rcx)
+	movb	20(%rax), %dl
+	xorb	%dl, 20(%rcx)
+	movb	21(%rax), %dl
+	xorb	%dl, 21(%rcx)
+	movb	22(%rax), %dl
+	xorb	%dl, 22(%rcx)
+	movb	23(%rax), %dl
+	xorb	%dl, 23(%rcx)
+	movb	24(%rax), %dl
+	xorb	%dl, 24(%rcx)
+	movb	25(%rax), %dl
+	xorb	%dl, 25(%rcx)
+	movb	26(%rax), %dl
+	xorb	%dl, 26(%rcx)
+	movb	27(%rax), %dl
+	xorb	%dl, 27(%rcx)
+	movb	28(%rax), %dl
+	xorb	%dl, 28(%rcx)
+	movb	29(%rax), %dl
+	xorb	%dl, 29(%rcx)
+	movb	30(%rax), %dl
+	xorb	%dl, 30(%rcx)
+	movb	31(%rax), %al
+	xorb	%al, 31(%rcx)
+	xorb	$6, 32(%rcx)
+	xorb	$-128, 71(%rcx)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_sha3_512_32$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rax
+	movb	(%rcx), %dl
+	movb	%dl, (%rax)
+	movb	1(%rcx), %dl
+	movb	%dl, 1(%rax)
+	movb	2(%rcx), %dl
+	movb	%dl, 2(%rax)
+	movb	3(%rcx), %dl
+	movb	%dl, 3(%rax)
+	movb	4(%rcx), %dl
+	movb	%dl, 4(%rax)
+	movb	5(%rcx), %dl
+	movb	%dl, 5(%rax)
+	movb	6(%rcx), %dl
+	movb	%dl, 6(%rax)
+	movb	7(%rcx), %dl
+	movb	%dl, 7(%rax)
+	movb	8(%rcx), %dl
+	movb	%dl, 8(%rax)
+	movb	9(%rcx), %dl
+	movb	%dl, 9(%rax)
+	movb	10(%rcx), %dl
+	movb	%dl, 10(%rax)
+	movb	11(%rcx), %dl
+	movb	%dl, 11(%rax)
+	movb	12(%rcx), %dl
+	movb	%dl, 12(%rax)
+	movb	13(%rcx), %dl
+	movb	%dl, 13(%rax)
+	movb	14(%rcx), %dl
+	movb	%dl, 14(%rax)
+	movb	15(%rcx), %dl
+	movb	%dl, 15(%rax)
+	movb	16(%rcx), %dl
+	movb	%dl, 16(%rax)
+	movb	17(%rcx), %dl
+	movb	%dl, 17(%rax)
+	movb	18(%rcx), %dl
+	movb	%dl, 18(%rax)
+	movb	19(%rcx), %dl
+	movb	%dl, 19(%rax)
+	movb	20(%rcx), %dl
+	movb	%dl, 20(%rax)
+	movb	21(%rcx), %dl
+	movb	%dl, 21(%rax)
+	movb	22(%rcx), %dl
+	movb	%dl, 22(%rax)
+	movb	23(%rcx), %dl
+	movb	%dl, 23(%rax)
+	movb	24(%rcx), %dl
+	movb	%dl, 24(%rax)
+	movb	25(%rcx), %dl
+	movb	%dl, 25(%rax)
+	movb	26(%rcx), %dl
+	movb	%dl, 26(%rax)
+	movb	27(%rcx), %dl
+	movb	%dl, 27(%rax)
+	movb	28(%rcx), %dl
+	movb	%dl, 28(%rax)
+	movb	29(%rcx), %dl
+	movb	%dl, 29(%rax)
+	movb	30(%rcx), %dl
+	movb	%dl, 30(%rax)
+	movb	31(%rcx), %dl
+	movb	%dl, 31(%rax)
+	movb	32(%rcx), %dl
+	movb	%dl, 32(%rax)
+	movb	33(%rcx), %dl
+	movb	%dl, 33(%rax)
+	movb	34(%rcx), %dl
+	movb	%dl, 34(%rax)
+	movb	35(%rcx), %dl
+	movb	%dl, 35(%rax)
+	movb	36(%rcx), %dl
+	movb	%dl, 36(%rax)
+	movb	37(%rcx), %dl
+	movb	%dl, 37(%rax)
+	movb	38(%rcx), %dl
+	movb	%dl, 38(%rax)
+	movb	39(%rcx), %dl
+	movb	%dl, 39(%rax)
+	movb	40(%rcx), %dl
+	movb	%dl, 40(%rax)
+	movb	41(%rcx), %dl
+	movb	%dl, 41(%rax)
+	movb	42(%rcx), %dl
+	movb	%dl, 42(%rax)
+	movb	43(%rcx), %dl
+	movb	%dl, 43(%rax)
+	movb	44(%rcx), %dl
+	movb	%dl, 44(%rax)
+	movb	45(%rcx), %dl
+	movb	%dl, 45(%rax)
+	movb	46(%rcx), %dl
+	movb	%dl, 46(%rax)
+	movb	47(%rcx), %dl
+	movb	%dl, 47(%rax)
+	movb	48(%rcx), %dl
+	movb	%dl, 48(%rax)
+	movb	49(%rcx), %dl
+	movb	%dl, 49(%rax)
+	movb	50(%rcx), %dl
+	movb	%dl, 50(%rax)
+	movb	51(%rcx), %dl
+	movb	%dl, 51(%rax)
+	movb	52(%rcx), %dl
+	movb	%dl, 52(%rax)
+	movb	53(%rcx), %dl
+	movb	%dl, 53(%rax)
+	movb	54(%rcx), %dl
+	movb	%dl, 54(%rax)
+	movb	55(%rcx), %dl
+	movb	%dl, 55(%rax)
+	movb	56(%rcx), %dl
+	movb	%dl, 56(%rax)
+	movb	57(%rcx), %dl
+	movb	%dl, 57(%rax)
+	movb	58(%rcx), %dl
+	movb	%dl, 58(%rax)
+	movb	59(%rcx), %dl
+	movb	%dl, 59(%rax)
+	movb	60(%rcx), %dl
+	movb	%dl, 60(%rax)
+	movb	61(%rcx), %dl
+	movb	%dl, 61(%rax)
+	movb	62(%rcx), %dl
+	movb	%dl, 62(%rax)
+	movb	63(%rcx), %cl
+	movb	%cl, 63(%rax)
+	ret
+L_shake256_128_33$1:
+	movq	%rcx, 8(%rsp)
+	leaq	16(%rsp), %rcx
+	xorq	%rsi, %rsi
+	movq	%rsi, (%rcx)
+	movq	%rsi, 8(%rcx)
+	movq	%rsi, 16(%rcx)
+	movq	%rsi, 24(%rcx)
+	movq	%rsi, 32(%rcx)
+	movq	%rsi, 40(%rcx)
+	movq	%rsi, 48(%rcx)
+	movq	%rsi, 56(%rcx)
+	movq	%rsi, 64(%rcx)
+	movq	%rsi, 72(%rcx)
+	movq	%rsi, 80(%rcx)
+	movq	%rsi, 88(%rcx)
+	movq	%rsi, 96(%rcx)
+	movq	%rsi, 104(%rcx)
+	movq	%rsi, 112(%rcx)
+	movq	%rsi, 120(%rcx)
+	movq	%rsi, 128(%rcx)
+	movq	%rsi, 136(%rcx)
+	movq	%rsi, 144(%rcx)
+	movq	%rsi, 152(%rcx)
+	movq	%rsi, 160(%rcx)
+	movq	%rsi, 168(%rcx)
+	movq	%rsi, 176(%rcx)
+	movq	%rsi, 184(%rcx)
+	movq	%rsi, 192(%rcx)
+	movb	(%rdx), %sil
+	xorb	%sil, (%rcx)
+	movb	1(%rdx), %sil
+	xorb	%sil, 1(%rcx)
+	movb	2(%rdx), %sil
+	xorb	%sil, 2(%rcx)
+	movb	3(%rdx), %sil
+	xorb	%sil, 3(%rcx)
+	movb	4(%rdx), %sil
+	xorb	%sil, 4(%rcx)
+	movb	5(%rdx), %sil
+	xorb	%sil, 5(%rcx)
+	movb	6(%rdx), %sil
+	xorb	%sil, 6(%rcx)
+	movb	7(%rdx), %sil
+	xorb	%sil, 7(%rcx)
+	movb	8(%rdx), %sil
+	xorb	%sil, 8(%rcx)
+	movb	9(%rdx), %sil
+	xorb	%sil, 9(%rcx)
+	movb	10(%rdx), %sil
+	xorb	%sil, 10(%rcx)
+	movb	11(%rdx), %sil
+	xorb	%sil, 11(%rcx)
+	movb	12(%rdx), %sil
+	xorb	%sil, 12(%rcx)
+	movb	13(%rdx), %sil
+	xorb	%sil, 13(%rcx)
+	movb	14(%rdx), %sil
+	xorb	%sil, 14(%rcx)
+	movb	15(%rdx), %sil
+	xorb	%sil, 15(%rcx)
+	movb	16(%rdx), %sil
+	xorb	%sil, 16(%rcx)
+	movb	17(%rdx), %sil
+	xorb	%sil, 17(%rcx)
+	movb	18(%rdx), %sil
+	xorb	%sil, 18(%rcx)
+	movb	19(%rdx), %sil
+	xorb	%sil, 19(%rcx)
+	movb	20(%rdx), %sil
+	xorb	%sil, 20(%rcx)
+	movb	21(%rdx), %sil
+	xorb	%sil, 21(%rcx)
+	movb	22(%rdx), %sil
+	xorb	%sil, 22(%rcx)
+	movb	23(%rdx), %sil
+	xorb	%sil, 23(%rcx)
+	movb	24(%rdx), %sil
+	xorb	%sil, 24(%rcx)
+	movb	25(%rdx), %sil
+	xorb	%sil, 25(%rcx)
+	movb	26(%rdx), %sil
+	xorb	%sil, 26(%rcx)
+	movb	27(%rdx), %sil
+	xorb	%sil, 27(%rcx)
+	movb	28(%rdx), %sil
+	xorb	%sil, 28(%rcx)
+	movb	29(%rdx), %sil
+	xorb	%sil, 29(%rcx)
+	movb	30(%rdx), %sil
+	xorb	%sil, 30(%rcx)
+	movb	31(%rdx), %sil
+	xorb	%sil, 31(%rcx)
+	movb	32(%rdx), %dl
+	xorb	%dl, 32(%rcx)
+	xorb	$31, 33(%rcx)
+	xorb	$-128, 135(%rcx)
+	leaq	-216(%rsp), %rsp
+	call	L_keccakf1600_ref1$1
+L_shake256_128_33$2:
+	leaq	216(%rsp), %rsp
+	movq	8(%rsp), %rdx
+	movb	(%rcx), %sil
+	movb	%sil, (%rdx)
+	movb	1(%rcx), %sil
+	movb	%sil, 1(%rdx)
+	movb	2(%rcx), %sil
+	movb	%sil, 2(%rdx)
+	movb	3(%rcx), %sil
+	movb	%sil, 3(%rdx)
+	movb	4(%rcx), %sil
+	movb	%sil, 4(%rdx)
+	movb	5(%rcx), %sil
+	movb	%sil, 5(%rdx)
+	movb	6(%rcx), %sil
+	movb	%sil, 6(%rdx)
+	movb	7(%rcx), %sil
+	movb	%sil, 7(%rdx)
+	movb	8(%rcx), %sil
+	movb	%sil, 8(%rdx)
+	movb	9(%rcx), %sil
+	movb	%sil, 9(%rdx)
+	movb	10(%rcx), %sil
+	movb	%sil, 10(%rdx)
+	movb	11(%rcx), %sil
+	movb	%sil, 11(%rdx)
+	movb	12(%rcx), %sil
+	movb	%sil, 12(%rdx)
+	movb	13(%rcx), %sil
+	movb	%sil, 13(%rdx)
+	movb	14(%rcx), %sil
+	movb	%sil, 14(%rdx)
+	movb	15(%rcx), %sil
+	movb	%sil, 15(%rdx)
+	movb	16(%rcx), %sil
+	movb	%sil, 16(%rdx)
+	movb	17(%rcx), %sil
+	movb	%sil, 17(%rdx)
+	movb	18(%rcx), %sil
+	movb	%sil, 18(%rdx)
+	movb	19(%rcx), %sil
+	movb	%sil, 19(%rdx)
+	movb	20(%rcx), %sil
+	movb	%sil, 20(%rdx)
+	movb	21(%rcx), %sil
+	movb	%sil, 21(%rdx)
+	movb	22(%rcx), %sil
+	movb	%sil, 22(%rdx)
+	movb	23(%rcx), %sil
+	movb	%sil, 23(%rdx)
+	movb	24(%rcx), %sil
+	movb	%sil, 24(%rdx)
+	movb	25(%rcx), %sil
+	movb	%sil, 25(%rdx)
+	movb	26(%rcx), %sil
+	movb	%sil, 26(%rdx)
+	movb	27(%rcx), %sil
+	movb	%sil, 27(%rdx)
+	movb	28(%rcx), %sil
+	movb	%sil, 28(%rdx)
+	movb	29(%rcx), %sil
+	movb	%sil, 29(%rdx)
+	movb	30(%rcx), %sil
+	movb	%sil, 30(%rdx)
+	movb	31(%rcx), %sil
+	movb	%sil, 31(%rdx)
+	movb	32(%rcx), %sil
+	movb	%sil, 32(%rdx)
+	movb	33(%rcx), %sil
+	movb	%sil, 33(%rdx)
+	movb	34(%rcx), %sil
+	movb	%sil, 34(%rdx)
+	movb	35(%rcx), %sil
+	movb	%sil, 35(%rdx)
+	movb	36(%rcx), %sil
+	movb	%sil, 36(%rdx)
+	movb	37(%rcx), %sil
+	movb	%sil, 37(%rdx)
+	movb	38(%rcx), %sil
+	movb	%sil, 38(%rdx)
+	movb	39(%rcx), %sil
+	movb	%sil, 39(%rdx)
+	movb	40(%rcx), %sil
+	movb	%sil, 40(%rdx)
+	movb	41(%rcx), %sil
+	movb	%sil, 41(%rdx)
+	movb	42(%rcx), %sil
+	movb	%sil, 42(%rdx)
+	movb	43(%rcx), %sil
+	movb	%sil, 43(%rdx)
+	movb	44(%rcx), %sil
+	movb	%sil, 44(%rdx)
+	movb	45(%rcx), %sil
+	movb	%sil, 45(%rdx)
+	movb	46(%rcx), %sil
+	movb	%sil, 46(%rdx)
+	movb	47(%rcx), %sil
+	movb	%sil, 47(%rdx)
+	movb	48(%rcx), %sil
+	movb	%sil, 48(%rdx)
+	movb	49(%rcx), %sil
+	movb	%sil, 49(%rdx)
+	movb	50(%rcx), %sil
+	movb	%sil, 50(%rdx)
+	movb	51(%rcx), %sil
+	movb	%sil, 51(%rdx)
+	movb	52(%rcx), %sil
+	movb	%sil, 52(%rdx)
+	movb	53(%rcx), %sil
+	movb	%sil, 53(%rdx)
+	movb	54(%rcx), %sil
+	movb	%sil, 54(%rdx)
+	movb	55(%rcx), %sil
+	movb	%sil, 55(%rdx)
+	movb	56(%rcx), %sil
+	movb	%sil, 56(%rdx)
+	movb	57(%rcx), %sil
+	movb	%sil, 57(%rdx)
+	movb	58(%rcx), %sil
+	movb	%sil, 58(%rdx)
+	movb	59(%rcx), %sil
+	movb	%sil, 59(%rdx)
+	movb	60(%rcx), %sil
+	movb	%sil, 60(%rdx)
+	movb	61(%rcx), %sil
+	movb	%sil, 61(%rdx)
+	movb	62(%rcx), %sil
+	movb	%sil, 62(%rdx)
+	movb	63(%rcx), %sil
+	movb	%sil, 63(%rdx)
+	movb	64(%rcx), %sil
+	movb	%sil, 64(%rdx)
+	movb	65(%rcx), %sil
+	movb	%sil, 65(%rdx)
+	movb	66(%rcx), %sil
+	movb	%sil, 66(%rdx)
+	movb	67(%rcx), %sil
+	movb	%sil, 67(%rdx)
+	movb	68(%rcx), %sil
+	movb	%sil, 68(%rdx)
+	movb	69(%rcx), %sil
+	movb	%sil, 69(%rdx)
+	movb	70(%rcx), %sil
+	movb	%sil, 70(%rdx)
+	movb	71(%rcx), %sil
+	movb	%sil, 71(%rdx)
+	movb	72(%rcx), %sil
+	movb	%sil, 72(%rdx)
+	movb	73(%rcx), %sil
+	movb	%sil, 73(%rdx)
+	movb	74(%rcx), %sil
+	movb	%sil, 74(%rdx)
+	movb	75(%rcx), %sil
+	movb	%sil, 75(%rdx)
+	movb	76(%rcx), %sil
+	movb	%sil, 76(%rdx)
+	movb	77(%rcx), %sil
+	movb	%sil, 77(%rdx)
+	movb	78(%rcx), %sil
+	movb	%sil, 78(%rdx)
+	movb	79(%rcx), %sil
+	movb	%sil, 79(%rdx)
+	movb	80(%rcx), %sil
+	movb	%sil, 80(%rdx)
+	movb	81(%rcx), %sil
+	movb	%sil, 81(%rdx)
+	movb	82(%rcx), %sil
+	movb	%sil, 82(%rdx)
+	movb	83(%rcx), %sil
+	movb	%sil, 83(%rdx)
+	movb	84(%rcx), %sil
+	movb	%sil, 84(%rdx)
+	movb	85(%rcx), %sil
+	movb	%sil, 85(%rdx)
+	movb	86(%rcx), %sil
+	movb	%sil, 86(%rdx)
+	movb	87(%rcx), %sil
+	movb	%sil, 87(%rdx)
+	movb	88(%rcx), %sil
+	movb	%sil, 88(%rdx)
+	movb	89(%rcx), %sil
+	movb	%sil, 89(%rdx)
+	movb	90(%rcx), %sil
+	movb	%sil, 90(%rdx)
+	movb	91(%rcx), %sil
+	movb	%sil, 91(%rdx)
+	movb	92(%rcx), %sil
+	movb	%sil, 92(%rdx)
+	movb	93(%rcx), %sil
+	movb	%sil, 93(%rdx)
+	movb	94(%rcx), %sil
+	movb	%sil, 94(%rdx)
+	movb	95(%rcx), %sil
+	movb	%sil, 95(%rdx)
+	movb	96(%rcx), %sil
+	movb	%sil, 96(%rdx)
+	movb	97(%rcx), %sil
+	movb	%sil, 97(%rdx)
+	movb	98(%rcx), %sil
+	movb	%sil, 98(%rdx)
+	movb	99(%rcx), %sil
+	movb	%sil, 99(%rdx)
+	movb	100(%rcx), %sil
+	movb	%sil, 100(%rdx)
+	movb	101(%rcx), %sil
+	movb	%sil, 101(%rdx)
+	movb	102(%rcx), %sil
+	movb	%sil, 102(%rdx)
+	movb	103(%rcx), %sil
+	movb	%sil, 103(%rdx)
+	movb	104(%rcx), %sil
+	movb	%sil, 104(%rdx)
+	movb	105(%rcx), %sil
+	movb	%sil, 105(%rdx)
+	movb	106(%rcx), %sil
+	movb	%sil, 106(%rdx)
+	movb	107(%rcx), %sil
+	movb	%sil, 107(%rdx)
+	movb	108(%rcx), %sil
+	movb	%sil, 108(%rdx)
+	movb	109(%rcx), %sil
+	movb	%sil, 109(%rdx)
+	movb	110(%rcx), %sil
+	movb	%sil, 110(%rdx)
+	movb	111(%rcx), %sil
+	movb	%sil, 111(%rdx)
+	movb	112(%rcx), %sil
+	movb	%sil, 112(%rdx)
+	movb	113(%rcx), %sil
+	movb	%sil, 113(%rdx)
+	movb	114(%rcx), %sil
+	movb	%sil, 114(%rdx)
+	movb	115(%rcx), %sil
+	movb	%sil, 115(%rdx)
+	movb	116(%rcx), %sil
+	movb	%sil, 116(%rdx)
+	movb	117(%rcx), %sil
+	movb	%sil, 117(%rdx)
+	movb	118(%rcx), %sil
+	movb	%sil, 118(%rdx)
+	movb	119(%rcx), %sil
+	movb	%sil, 119(%rdx)
+	movb	120(%rcx), %sil
+	movb	%sil, 120(%rdx)
+	movb	121(%rcx), %sil
+	movb	%sil, 121(%rdx)
+	movb	122(%rcx), %sil
+	movb	%sil, 122(%rdx)
+	movb	123(%rcx), %sil
+	movb	%sil, 123(%rdx)
+	movb	124(%rcx), %sil
+	movb	%sil, 124(%rdx)
+	movb	125(%rcx), %sil
+	movb	%sil, 125(%rdx)
+	movb	126(%rcx), %sil
+	movb	%sil, 126(%rdx)
+	movb	127(%rcx), %cl
+	movb	%cl, 127(%rdx)
+	ret
+L_keccakf1600_ref1$1:
+	leaq	glob_data + 0(%rip), %rdx
+	movq	%rdx, 8(%rsp)
+	leaq	24(%rsp), %rdx
+	movq	$0, %rsi
+	jmp 	L_keccakf1600_ref1$2
+L_keccakf1600_ref1$3:
+	movq	8(%rsp), %rdi
+	movq	(%rdi,%rsi,8), %rdi
+	movq	%rdi, 16(%rsp)
+	movq	(%rcx), %r11
+	movq	8(%rcx), %r10
+	movq	16(%rcx), %rbx
+	movq	24(%rcx), %rbp
+	movq	32(%rcx), %r12
+	xorq	40(%rcx), %r11
+	xorq	48(%rcx), %r10
+	xorq	56(%rcx), %rbx
+	xorq	64(%rcx), %rbp
+	xorq	72(%rcx), %r12
+	xorq	80(%rcx), %r11
+	xorq	88(%rcx), %r10
+	xorq	96(%rcx), %rbx
+	xorq	104(%rcx), %rbp
+	xorq	112(%rcx), %r12
+	xorq	120(%rcx), %r11
+	xorq	128(%rcx), %r10
+	xorq	136(%rcx), %rbx
+	xorq	144(%rcx), %rbp
+	xorq	152(%rcx), %r12
+	xorq	160(%rcx), %r11
+	xorq	168(%rcx), %r10
+	xorq	176(%rcx), %rbx
+	xorq	184(%rcx), %rbp
+	xorq	192(%rcx), %r12
+	movq	%r10, %rdi
+	rolq	$1, %rdi
+	xorq	%r12, %rdi
+	movq	%rbx, %r8
+	rolq	$1, %r8
+	xorq	%r11, %r8
+	movq	%rbp, %r9
+	rolq	$1, %r9
+	xorq	%r10, %r9
+	movq	%r12, %r10
+	rolq	$1, %r10
+	xorq	%rbx, %r10
+	rolq	$1, %r11
+	xorq	%rbp, %r11
+	movq	(%rcx), %rbx
+	xorq	%rdi, %rbx
+	movq	48(%rcx), %rbp
+	xorq	%r8, %rbp
+	rolq	$44, %rbp
+	movq	96(%rcx), %r12
+	xorq	%r9, %r12
+	rolq	$43, %r12
+	movq	144(%rcx), %r13
+	xorq	%r10, %r13
+	rolq	$21, %r13
+	movq	192(%rcx), %r14
+	xorq	%r11, %r14
+	rolq	$14, %r14
+	movq	%rbp, %r15
+	notq	%r15
+	andq	%r12, %r15
+	xorq	%rbx, %r15
+	xorq	16(%rsp), %r15
+	movq	%r15, (%rdx)
+	movq	%r12, %r15
+	notq	%r15
+	andq	%r13, %r15
+	xorq	%rbp, %r15
+	movq	%r15, 8(%rdx)
+	movq	%r13, %r15
+	notq	%r15
+	andq	%r14, %r15
+	xorq	%r12, %r15
+	movq	%r15, 16(%rdx)
+	movq	%r14, %r12
+	notq	%r12
+	andq	%rbx, %r12
+	xorq	%r13, %r12
+	movq	%r12, 24(%rdx)
+	notq	%rbx
+	andq	%rbp, %rbx
+	xorq	%r14, %rbx
+	movq	%rbx, 32(%rdx)
+	movq	24(%rcx), %rbx
+	xorq	%r10, %rbx
+	rolq	$28, %rbx
+	movq	72(%rcx), %rbp
+	xorq	%r11, %rbp
+	rolq	$20, %rbp
+	movq	80(%rcx), %r12
+	xorq	%rdi, %r12
+	rolq	$3, %r12
+	movq	128(%rcx), %r13
+	xorq	%r8, %r13
+	rolq	$45, %r13
+	movq	176(%rcx), %r14
+	xorq	%r9, %r14
+	rolq	$61, %r14
+	movq	%rbp, %r15
+	notq	%r15
+	andq	%r12, %r15
+	xorq	%rbx, %r15
+	movq	%r15, 40(%rdx)
+	movq	%r12, %r15
+	notq	%r15
+	andq	%r13, %r15
+	xorq	%rbp, %r15
+	movq	%r15, 48(%rdx)
+	movq	%r13, %r15
+	notq	%r15
+	andq	%r14, %r15
+	xorq	%r12, %r15
+	movq	%r15, 56(%rdx)
+	movq	%r14, %r12
+	notq	%r12
+	andq	%rbx, %r12
+	xorq	%r13, %r12
+	movq	%r12, 64(%rdx)
+	notq	%rbx
+	andq	%rbp, %rbx
+	xorq	%r14, %rbx
+	movq	%rbx, 72(%rdx)
+	movq	8(%rcx), %rbx
+	xorq	%r8, %rbx
+	rolq	$1, %rbx
+	movq	56(%rcx), %rbp
+	xorq	%r9, %rbp
+	rolq	$6, %rbp
+	movq	104(%rcx), %r12
+	xorq	%r10, %r12
+	rolq	$25, %r12
+	movq	152(%rcx), %r13
+	xorq	%r11, %r13
+	rolq	$8, %r13
+	movq	160(%rcx), %r14
+	xorq	%rdi, %r14
+	rolq	$18, %r14
+	movq	%rbp, %r15
+	notq	%r15
+	andq	%r12, %r15
+	xorq	%rbx, %r15
+	movq	%r15, 80(%rdx)
+	movq	%r12, %r15
+	notq	%r15
+	andq	%r13, %r15
+	xorq	%rbp, %r15
+	movq	%r15, 88(%rdx)
+	movq	%r13, %r15
+	notq	%r15
+	andq	%r14, %r15
+	xorq	%r12, %r15
+	movq	%r15, 96(%rdx)
+	movq	%r14, %r12
+	notq	%r12
+	andq	%rbx, %r12
+	xorq	%r13, %r12
+	movq	%r12, 104(%rdx)
+	notq	%rbx
+	andq	%rbp, %rbx
+	xorq	%r14, %rbx
+	movq	%rbx, 112(%rdx)
+	movq	32(%rcx), %rbx
+	xorq	%r11, %rbx
+	rolq	$27, %rbx
+	movq	40(%rcx), %rbp
+	xorq	%rdi, %rbp
+	rolq	$36, %rbp
+	movq	88(%rcx), %r12
+	xorq	%r8, %r12
+	rolq	$10, %r12
+	movq	136(%rcx), %r13
+	xorq	%r9, %r13
+	rolq	$15, %r13
+	movq	184(%rcx), %r14
+	xorq	%r10, %r14
+	rolq	$56, %r14
+	movq	%rbp, %r15
+	notq	%r15
+	andq	%r12, %r15
+	xorq	%rbx, %r15
+	movq	%r15, 120(%rdx)
+	movq	%r12, %r15
+	notq	%r15
+	andq	%r13, %r15
+	xorq	%rbp, %r15
+	movq	%r15, 128(%rdx)
+	movq	%r13, %r15
+	notq	%r15
+	andq	%r14, %r15
+	xorq	%r12, %r15
+	movq	%r15, 136(%rdx)
+	movq	%r14, %r12
+	notq	%r12
+	andq	%rbx, %r12
+	xorq	%r13, %r12
+	movq	%r12, 144(%rdx)
+	notq	%rbx
+	andq	%rbp, %rbx
+	xorq	%r14, %rbx
+	movq	%rbx, 152(%rdx)
+	movq	16(%rcx), %rbx
+	xorq	%r9, %rbx
+	rolq	$62, %rbx
+	movq	64(%rcx), %r9
+	xorq	%r10, %r9
+	rolq	$55, %r9
+	movq	112(%rcx), %r10
+	xorq	%r11, %r10
+	rolq	$39, %r10
+	movq	120(%rcx), %r11
+	xorq	%rdi, %r11
+	rolq	$41, %r11
+	movq	168(%rcx), %rdi
+	xorq	%r8, %rdi
+	rolq	$2, %rdi
+	movq	%r9, %r8
+	notq	%r8
+	andq	%r10, %r8
+	xorq	%rbx, %r8
+	movq	%r8, 160(%rdx)
+	movq	%r10, %r8
+	notq	%r8
+	andq	%r11, %r8
+	xorq	%r9, %r8
+	movq	%r8, 168(%rdx)
+	movq	%r11, %r8
+	notq	%r8
+	andq	%rdi, %r8
+	xorq	%r10, %r8
+	movq	%r8, 176(%rdx)
+	movq	%rdi, %r8
+	notq	%r8
+	andq	%rbx, %r8
+	xorq	%r11, %r8
+	movq	%r8, 184(%rdx)
+	notq	%rbx
+	andq	%r9, %rbx
+	xorq	%rdi, %rbx
+	movq	%rbx, 192(%rdx)
+	movq	8(%rsp), %rdi
+	movq	8(%rdi,%rsi,8), %rdi
+	movq	%rdi, 16(%rsp)
+	movq	(%rdx), %r11
+	movq	8(%rdx), %r10
+	movq	16(%rdx), %rbx
+	movq	24(%rdx), %rbp
+	movq	32(%rdx), %r12
+	xorq	40(%rdx), %r11
+	xorq	48(%rdx), %r10
+	xorq	56(%rdx), %rbx
+	xorq	64(%rdx), %rbp
+	xorq	72(%rdx), %r12
+	xorq	80(%rdx), %r11
+	xorq	88(%rdx), %r10
+	xorq	96(%rdx), %rbx
+	xorq	104(%rdx), %rbp
+	xorq	112(%rdx), %r12
+	xorq	120(%rdx), %r11
+	xorq	128(%rdx), %r10
+	xorq	136(%rdx), %rbx
+	xorq	144(%rdx), %rbp
+	xorq	152(%rdx), %r12
+	xorq	160(%rdx), %r11
+	xorq	168(%rdx), %r10
+	xorq	176(%rdx), %rbx
+	xorq	184(%rdx), %rbp
+	xorq	192(%rdx), %r12
+	movq	%r10, %rdi
+	rolq	$1, %rdi
+	xorq	%r12, %rdi
+	movq	%rbx, %r8
+	rolq	$1, %r8
+	xorq	%r11, %r8
+	movq	%rbp, %r9
+	rolq	$1, %r9
+	xorq	%r10, %r9
+	movq	%r12, %r10
+	rolq	$1, %r10
+	xorq	%rbx, %r10
+	rolq	$1, %r11
+	xorq	%rbp, %r11
+	movq	(%rdx), %rbx
+	xorq	%rdi, %rbx
+	movq	48(%rdx), %rbp
+	xorq	%r8, %rbp
+	rolq	$44, %rbp
+	movq	96(%rdx), %r12
+	xorq	%r9, %r12
+	rolq	$43, %r12
+	movq	144(%rdx), %r13
+	xorq	%r10, %r13
+	rolq	$21, %r13
+	movq	192(%rdx), %r14
+	xorq	%r11, %r14
+	rolq	$14, %r14
+	movq	%rbp, %r15
+	notq	%r15
+	andq	%r12, %r15
+	xorq	%rbx, %r15
+	xorq	16(%rsp), %r15
+	movq	%r15, (%rcx)
+	movq	%r12, %r15
+	notq	%r15
+	andq	%r13, %r15
+	xorq	%rbp, %r15
+	movq	%r15, 8(%rcx)
+	movq	%r13, %r15
+	notq	%r15
+	andq	%r14, %r15
+	xorq	%r12, %r15
+	movq	%r15, 16(%rcx)
+	movq	%r14, %r12
+	notq	%r12
+	andq	%rbx, %r12
+	xorq	%r13, %r12
+	movq	%r12, 24(%rcx)
+	notq	%rbx
+	andq	%rbp, %rbx
+	xorq	%r14, %rbx
+	movq	%rbx, 32(%rcx)
+	movq	24(%rdx), %rbx
+	xorq	%r10, %rbx
+	rolq	$28, %rbx
+	movq	72(%rdx), %rbp
+	xorq	%r11, %rbp
+	rolq	$20, %rbp
+	movq	80(%rdx), %r12
+	xorq	%rdi, %r12
+	rolq	$3, %r12
+	movq	128(%rdx), %r13
+	xorq	%r8, %r13
+	rolq	$45, %r13
+	movq	176(%rdx), %r14
+	xorq	%r9, %r14
+	rolq	$61, %r14
+	movq	%rbp, %r15
+	notq	%r15
+	andq	%r12, %r15
+	xorq	%rbx, %r15
+	movq	%r15, 40(%rcx)
+	movq	%r12, %r15
+	notq	%r15
+	andq	%r13, %r15
+	xorq	%rbp, %r15
+	movq	%r15, 48(%rcx)
+	movq	%r13, %r15
+	notq	%r15
+	andq	%r14, %r15
+	xorq	%r12, %r15
+	movq	%r15, 56(%rcx)
+	movq	%r14, %r12
+	notq	%r12
+	andq	%rbx, %r12
+	xorq	%r13, %r12
+	movq	%r12, 64(%rcx)
+	notq	%rbx
+	andq	%rbp, %rbx
+	xorq	%r14, %rbx
+	movq	%rbx, 72(%rcx)
+	movq	8(%rdx), %rbx
+	xorq	%r8, %rbx
+	rolq	$1, %rbx
+	movq	56(%rdx), %rbp
+	xorq	%r9, %rbp
+	rolq	$6, %rbp
+	movq	104(%rdx), %r12
+	xorq	%r10, %r12
+	rolq	$25, %r12
+	movq	152(%rdx), %r13
+	xorq	%r11, %r13
+	rolq	$8, %r13
+	movq	160(%rdx), %r14
+	xorq	%rdi, %r14
+	rolq	$18, %r14
+	movq	%rbp, %r15
+	notq	%r15
+	andq	%r12, %r15
+	xorq	%rbx, %r15
+	movq	%r15, 80(%rcx)
+	movq	%r12, %r15
+	notq	%r15
+	andq	%r13, %r15
+	xorq	%rbp, %r15
+	movq	%r15, 88(%rcx)
+	movq	%r13, %r15
+	notq	%r15
+	andq	%r14, %r15
+	xorq	%r12, %r15
+	movq	%r15, 96(%rcx)
+	movq	%r14, %r12
+	notq	%r12
+	andq	%rbx, %r12
+	xorq	%r13, %r12
+	movq	%r12, 104(%rcx)
+	notq	%rbx
+	andq	%rbp, %rbx
+	xorq	%r14, %rbx
+	movq	%rbx, 112(%rcx)
+	movq	32(%rdx), %rbx
+	xorq	%r11, %rbx
+	rolq	$27, %rbx
+	movq	40(%rdx), %rbp
+	xorq	%rdi, %rbp
+	rolq	$36, %rbp
+	movq	88(%rdx), %r12
+	xorq	%r8, %r12
+	rolq	$10, %r12
+	movq	136(%rdx), %r13
+	xorq	%r9, %r13
+	rolq	$15, %r13
+	movq	184(%rdx), %r14
+	xorq	%r10, %r14
+	rolq	$56, %r14
+	movq	%rbp, %r15
+	notq	%r15
+	andq	%r12, %r15
+	xorq	%rbx, %r15
+	movq	%r15, 120(%rcx)
+	movq	%r12, %r15
+	notq	%r15
+	andq	%r13, %r15
+	xorq	%rbp, %r15
+	movq	%r15, 128(%rcx)
+	movq	%r13, %r15
+	notq	%r15
+	andq	%r14, %r15
+	xorq	%r12, %r15
+	movq	%r15, 136(%rcx)
+	movq	%r14, %r12
+	notq	%r12
+	andq	%rbx, %r12
+	xorq	%r13, %r12
+	movq	%r12, 144(%rcx)
+	notq	%rbx
+	andq	%rbp, %rbx
+	xorq	%r14, %rbx
+	movq	%rbx, 152(%rcx)
+	movq	16(%rdx), %rbx
+	xorq	%r9, %rbx
+	rolq	$62, %rbx
+	movq	64(%rdx), %r9
+	xorq	%r10, %r9
+	rolq	$55, %r9
+	movq	112(%rdx), %r10
+	xorq	%r11, %r10
+	rolq	$39, %r10
+	movq	120(%rdx), %r11
+	xorq	%rdi, %r11
+	rolq	$41, %r11
+	movq	168(%rdx), %rdi
+	xorq	%r8, %rdi
+	rolq	$2, %rdi
+	movq	%r9, %r8
+	notq	%r8
+	andq	%r10, %r8
+	xorq	%rbx, %r8
+	movq	%r8, 160(%rcx)
+	movq	%r10, %r8
+	notq	%r8
+	andq	%r11, %r8
+	xorq	%r9, %r8
+	movq	%r8, 168(%rcx)
+	movq	%r11, %r8
+	notq	%r8
+	andq	%rdi, %r8
+	xorq	%r10, %r8
+	movq	%r8, 176(%rcx)
+	movq	%rdi, %r8
+	notq	%r8
+	andq	%rbx, %r8
+	xorq	%r11, %r8
+	movq	%r8, 184(%rcx)
+	notq	%rbx
+	andq	%r9, %rbx
+	xorq	%rdi, %rbx
+	movq	%rbx, 192(%rcx)
+	addq	$2, %rsi
+L_keccakf1600_ref1$2:
+	cmpq	$23, %rsi
+	jb  	L_keccakf1600_ref1$3
+	ret
+	.data
+	.p2align	5
+_glob_data:
+glob_data:
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -126
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -118
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -118
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -120
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 9
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -117
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -119
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 3
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 2
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 10
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 10
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -127
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -128
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 1
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte 8
+      .byte -128
+      .byte 0
+      .byte -128
+      .byte 0
+      .byte 0
+      .byte 0
+      .byte -128
+      .byte -91
+      .byte 6
+      .byte 15
+      .byte 7
+      .byte -76
+      .byte 5
+      .byte 67
+      .byte 9
+      .byte 34
+      .byte 9
+      .byte 29
+      .byte 9
+      .byte 52
+      .byte 1
+      .byte 108
+      .byte 0
+      .byte 35
+      .byte 11
+      .byte 102
+      .byte 3
+      .byte 86
+      .byte 3
+      .byte -26
+      .byte 5
+      .byte -25
+      .byte 9
+      .byte -2
+      .byte 4
+      .byte -6
+      .byte 5
+      .byte -95
+      .byte 4
+      .byte 123
+      .byte 6
+      .byte -93
+      .byte 4
+      .byte 37
+      .byte 12
+      .byte 106
+      .byte 3
+      .byte 55
+      .byte 5
+      .byte 63
+      .byte 8
+      .byte -120
+      .byte 0
+      .byte -65
+      .byte 4
+      .byte -127
+      .byte 11
+      .byte -71
+      .byte 5
+      .byte 5
+      .byte 5
+      .byte -41
+      .byte 7
+      .byte -97
+      .byte 10
+      .byte -90
+      .byte 10
+      .byte -72
+      .byte 8
+      .byte -48
+      .byte 9
+      .byte 75
+      .byte 0
+      .byte -100
+      .byte 0
+      .byte -72
+      .byte 11
+      .byte 95
+      .byte 11
+      .byte -92
+      .byte 11
+      .byte 104
+      .byte 3
+      .byte 125
+      .byte 10
+      .byte 54
+      .byte 6
+      .byte -94
+      .byte 8
+      .byte 90
+      .byte 2
+      .byte 54
+      .byte 7
+      .byte 9
+      .byte 3
+      .byte -109
+      .byte 0
+      .byte 122
+      .byte 8
+      .byte -9
+      .byte 9
+      .byte -10
+      .byte 0
+      .byte -116
+      .byte 6
+      .byte -37
+      .byte 6
+      .byte -52
+      .byte 1
+      .byte 35
+      .byte 1
+      .byte -21
+      .byte 0
+      .byte 80
+      .byte 12
+      .byte -74
+      .byte 10
+      .byte 91
+      .byte 11
+      .byte -104
+      .byte 12
+      .byte -13
+      .byte 6
+      .byte -102
+      .byte 9
+      .byte -29
+      .byte 4
+      .byte -74
+      .byte 9
+      .byte -42
+      .byte 10
+      .byte 83
+      .byte 11
+      .byte 79
+      .byte 4
+      .byte -5
+      .byte 4
+      .byte 92
+      .byte 10
+      .byte 41
+      .byte 4
+      .byte 65
+      .byte 11
+      .byte -43
+      .byte 2
+      .byte -28
+      .byte 5
+      .byte 64
+      .byte 9
+      .byte -114
+      .byte 1
+      .byte -73
+      .byte 3
+      .byte -9
+      .byte 0
+      .byte -115
+      .byte 5
+      .byte -106
+      .byte 12
+      .byte -61
+      .byte 9
+      .byte 15
+      .byte 1
+      .byte 90
+      .byte 0
+      .byte 85
+      .byte 3
+      .byte 68
+      .byte 7
+      .byte -125
+      .byte 12
+      .byte -118
+      .byte 4
+      .byte 82
+      .byte 6
+      .byte -102
+      .byte 2
+      .byte 64
+      .byte 1
+      .byte 8
+      .byte 0
+      .byte -3
+      .byte 10
+      .byte 8
+      .byte 6
+      .byte 26
+      .byte 1
+      .byte 46
+      .byte 7
+      .byte 13
+      .byte 5
+      .byte 10
+      .byte 9
+      .byte 40
+      .byte 2
+      .byte 117
+      .byte 10
+      .byte 58
+      .byte 8
+      .byte 35
+      .byte 6
+      .byte -51
+      .byte 0
+      .byte 102
+      .byte 11
+      .byte 6
+      .byte 6
+      .byte -95
+      .byte 10
+      .byte 37
+      .byte 10
+      .byte 8
+      .byte 9
+      .byte -87
+      .byte 2
+      .byte -126
+      .byte 0
+      .byte 66
+      .byte 6
+      .byte 79
+      .byte 7
+      .byte 61
+      .byte 3
+      .byte -126
+      .byte 11
+      .byte -7
+      .byte 11
+      .byte 45
+      .byte 5
+      .byte -60
+      .byte 10
+      .byte 69
+      .byte 7
+      .byte -62
+      .byte 5
+      .byte -78
+      .byte 4
+      .byte 63
+      .byte 9
+      .byte 75
+      .byte 12
+      .byte -40
+      .byte 6
+      .byte -109
+      .byte 10
+      .byte -85
+      .byte 0
+      .byte 55
+      .byte 12
+      .byte -30
+      .byte 11
+      .byte 115
+      .byte 7
+      .byte 44
+      .byte 7
+      .byte -19
+      .byte 5
+      .byte 103
+      .byte 1
+      .byte -10
+      .byte 2
+      .byte -95
+      .byte 5
+      .byte -19
+      .byte 8
+      .byte 11
+      .byte 10
+      .byte -102
+      .byte 11
+      .byte 20
+      .byte 7
+      .byte -43
+      .byte 5
+      .byte -114
+      .byte 5
+      .byte 31
+      .byte 1
+      .byte -54
+      .byte 0
+      .byte 86
+      .byte 12
+      .byte 110
+      .byte 2
+      .byte 41
+      .byte 6
+      .byte -74
+      .byte 0
+      .byte -62
+      .byte 3
+      .byte 79
+      .byte 8
+      .byte 63
+      .byte 7
+      .byte -68
+      .byte 5
+      .byte 61
+      .byte 2
+      .byte -44
+      .byte 7
+      .byte 8
+      .byte 1
+      .byte 127
+      .byte 1
+      .byte -60
+      .byte 9
+      .byte -78
+      .byte 5
+      .byte -65
+      .byte 6
+      .byte 127
+      .byte 12
+      .byte 88
+      .byte 10
+      .byte -7
+      .byte 3
+      .byte -36
+      .byte 2
+      .byte 96
+      .byte 2
+      .byte -5
+      .byte 6
+      .byte -101
+      .byte 1
+      .byte 52
+      .byte 12
+      .byte -34
+      .byte 6
+      .byte -57
+      .byte 4
+      .byte -116
+      .byte 2
+      .byte -39
+      .byte 10
+      .byte -9
+      .byte 3
+      .byte -12
+      .byte 7
+      .byte -45
+      .byte 5
+      .byte -25
+      .byte 11
+      .byte -7
+      .byte 6
+      .byte 4
+      .byte 2
+      .byte -7
+      .byte 12
+      .byte -63
+      .byte 11
+      .byte 103
+      .byte 10
+      .byte -81
+      .byte 6
+      .byte 119
+      .byte 8
+      .byte 126
+      .byte 0
+      .byte -67
+      .byte 5
+      .byte -84
+      .byte 9
+      .byte -89
+      .byte 12
+      .byte -14
+      .byte 11
+      .byte 62
+      .byte 3
+      .byte 107
+      .byte 0
+      .byte 116
+      .byte 7
+      .byte 10
+      .byte 12
+      .byte 74
+      .byte 9
+      .byte 115
+      .byte 11
+      .byte -63
+      .byte 3
+      .byte 29
+      .byte 7
+      .byte 44
+      .byte 10
+      .byte -64
+      .byte 1
+      .byte -40
+      .byte 8
+      .byte -91
+      .byte 2
+      .byte 6
+      .byte 8
+      .byte -78
+      .byte 8
+      .byte -82
+      .byte 1
+      .byte 43
+      .byte 2
+      .byte 75
+      .byte 3
+      .byte 30
+      .byte 8
+      .byte 103
+      .byte 3
+      .byte 14
+      .byte 6
+      .byte 105
+      .byte 0
+      .byte -90
+      .byte 1
+      .byte 75
+      .byte 2
+      .byte -79
+      .byte 0
+      .byte 22
+      .byte 12
+      .byte -34
+      .byte 11
+      .byte 53
+      .byte 11
+      .byte 38
+      .byte 6
+      .byte 117
+      .byte 6
+      .byte 11
+      .byte 12
+      .byte 10
+      .byte 3
+      .byte -121
+      .byte 4
+      .byte 110
+      .byte 12
+      .byte -8
+      .byte 9
+      .byte -53
+      .byte 5
+      .byte -89
+      .byte 10
+      .byte 95
+      .byte 4
+      .byte -53
+      .byte 6
+      .byte -124
+      .byte 2
+      .byte -103
+      .byte 9
+      .byte 93
+      .byte 1
+      .byte -94
+      .byte 1
+      .byte 73
+      .byte 1
+      .byte 101
+      .byte 12
+      .byte -74
+      .byte 12
+      .byte 49
+      .byte 3
+      .byte 73
+      .byte 4
+      .byte 91
+      .byte 2
+      .byte 98
+      .byte 2
+      .byte 42
+      .byte 5
+      .byte -4
+      .byte 7
+      .byte 72
+      .byte 7
+      .byte -128
+      .byte 1
+      .byte 66
+      .byte 8
+      .byte 121
+      .byte 12
+      .byte -62
+      .byte 4
+      .byte -54
+      .byte 7
+      .byte -105
+      .byte 9
+      .byte -36
+      .byte 0
+      .byte 94
+      .byte 8
+      .byte -122
+      .byte 6
+      .byte 96
+      .byte 8
+      .byte 7
+      .byte 7
+      .byte 3
+      .byte 8
+      .byte 26
+      .byte 3
+      .byte 27
+      .byte 7
+      .byte -85
+      .byte 9
+      .byte -101
+      .byte 9
+      .byte -34
+      .byte 1
+      .byte -107
+      .byte 12
+      .byte -51
+      .byte 11
+      .byte -28
+      .byte 3
+      .byte -33
+      .byte 3
+      .byte -66
+      .byte 3
+      .byte 77
+      .byte 7
+      .byte -14
+      .byte 5
+      .byte 92
+      .byte 6
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/params.jinc b/src/kem/kyber/libjade_kyber768_amd64_ref/params.jinc
new file mode 100644
index 0000000000..fc02c70843
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/params.jinc
@@ -0,0 +1,21 @@
+// Note1: This file was imported from hakyber, to ensure that the parameters that are defined
+// accordingly to their usage in the correctness proof. An alternative version of this file exists
+// in crypto_kem/kyber/kyber768/common/params.jinc and these will be merged once hakyber avx2 is
+// integrated into libjade.
+
+param int KYBER_Q = 3329;
+param int KYBER_N = 256;
+param int KYBER_K = 3;
+param int KYBER_VECN =  KYBER_K * KYBER_N;
+
+param int KYBER_SYMBYTES = 32;
+param int KYBER_ETA = 2;
+param int KYBER_POLYBYTES = 384;
+param int KYBER_POLYVECBYTES = (KYBER_K * KYBER_POLYBYTES);
+param int KYBER_POLYCOMPRESSEDBYTES = 128;
+param int KYBER_POLYVECCOMPRESSEDBYTES = (KYBER_K * 320);
+param int KYBER_MSGBYTES = KYBER_SYMBYTES;
+param int KYBER_CT_LEN = KYBER_POLYVECCOMPRESSEDBYTES + KYBER_POLYCOMPRESSEDBYTES;
+param int KYBER_INDCPA_PUBLICKEYBYTES = KYBER_POLYVECBYTES + KYBER_SYMBYTES;
+param int KYBER_PUBLICKEYBYTES = KYBER_INDCPA_PUBLICKEYBYTES;
+param int KYBER_SSBYTES = 32;
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/poly.jinc b/src/kem/kyber/libjade_kyber768_amd64_ref/poly.jinc
new file mode 100644
index 0000000000..b36b903367
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/poly.jinc
@@ -0,0 +1,731 @@
+// Note1: the previous kyber768/amd64/ref libjade implementation used the generic version of this
+// file, defined in crypto_kem/kyber/common/amd64/ref/poly.jinc. This file was imported from
+// hakyber and the main differences are: 1) the usage of KYBER_INDCPA_MSGBYTES (this file does
+// not); 2) get_noise;
+
+// Note2: although the standard practice in libjade is to require files within the same folder as
+// `require "file"`, the following `require` statement does not follow that rule to make explicit
+// the fact that we are including a `params.jinc` file that is not under a `common` folder. Other
+// instances of such cases exist in this folder.
+
+// from Jade require "crypto_kem/kyber/kyber768/common/params.jinc" // TODO: when hakyber avx2
+from Jade require "crypto_kem/kyber/kyber768/amd64/ref/params.jinc"
+
+from Jade require "crypto_kem/kyber/common/amd64/ref/reduce.jinc"
+from Jade require "common/keccak/common/fips202_ref_DIRTY.jinc"
+from Jade require "crypto_kem/kyber/common/amd64/ref/zetas.jinc"
+
+fn _poly_add2(reg ptr u16[KYBER_N] rp bp) -> stack u16[KYBER_N]
+{
+  reg u16 a;
+  reg u16 b;
+  reg u16 r;
+  reg u64 i;
+
+  i = 0;
+
+  #bounded
+  while (i < KYBER_N) {
+    a = rp[(int)i];
+    b = bp[(int)i];
+    r = a + b;
+    rp[(int)i] = r;
+    i += 1;
+  }
+  return rp;
+}
+
+fn _poly_csubq(reg ptr u16[KYBER_N] rp) -> reg ptr u16[KYBER_N]
+{
+  reg u64 i;
+  reg u16 t;
+  reg u16 b;
+
+  i = 0;
+  #bounded
+  while (i < KYBER_N)
+  {
+    t = rp[(int)i];
+    t -= KYBER_Q;
+    b = t;
+    b >>s= 15;
+    b &= KYBER_Q;
+    t += b;
+    rp[(int)i] = t;
+    i += 1;
+  }
+  return rp;
+}
+
+fn _poly_basemul(reg ptr u16[KYBER_N] rp, reg const ptr u16[KYBER_N] ap bp) -> reg ptr u16[KYBER_N]
+{
+  reg u64 offset;
+  reg u16 zeta;
+  reg u16 r0;
+  reg u16 r1;
+  reg u16 a0;
+  reg u16 a1;
+  reg u16 b0;
+  reg u16 b1;
+  reg u16 t;
+  reg ptr u16[128] zetasp;
+  reg u64 zetasctr;
+  reg u64 i;
+
+  stack ptr u16[KYBER_N] srp;
+
+  srp = rp;
+
+  zetasctr = 64;
+  i = 0;
+
+  #bounded
+  while(i < KYBER_N)
+  {
+    zetasp = jzetas;
+    zeta = zetasp[(int)zetasctr];
+    zetasctr += 1;
+    
+    a0 = ap[(int)i];
+    b0 = bp[(int)i];
+    i += 1;
+    a1 = ap[(int)i];
+    b1 = bp[(int)i];
+    i -= 1;
+
+    r0 = __fqmul(a1, b1);
+    r0 = __fqmul(r0, zeta);
+    t  = __fqmul(a0, b0);
+    r0 += t;
+
+    r1 = __fqmul(a0, b1);
+    t  = __fqmul(a1, b0);
+    r1 += t;
+
+    rp = srp;
+    rp[(int)i]   = r0;
+    i += 1;
+    rp[(int)i] = r1;
+    srp = rp;
+
+
+    zeta = -zeta;
+
+    i += 1;
+    a0 = ap[(int)i];
+    b0 = bp[(int)i];
+    i += 1;
+    a1 = ap[(int)i];
+    b1 = bp[(int)i];
+    i -= 1;
+
+    r0 = __fqmul(a1, b1);
+    r0 = __fqmul(r0, zeta);
+    t  = __fqmul(a0, b0);
+    r0 += t;
+
+    r1 = __fqmul(a0, b1);
+    t  = __fqmul(a1, b0);
+    r1 += t;
+
+    rp = srp;
+    rp[(int)i]   = r0;
+    i += 1;
+    rp[(int)i] = r1;
+    srp = rp;
+    
+    i += 1;
+  }
+  return rp;
+}
+
+inline
+fn __poly_reduce(reg ptr u16[KYBER_N] rp) -> reg ptr u16[KYBER_N]
+{
+  reg u64 j; 
+  reg u16 t;
+  j = 0;
+  #bounded
+  while (j < KYBER_N) 
+  {
+    t = rp[(int)j];
+    t = __barrett_reduce(t);
+    rp[(int)j] = t;
+    j += 1;
+  }
+  return rp;
+}
+
+fn _poly_compress(reg u64 rp, reg ptr u16[KYBER_N] a) -> reg ptr u16[KYBER_N]
+{
+  reg u16 t;
+  reg u32 d0, d1;
+  reg u64 i j;
+
+  a = _poly_csubq(a);
+
+  i = 0;
+  j = 0;
+  #bounded
+  while(i < 128)
+  {
+    t  = a[(int)j];
+    d0 = (32u)t;
+    d0 <<= 4;
+    d0 += 1665;
+    d0 *= 80635;
+    d0 >>= 28;
+    d0 &= 0xf;
+    j += 1;
+    t  = a[(int)j];
+    d1 = (32u)t;
+    d1 <<= 4;
+    d1 += 1665;
+    d1 *= 80635;
+    d1 >>= 28;
+    d1 &= 0xf;
+    d1 <<= 4;
+    d0 |= d1;
+    (u8)[rp+i] = d0;
+    i += 1;
+    j += 1;
+  }
+  return a;
+}
+
+fn _i_poly_compress(reg ptr u8[KYBER_POLYCOMPRESSEDBYTES] rp, reg ptr u16[KYBER_N] a) -> reg ptr u8[KYBER_POLYCOMPRESSEDBYTES], reg ptr u16[KYBER_N]
+{
+  reg u16 t;
+  reg u32 d0, d1;
+  reg u64 i j;
+
+  a = _poly_csubq(a);
+
+  i = 0;
+  j = 0;
+  #bounded
+  while(i < 128)
+  {
+    t  = a[(int)j];
+    d0 = (32u)t;
+    d0 <<= 4;
+    d0 += 1665;
+    d0 *= 80635;
+    d0 >>= 28;
+    d0 &= 0xf;
+    j += 1;
+    t  = a[(int)j];
+    d1 = (32u)t;
+    d1 <<= 4;
+    d1 += 1665;
+    d1 *= 80635;
+    d1 >>= 28;
+    d1 &= 0xf;
+    d1 <<= 4;
+    d0 |= d1;
+    rp[(int) i] = d0;
+    i += 1;
+    j += 1;
+  }
+  return rp, a;
+}
+
+
+fn _poly_decompress(reg ptr u16[KYBER_N] rp, reg u64 ap) -> stack u16[KYBER_N]
+{
+  reg u8 t;
+  reg u16 d0, d1;
+  reg u64 i j;
+
+  i = 0;
+  j = 0;
+
+  #bounded
+  while (i < 128) {
+    t  = (u8)[ap+i];
+    d0 = (16u)t;
+    d1 = (16u)t;
+    d0 &= 0xf;
+    d1 >>= 4;
+    d0 *= KYBER_Q;
+    d1 *= KYBER_Q;
+    d0 += 8;
+    d1 += 8;
+    d0 >>= 4;
+    d1 >>= 4;
+    rp[(int)j] = d0;
+    j += 1;
+    rp[(int)j] = d1;
+    j += 1;
+    i += 1;
+  }
+  return rp;
+}
+
+fn _poly_frombytes(reg ptr u16[KYBER_N] rp, reg u64 ap) -> reg ptr u16[KYBER_N]
+{
+  reg u8 c0, c1, c2;
+  reg u16 d0, d1, t;
+  inline int i;
+
+  for i = 0 to KYBER_N/2
+  {
+    c0 = (u8)[ap+3*i];
+    c1 = (u8)[ap+3*i+1];
+    c2 = (u8)[ap+3*i+2];
+    d0 = (16u)c0;
+    t  = (16u)c1;
+    t &= 0xf;
+    t <<= 8;
+    d0 |= t;
+    d1 = (16u)c2;
+    d1 <<= 4;
+    t  = (16u)c1;
+    t >>= 4;
+    d1 |= t;
+    rp[2*i]   = d0;
+    rp[2*i+1] = d1;
+  }
+  return rp;
+}
+
+param int DMONT   = 1353;      /* (1ULL << 32) % KYBER_Q */
+
+fn _poly_frommont(reg ptr u16[KYBER_N] rp) -> reg ptr u16[KYBER_N]
+{
+  reg u64 i;
+  reg u16 r;
+  reg u16 dmont;
+
+  dmont = DMONT;
+  
+  i = 0;
+  #bounded
+  while (i < KYBER_N)
+  {
+    r = rp[(int)i];
+    r = __fqmul(r, dmont);
+    rp[(int)i] = r;
+    i += 1;
+  }
+  return rp; 
+}
+
+fn _poly_frommsg(reg ptr u16[KYBER_N] rp, reg u64 ap) -> stack u16[KYBER_N]
+{
+  reg u8 c;
+  reg u16 t;
+  inline int i;
+  inline int j;
+
+  for i = 0 to 32
+  {
+    c = (u8)[ap + i];
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+1] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+2] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+3] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+4] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+5] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+6] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+7] = t;
+    c >>= 1;
+  }
+  return rp;
+}
+
+
+fn _i_poly_frommsg(reg ptr u16[KYBER_N] rp, reg ptr u8[32] ap) -> stack u16[KYBER_N]
+{
+  reg u8 c;
+  reg u16 t;
+  inline int i;
+  inline int j;
+
+  for i = 0 to 32
+  {
+    c = ap[i];
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+1] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+2] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+3] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+4] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+5] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+6] = t;
+    c >>= 1;
+
+    t = (16u)c; 
+    t &= 1;
+    t *= (KYBER_Q+1)/2;
+    rp[8*i+7] = t;
+    c >>= 1;
+  }
+  return rp;
+}
+
+#[returnaddress=stack]
+fn _poly_getnoise(reg ptr u16[KYBER_N] rp, reg ptr u8[KYBER_SYMBYTES] seed, reg u8 nonce) -> reg ptr u16[KYBER_N]
+{
+  stack u8[33] extseed;   /* 33 = KYBER_SYMBYTES +1 */
+  stack u8[128] buf;      /* 128 = KYBER_ETA*KYBER_N/4 */
+  reg u64 outlen;
+  reg u8 c,a,b;
+  reg u16 t;
+  reg u64 i j;
+  inline int k;
+
+  stack ptr u16[KYBER_N] srp;
+
+  srp = rp;
+  
+  for k = 0 to KYBER_SYMBYTES
+  {
+    c = seed[k];
+    extseed[k] = c;
+  }
+  extseed[KYBER_SYMBYTES] = nonce;
+
+  buf = _shake256_128_33(buf, extseed);
+
+  rp = srp;
+
+  i = 0;
+  j = 0;
+  #bounded
+  while (i < 128) {
+    c = buf[(int)i];
+    a = c;
+    a &= 0x55;
+
+    c >>= 1;
+    c &= 0x55;
+    c += a;
+
+    a = c;
+    a &= 0x3;
+    b = c;
+    b >>= 2;
+    b &= 0x3;
+    a -= b;
+    t = (16s)a;
+    rp[(int)j] = t;
+    a = c;
+    a >>= 4;
+    a &= 0x3;
+    b = c >> 6;
+    b &= 0x3;
+    a -= b;
+    t = (16s)a;
+    j += 1;
+    rp[(int)j] = t;
+    i += 1;
+    j += 1;
+  }
+  
+  return rp;
+}
+
+fn _poly_invntt(reg ptr u16[KYBER_N] rp) -> reg ptr u16[KYBER_N]
+{
+  reg u64 len;  
+  reg u64 start;
+  reg u64 j;
+  reg u64 cmp;
+  reg u64 offset;
+  
+  reg u16 zeta;
+  reg u16 t;
+  reg u16 s;
+  reg u16 m;
+
+  reg ptr u16[128] zetasp;
+  reg u64 zetasctr;
+
+  zetasp = jzetas_inv;
+  zetasctr = 0;
+
+  len = 2;
+  #bounded
+  while (len <= 128)
+  {
+    start = 0;
+    #bounded
+    while (start < 256)
+    {
+      zeta = zetasp[(int)zetasctr];
+      zetasctr += 1;
+
+      j = start;
+      cmp = #LEA(start + len); // avoid -lea
+      #bounded
+      while (j < cmp)
+      {
+        offset = #LEA(j + len); // avoid -lea
+        s = rp[(int)offset];
+        t = rp[(int)j];
+        m = s; m += t; // valgrind 16 bit lea not implemented
+        m = __barrett_reduce(m);
+        rp[(int)j] = m;
+        t -= s;
+        t = __fqmul(t, zeta);
+        rp[(int)offset] = t;
+        j += 1;
+      }
+      start = #LEA(j + len); // avoid -lea
+    }
+    len <<= 1;
+  }
+
+  zeta = zetasp[127];
+  j = 0;
+  #bounded
+  while (j < KYBER_N) 
+  {
+    t = rp[(int)j];
+    t = __fqmul(t, zeta);
+    rp[(int)j] = t;
+    j += 1;
+  }
+  return rp;
+}
+
+fn _poly_ntt(reg ptr u16[KYBER_N] rp) -> reg ptr u16[KYBER_N]
+{
+  reg u64 len;  
+  reg u64 start;
+  reg u64 j;
+  reg u64 cmp;
+  reg u64 offset;
+  
+  reg u16 zeta;
+  reg u16 t;
+  reg u16 s;
+  reg u16 m;
+
+  reg ptr u16[128] zetasp;
+  reg u64 zetasctr;
+
+  zetasp = jzetas;
+  zetasctr = 0;
+  len = 128;
+  #bounded
+  while (len >= 2)
+  {
+    start = 0;
+    #bounded
+    while (start < 256)
+    {
+      zetasctr += 1;
+      zeta = zetasp[(int)zetasctr];
+      j = start;
+      cmp = #LEA(start + len);
+      #bounded
+      while (j < cmp)
+      {
+        offset = #LEA(j + len);
+        t = rp[(int)offset];
+        t = __fqmul(t, zeta);
+        s = rp[(int)j];
+        m = s;
+        m -= t;
+        rp[(int)offset] = m;
+        t += s;
+        rp[(int)j] = t;
+        j += 1;
+      }
+      start = #LEA(j + len);
+    }
+    len >>= 1;
+  }
+
+  rp = __poly_reduce(rp);
+
+  return rp;
+}
+
+fn _poly_sub(reg ptr u16[KYBER_N] rp ap bp) -> reg ptr u16[KYBER_N]
+{
+  reg u16 a;
+  reg u16 b;
+  reg u16 r;
+  reg u64 i;
+
+  i = 0;
+  #bounded
+  while (i < KYBER_N) {
+    a = ap[(int)i];
+    b = bp[(int)i];
+    r = a - b;
+    rp[(int)i] = r;
+    i += 1;
+  }
+  return rp;
+}
+
+fn _poly_tobytes(reg u64 rp, reg ptr u16[KYBER_N] a) -> reg ptr u16[KYBER_N]
+{
+  reg u16 t0, t1, d;
+  reg u64 i j;
+
+  a = _poly_csubq(a);
+
+  i = 0;
+  j = 0;
+  #bounded
+  while (i < KYBER_N)
+  {
+    t0 = a[(int)i]; 
+    i += 1;
+    t1 = a[(int)i]; 
+    i += 1;
+    d  = t0;
+    d  &= 0xff;
+    (u8)[rp+j] = d;
+    j += 1;
+    t0 >>= 8;
+    d = t1;
+    d &= 0xf;
+    d <<= 4;
+    d |= t0;
+    (u8)[rp+j] = d;
+    j += 1;
+    t1 >>= 4;
+    (u8)[rp+j] = t1;
+    j += 1;
+  }
+  return a;
+}
+
+fn _poly_tomsg(reg u64 rp, reg ptr u16[KYBER_N] a) -> reg ptr u16[KYBER_N]
+{
+  reg u16 t;
+  reg u8 r;
+  reg u32 d;
+  inline int i j;
+
+  a = _poly_csubq(a); 
+
+  for i = 0 to 32
+  {
+    r = 0;
+    for j = 0 to 8
+    {
+      t = a[8*i+j]; 
+      d = (32u)t; 
+      d <<= 1;
+      d += 1665;
+      d *= 80635;
+      d >>= 28;
+      d &= 1;
+      d <<= j;
+      r  |= d;
+    }
+
+    (u8)[rp+i] = r;
+  }
+  return a;
+}
+
+fn _i_poly_tomsg(reg ptr u8[KYBER_N/8] rp, reg ptr u16[KYBER_N] a) -> reg ptr u8[KYBER_N/8], reg ptr u16[KYBER_N]
+{
+  reg u16 t;
+  reg u8 r;
+  reg u32 d;
+  inline int i j;
+
+  a = _poly_csubq(a); 
+
+  for i = 0 to 32
+  {
+    r = 0;
+    for j = 0 to 8
+    {
+      t = a[8*i+j]; 
+      d = (32u)t; 
+      d <<= 1;
+      d += 1665;
+      d *= 80635;
+      d >>= 28;
+      d &= 1;
+      d <<= j;
+      r  |= d;
+    }
+
+    rp[i] = r;
+  }
+
+  return rp, a;
+}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/polyvec.jinc b/src/kem/kyber/libjade_kyber768_amd64_ref/polyvec.jinc
new file mode 100644
index 0000000000..a9b3fec91c
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/polyvec.jinc
@@ -0,0 +1,285 @@
+require "poly.jinc"
+
+inline
+fn __polyvec_add2(stack u16[KYBER_VECN] r, stack u16[KYBER_VECN] b) -> stack u16[KYBER_VECN]
+{
+  r[0:KYBER_N] = _poly_add2(r[0:KYBER_N], b[0:KYBER_N]);
+  r[KYBER_N:KYBER_N] = _poly_add2(r[KYBER_N:KYBER_N], b[KYBER_N:KYBER_N]);
+  r[2*KYBER_N:KYBER_N] = _poly_add2(r[2*KYBER_N:KYBER_N], b[2*KYBER_N:KYBER_N]);
+
+  return r;
+}
+
+inline
+fn __polyvec_csubq(stack u16[KYBER_VECN] r) -> stack u16[KYBER_VECN]
+{
+  r[0:KYBER_N] = _poly_csubq(r[0:KYBER_N]);
+  r[KYBER_N:KYBER_N] = _poly_csubq(r[KYBER_N:KYBER_N]);
+  r[2*KYBER_N:KYBER_N] = _poly_csubq(r[2*KYBER_N:KYBER_N]);
+
+  return r;
+}
+
+inline
+fn __polyvec_compress(reg u64 rp, stack u16[KYBER_VECN] a)
+{
+  stack u16[KYBER_VECN] aa;
+  reg u16 c, b;
+  reg u16 d;
+  reg u64[4] t;
+  reg u64 i j;
+  inline int k;
+
+  i = 0;
+  j = 0;
+  
+  aa = __polyvec_csubq(a);
+
+  #bounded
+  while (i < KYBER_VECN)
+  {
+    for k = 0 to 4
+    {
+      t[k] = (64u)aa[(int) i];
+      i += 1;
+      t[k] <<= 10;
+      t[k] += 1665;
+      t[k] *= 1290167;
+      t[k] >>= 32;
+      t[k] &= 0x3ff;
+    }
+
+    c = t[0];
+    c &= 0xff;
+    (u8)[rp + j] = c;
+    j += 1;
+
+    b = t[0];
+    b >>= 8;
+    c = t[1];
+    c <<= 2;
+    c |= b;
+    (u8)[rp + j] = c;
+    j += 1;
+
+    b = t[1];
+    b >>= 6;
+    c = t[2];
+    c <<= 4;
+    c |= b;
+    (u8)[rp + j] = c;
+    j += 1;
+    
+    b = t[2];
+    b >>= 4;
+    c = t[3];
+    c <<= 6;
+    c |= b;
+    (u8)[rp + j] = c;
+    j += 1;
+
+    
+    t[3] >>= 2;
+    (u8)[rp + j] = t[3];
+    j += 1;
+  }
+}
+
+inline
+fn __i_polyvec_compress(reg ptr u8[KYBER_POLYVECCOMPRESSEDBYTES] rp, stack u16[KYBER_VECN] a) -> reg ptr u8[KYBER_POLYVECCOMPRESSEDBYTES]
+{
+  stack u16[KYBER_VECN] aa;
+  reg u16 c, b;
+  reg u16 d;
+  reg u64[4] t;
+  reg u64 i j;
+  inline int k;
+
+  i = 0;
+  j = 0;
+  
+  aa = __polyvec_csubq(a);
+
+  #bounded
+  while (i < KYBER_VECN)
+  {
+    for k = 0 to 4
+    {
+      t[k] = (64u)aa[(int) i];
+      i += 1;
+      t[k] <<= 10;
+      t[k] += 1665;
+      t[k] *= 1290167;
+      t[k] >>= 32;
+      t[k] &= 0x3ff;
+    }
+
+    c = t[0];
+    c &= 0xff;
+    rp[(int) j] = c;
+    j += 1;
+
+    b = t[0];
+    b >>= 8;
+    c = t[1];
+    c <<= 2;
+    c |= b;
+    rp[(int) j] = c;
+    j += 1;
+
+    b = t[1];
+    b >>= 6;
+    c = t[2];
+    c <<= 4;
+    c |= b;
+    rp[(int) j] = c;
+    j += 1;
+    
+    b = t[2];
+    b >>= 4;
+    c = t[3];
+    c <<= 6;
+    c |= b;
+    rp[(int) j] = c;
+    j += 1;
+
+    
+    t[3] >>= 2;
+    rp[(int) j] = t[3];
+    j += 1;
+  }
+
+  return rp;
+}
+
+inline
+fn __polyvec_decompress(reg u64 ap) -> stack u16[KYBER_VECN]
+{
+  stack u16[KYBER_VECN] r;
+  reg u32[5] t;
+  reg u32 d;
+  reg u64 i j;
+  inline int k;
+
+  i = 0;
+  j = 0;
+  
+  #bounded
+  while (i < KYBER_VECN)
+  {
+    for k = 0 to 5
+    {
+      t[k] = (32u)(u8)[ap + j];
+      j += 1;
+    }
+
+    d = t[1];
+    t[1] >>= 2;
+    d &= 0x3;
+    d <<= 8;
+    t[0] |= d;
+
+    d = t[2];
+    t[2] >>= 4;
+    d &= 0xf;
+    d <<= 6;
+    t[1] |= d;
+
+    d = t[3];
+    t[3] >>= 6;
+    d &= 0x3f;
+    d <<= 4;
+    t[2] |= d;
+
+    d = t[4];
+    d <<= 2;
+    t[3] |= d;
+    
+    for k = 0 to 4
+    {
+      t[k] *= KYBER_Q;
+      t[k] += 512;
+      t[k] >>= 10;
+      r[(int) i] = t[k];
+      i += 1;
+    }
+  }
+  return r;
+}
+
+inline
+fn __polyvec_frombytes(reg u64 ap) -> stack u16[KYBER_VECN]
+{
+  stack u16[KYBER_VECN] r;
+  reg u64 pp;
+
+  pp = ap;
+  r[0:KYBER_N] = _poly_frombytes(r[0:KYBER_N], pp);
+  pp += KYBER_POLYBYTES;
+  r[KYBER_N:KYBER_N] = _poly_frombytes(r[KYBER_N:KYBER_N], pp);
+  pp += KYBER_POLYBYTES;
+  r[2*KYBER_N:KYBER_N] = _poly_frombytes(r[2*KYBER_N:KYBER_N], pp);
+
+  return r;
+}
+
+inline
+fn __polyvec_invntt(stack u16[KYBER_VECN] r) -> stack u16[KYBER_VECN]
+{
+  r[0:KYBER_N] = _poly_invntt(r[0:KYBER_N]);
+  r[KYBER_N:KYBER_N] = _poly_invntt(r[KYBER_N:KYBER_N]);
+  r[2*KYBER_N:KYBER_N] = _poly_invntt(r[2*KYBER_N:KYBER_N]);
+
+  return r;
+}
+
+inline
+fn __polyvec_ntt(stack u16[KYBER_VECN] r) -> stack u16[KYBER_VECN]
+{
+  r[0:KYBER_N] = _poly_ntt(r[0:KYBER_N]);
+  r[KYBER_N:KYBER_N] = _poly_ntt(r[KYBER_N:KYBER_N]);
+  r[2*KYBER_N:KYBER_N] = _poly_ntt(r[2*KYBER_N:KYBER_N]);
+
+  return r;
+}
+
+
+inline
+fn __polyvec_pointwise_acc(stack u16[KYBER_VECN] a, stack u16[KYBER_VECN] b) -> stack u16[KYBER_N]
+{
+  stack u16[KYBER_N] t;
+  stack u16[KYBER_N] r;
+
+  r = _poly_basemul(r, a[0:KYBER_N], b[0:KYBER_N]);
+  t = _poly_basemul(t, a[KYBER_N:KYBER_N], b[KYBER_N:KYBER_N]);
+  r = _poly_add2(r, t);
+  t = _poly_basemul(t, a[2*KYBER_N:KYBER_N], b[2*KYBER_N:KYBER_N]);
+  r = _poly_add2(r, t);
+
+  r = __poly_reduce(r);
+
+  return r;
+}
+
+inline
+fn __polyvec_reduce(stack u16[KYBER_VECN] r) -> stack u16[KYBER_VECN]
+{
+  r[0:KYBER_N] = __poly_reduce(r[0:KYBER_N]);
+  r[KYBER_N:KYBER_N] = __poly_reduce(r[KYBER_N:KYBER_N]);
+  r[2*KYBER_N:KYBER_N] = __poly_reduce(r[2*KYBER_N:KYBER_N]);
+
+  return r;
+}
+
+inline
+fn __polyvec_tobytes(reg u64 rp, stack u16[KYBER_VECN] a)
+{
+  reg u64 pp;
+
+  pp = rp;
+  a[0:KYBER_N] = _poly_tobytes(pp, a[0:KYBER_N]);
+  pp += KYBER_POLYBYTES;
+  a[KYBER_N:KYBER_N] = _poly_tobytes(pp, a[KYBER_N:KYBER_N]);
+  pp += KYBER_POLYBYTES;
+  a[2*KYBER_N:KYBER_N] = _poly_tobytes(pp, a[2*KYBER_N:KYBER_N]);
+}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/verify.jinc b/src/kem/kyber/libjade_kyber768_amd64_ref/verify.jinc
new file mode 100644
index 0000000000..986916c88a
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/verify.jinc
@@ -0,0 +1,49 @@
+// Note1: KYBER_INDCPA_BYTES vs KYBER_CT_LEN
+
+// from Jade require "crypto_kem/kyber/kyber768/common/params.jinc" // TODO: when hakyber avx2
+from Jade require "crypto_kem/kyber/kyber768/amd64/ref/params.jinc"
+
+inline 
+fn __verify(reg u64 ctp, reg ptr u8[KYBER_CT_LEN] ctpc) -> reg u64
+{
+  reg u64 cnd t64;
+  reg u8 t1 t2;
+  inline int i;
+
+  cnd = 0;
+
+  for i=0 to KYBER_CT_LEN
+  {
+    t1 = ctpc.[i];
+    t2 = (u8)[ctp + i];
+    t1 ^= t2;
+    t64 = (64u)t1;
+    cnd |= t64;
+  }
+
+  cnd = -cnd;
+  cnd >>= 63;
+
+  return cnd;
+}
+
+inline
+fn __cmov(reg ptr u8[KYBER_SYMBYTES] dst, reg u64 src cnd) -> reg ptr u8[KYBER_SYMBYTES]
+{
+  reg u8 t1 t2 bcond;
+  inline int i;
+
+  cnd = -cnd;
+
+  for i=0 to KYBER_SYMBYTES
+  {
+    t1 = dst.[i];
+    t2 = (u8)[src + i];
+    t2 = t2 ^ t1;
+    t2 = t2 & cnd;
+    t1 ^= t2;
+    dst.[u8 i] = t1;
+  }
+
+  return dst;
+}

From 32b2f99281b4dd3516f2ca9e34627923c19b8a65 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 15:48:19 +0200
Subject: [PATCH 17/82] Update KEM family templates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../src/kem/family/kem_scheme.c               | 44 ++++++++++++++++---
 1 file changed, 38 insertions(+), 6 deletions(-)

diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
index bb027ab1e3..0cfce98626 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
@@ -116,17 +116,49 @@ extern int PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper
     {%- endfor %}
 
 {%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_START
-
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_END
+{% for scheme in schemes -%}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] in scheme['libjade_implementations'] %}
+#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] != scheme['default_implementation'] %}_{{ 'amd64_' + impl['name'] }}{%- endif %}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ 'amd64_' + impl['name'] }}){%- endif %}
+extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_keypair(uint8_t *pk, uint8_t *sk);
+extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
+extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
+#endif
+    {%- endfor %}
+{% endfor -%}
 {%- endif %}
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *public_key, uint8_t *secret_key) {
 {%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
 #if OQS_LIBJADE_BUILD
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_KEYPAIR_START
-
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_KEYPAIR_END
+{% for scheme in schemes -%}
+    {%- for impl in scheme['metadata']['implementations'] if (impl['name'] != scheme['default_implementation'] and impl['name'] in scheme['libjade_implementations']) %}
+        {%- if loop.first %}
+#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_amd64_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_amd64_{{ impl['name'] }}){%- endif %}
+        {%- else %}
+#elif defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_amd64_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_amd64_{{ impl['name'] }}){%- endif %}
+        {%- endif %}
+        {%- if 'required_flags' in impl and impl['required_flags'] %}
+#if defined(OQS_DIST_BUILD)
+	if ({%- for flag in impl['required_flags'] -%}OQS_CPU_has_extension(OQS_CPU_EXT_{{ flag|upper }}){%- if not loop.last %} && {% endif -%}{%- endfor -%}) {
+#endif /* OQS_DIST_BUILD */
+        {%- endif -%}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_keypair(public_key, secret_key);
+        {%- if 'required_flags' in impl and impl['required_flags'] %}
+#if defined(OQS_DIST_BUILD)
+	} else {
+        return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_keypair(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
+        {%- endif -%}
+    {%- endfor %}
+    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
+#else
+    {%- endif %}
+    return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_keypair(public_key, secret_key);
+    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
+#endif
+    {%- endif %}
+{% endfor -%}
 #else
 {%- endif %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}

From 71577e1f73a1033c0040b2c3fd5caede675e78a5 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 16:40:50 +0200
Subject: [PATCH 18/82] Update KEM templates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../src/kem/family/kem_scheme.c               | 15 ++++++--
 .../kem/family/kem_scheme_keypair.c.libjade   | 38 ++++++++-----------
 2 files changed, 26 insertions(+), 27 deletions(-)

diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
index 0cfce98626..9caf6eceb2 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
@@ -131,22 +131,26 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
 {%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
 #if OQS_LIBJADE_BUILD
 {% for scheme in schemes -%}
-    {%- for impl in scheme['metadata']['implementations'] if (impl['name'] != scheme['default_implementation'] and impl['name'] in scheme['libjade_implementations']) %}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
-#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_amd64_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_amd64_{{ impl['name'] }}){%- endif %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- else %}
-#elif defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_amd64_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_amd64_{{ impl['name'] }}){%- endif %}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
 	if ({%- for flag in impl['required_flags'] -%}OQS_CPU_has_extension(OQS_CPU_EXT_{{ flag|upper }}){%- if not loop.last %} && {% endif -%}{%- endfor -%}) {
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
+        {%- if impl['name'] in scheme['libjade_implementations'] %}
 	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_keypair(public_key, secret_key);
+        {%- else %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_keypair(public_key, secret_key);
+        {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
 	} else {
-        return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_keypair(public_key, secret_key);
+		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
@@ -192,6 +196,9 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif
     {%- endif %}
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
+#endif /* OQS_LIBJADE_BUILD */
+{%- endif %}
 }
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
index 6563c954b1..d7a84ccaa5 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
@@ -1,40 +1,32 @@
 {% for scheme in schemes -%}
-    {%- for impl in scheme['metadata']['implementations'] if impl['name'] == scheme['default_implementation'] %}
-
-        {%- if impl['signature_keypair'] %}
-           {%- set cleankeypair = scheme['metadata'].update({'default_keypair_signature': impl['signature_keypair']}) -%}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
+        {%- if loop.first %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- else %}
-           {%- set cleankeypair = scheme['metadata'].update({'default_keypair_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_keypair"}) -%}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- endif %}
-    {%- endfor %}
-    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
-    {%- if loop.first %}
-#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
-    {%- else %}
-#elif defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
-    {%- endif %}
-    {%- if 'required_flags' in impl and impl['required_flags'] %}
+        {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
 	if ({%- for flag in impl['required_flags'] -%}OQS_CPU_has_extension(OQS_CPU_EXT_{{ flag|upper }}){%- if not loop.last %} && {% endif -%}{%- endfor -%}) {
 #endif /* OQS_DIST_BUILD */
-    {%- endif -%}
-           {%- if impl['signature_keypair'] %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) {{ impl['signature_keypair'] }}(public_key, secret_key);
-           {%- else %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name'].replace('/', '_')|upper }}_crypto_kem_keypair(public_key, secret_key);
-           {%- endif %}
-    {%- if 'required_flags' in impl and impl['required_flags'] %}
+        {%- endif -%}
+        {%- if impl['name'] in scheme['libjade_implementations'] %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_keypair(public_key, secret_key);
+        {%- else %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_keypair(public_key, secret_key);
+        {%- endif %}
+        {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) {{ scheme['metadata']['default_keypair_signature'] }}(public_key, secret_key);
+		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-    {%- endif -%}
+        {%- endif -%}
     {%- endfor %}
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #else
     {%- endif %}
-	return (OQS_STATUS) {{ scheme['metadata']['default_keypair_signature'] }}(public_key, secret_key);
+    return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_keypair(public_key, secret_key);
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif
     {%- endif %}

From 87d39de02e3b6e96bc99164881300988d975a431 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 17:07:22 +0200
Subject: [PATCH 19/82] Update KEM templates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../src/kem/family/kem_scheme.c               | 93 ++++++++++++++++---
 .../kem/family/kem_scheme_keypair.c.libjade   |  8 +-
 2 files changed, 84 insertions(+), 17 deletions(-)

diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
index 9caf6eceb2..e8b996081e 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
@@ -117,20 +117,21 @@ extern int PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper
 
 {%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
 {% for scheme in schemes -%}
+
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] in scheme['libjade_implementations'] %}
 #if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] != scheme['default_implementation'] %}_{{ 'amd64_' + impl['name'] }}{%- endif %}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ 'amd64_' + impl['name'] }}){%- endif %}
 extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_keypair(uint8_t *pk, uint8_t *sk);
 extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
-    {%- endfor %}
+    {% endfor -%}
 {% endfor -%}
-{%- endif %}
+{% endif %}
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *public_key, uint8_t *secret_key) {
-{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] -%}
 #if OQS_LIBJADE_BUILD
-{% for scheme in schemes -%}
+{%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
 #if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
@@ -163,7 +164,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
 #endif
     {%- endif %}
 {% endfor -%}
-#else
+#else /*OQS_LIBJADE_BUILD*/
 {%- endif %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
@@ -202,12 +203,42 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
 }
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
-{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] -%}
 #if OQS_LIBJADE_BUILD
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_ENCAPS_START
-
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_ENCAPS_END
+{%- for scheme in schemes %}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
+        {%- if loop.first %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
+        {%- else %}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
+        {%- endif %}
+        {%- if 'required_flags' in impl and impl['required_flags'] %}
+#if defined(OQS_DIST_BUILD)
+	if ({%- for flag in impl['required_flags'] -%}OQS_CPU_has_extension(OQS_CPU_EXT_{{ flag|upper }}){%- if not loop.last %} && {% endif -%}{%- endfor -%}) {
+#endif /* OQS_DIST_BUILD */
+        {%- endif -%}
+        {%- if impl['name'] in scheme['libjade_implementations'] %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_enc(public_key, secret_key);
+        {%- else %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_enc(public_key, secret_key);
+        {%- endif %}
+        {%- if 'required_flags' in impl and impl['required_flags'] %}
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_enc(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
+        {%- endif -%}
+    {%- endfor %}
+    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #else
+    {%- endif %}
+    return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_enc(public_key, secret_key);
+    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
+#endif 
+    {%- endif %}
+{% endfor -%}
+#else /*OQS_LIBJADE_BUILD*/
 {%- endif %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
@@ -240,15 +271,48 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif
     {%- endif %}
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
+#endif /* OQS_LIBJADE_BUILD */
+{%- endif %}
 }
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
-{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] -%}
 #if OQS_LIBJADE_BUILD
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_START
-
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_END
+{%- for scheme in schemes %}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
+        {%- if loop.first %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
+        {%- else %}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
+        {%- endif %}
+        {%- if 'required_flags' in impl and impl['required_flags'] %}
+#if defined(OQS_DIST_BUILD)
+	if ({%- for flag in impl['required_flags'] -%}OQS_CPU_has_extension(OQS_CPU_EXT_{{ flag|upper }}){%- if not loop.last %} && {% endif -%}{%- endfor -%}) {
+#endif /* OQS_DIST_BUILD */
+        {%- endif -%}
+        {%- if impl['name'] in scheme['libjade_implementations'] %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_dec(public_key, secret_key);
+        {%- else %}
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_dec(public_key, secret_key);
+        {%- endif %}
+        {%- if 'required_flags' in impl and impl['required_flags'] %}
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_dec(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
+        {%- endif -%}
+    {%- endfor %}
+    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #else
+    {%- endif %}
+    return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_dec(public_key, secret_key);
+    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
+#endif
+    {%- endif %}
+{% endfor -%}
+#else /*OQS_LIBJADE_BUILD*/
 {%- endif %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
@@ -281,6 +345,9 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *s
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif
     {%- endif %}
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
+#endif /* OQS_LIBJADE_BUILD */
+{%- endif %}
 }
 
 #endif
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
index d7a84ccaa5..f43e3897cd 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
@@ -11,14 +11,14 @@
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
         {%- if impl['name'] in scheme['libjade_implementations'] %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_keypair(public_key, secret_key);
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_enc(public_key, secret_key);
         {%- else %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_keypair(public_key, secret_key);
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_enc(public_key, secret_key);
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_keypair(public_key, secret_key);
+		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_enc(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
@@ -26,7 +26,7 @@
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #else
     {%- endif %}
-    return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_keypair(public_key, secret_key);
+    return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_enc(public_key, secret_key);
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif
     {%- endif %}

From 0bd3be8a73e64abacd8bd39dd6fc5f5830245888 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 17:38:35 +0200
Subject: [PATCH 20/82] Update copy_from_upstream.yml with libjade
 implementation info

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/copy_from_upstream.yml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/scripts/copy_from_upstream/copy_from_upstream.yml b/scripts/copy_from_upstream/copy_from_upstream.yml
index 904a409914..cd6cccc856 100644
--- a/scripts/copy_from_upstream/copy_from_upstream.yml
+++ b/scripts/copy_from_upstream/copy_from_upstream.yml
@@ -131,11 +131,17 @@ kems:
         pqclean_scheme: kyber512
         pretty_name_full: Kyber512
         libjade_implementation: True
+        libjade_implementations:
+          - ref
+          - avx2
       -
         scheme: "768"
         pqclean_scheme: kyber768
         pretty_name_full: Kyber768
         libjade_implementation: True
+        libjade_implementations:
+          - ref
+          - avx2
       -
         scheme: "1024"
         pqclean_scheme: kyber1024

From a1450bf297204b94d394ea11ad0b1e8d2f2e19f8 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 17:39:31 +0200
Subject: [PATCH 21/82] Update KEM templates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/src/kem/family/CMakeLists.txt | 2 +-
 scripts/copy_from_upstream/src/kem/family/kem_scheme.c   | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt
index cb55d35bd0..13428e6045 100644
--- a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt
+++ b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt
@@ -65,7 +65,7 @@ endif()
     {%- endfor -%}
 {%- endfor %}
 
-{%- if libjade_implementation is defined %}
+{% if libjade_implementation is defined -%}
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_START
 
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_END
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
index e8b996081e..e607720839 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
@@ -129,7 +129,7 @@ extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_dec
 {% endif %}
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *public_key, uint8_t *secret_key) {
-{%- if libjade_implementation is defined and scheme['libjade_implementation'] -%}
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
 #if OQS_LIBJADE_BUILD
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
@@ -203,7 +203,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
 }
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
-{%- if libjade_implementation is defined and scheme['libjade_implementation'] -%}
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
 #if OQS_LIBJADE_BUILD
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
@@ -277,7 +277,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
 }
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
-{%- if libjade_implementation is defined and scheme['libjade_implementation'] -%}
+{%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
 #if OQS_LIBJADE_BUILD
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}

From 1bc0ff72a382eb3441df404ee81fc92f3639f261 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 17:52:39 +0200
Subject: [PATCH 22/82] Edit KEM templates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/src/kem/family/CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt
index 13428e6045..ca9d41eac0 100644
--- a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt
+++ b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt
@@ -69,7 +69,7 @@ endif()
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_START
 
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_END
-{%- endif %}
+{% endif -%}
 
 set({{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} PARENT_SCOPE)
 

From 06b1036be5f357bfe6f31109eae252a40c02932b Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 17:52:58 +0200
Subject: [PATCH 23/82] Run copy_from_upstream.py

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 src/kem/kyber/CMakeLists.txt  |  2 +-
 src/kem/kyber/kem_kyber_512.c | 88 +++++++++++++++++++++++++++++------
 src/kem/kyber/kem_kyber_768.c | 88 +++++++++++++++++++++++++++++------
 3 files changed, 149 insertions(+), 29 deletions(-)

diff --git a/src/kem/kyber/CMakeLists.txt b/src/kem/kyber/CMakeLists.txt
index 88fcc41ea7..08444ec4ec 100644
--- a/src/kem/kyber/CMakeLists.txt
+++ b/src/kem/kyber/CMakeLists.txt
@@ -88,6 +88,7 @@ if(OQS_ENABLE_KEM_kyber_1024_aarch64)
     endif()
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_1024_aarch64>)
 endif()
+
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_START
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_512)
@@ -120,5 +121,4 @@ if(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_amd64_avx2>)
 endif()
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_END
-
 set(KYBER_OBJS ${_KYBER_OBJS} PARENT_SCOPE)
diff --git a/src/kem/kyber/kem_kyber_512.c b/src/kem/kyber/kem_kyber_512.c
index a0090fb907..210c125fda 100644
--- a/src/kem/kyber/kem_kyber_512.c
+++ b/src/kem/kyber/kem_kyber_512.c
@@ -45,29 +45,46 @@ extern int PQCLEAN_KYBER512_AARCH64_crypto_kem_keypair(uint8_t *pk, uint8_t *sk)
 extern int PQCLEAN_KYBER512_AARCH64_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int PQCLEAN_KYBER512_AARCH64_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_START
-
 
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512)
 extern int libjade_kyber512_amd64_ref_keypair(uint8_t *pk, uint8_t *sk);
 extern int libjade_kyber512_amd64_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int libjade_kyber512_amd64_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
-
+    
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
 extern int libjade_kyber512_amd64_avx2_keypair(uint8_t *pk, uint8_t *sk);
 extern int libjade_kyber512_amd64_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int libjade_kyber512_amd64_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
-
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_END
+    
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_KEYPAIR_START
-
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_KEYPAIR_END
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
+#if defined(OQS_DIST_BUILD)
+	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
+#endif /* OQS_DIST_BUILD */
+		return (OQS_STATUS) libjade_kyber512_amd64_avx2_keypair(public_key, secret_key);
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_kyber512_amd64_ref_keypair(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
+#elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
+#if defined(OQS_DIST_BUILD)
+	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
+#endif /* OQS_DIST_BUILD */
+		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_keypair(public_key, secret_key);
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_kyber512_amd64_ref_keypair(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
 #else
+    return (OQS_STATUS) libjade_kyber512_amd64_ref_keypair(public_key, secret_key);
+#endif
+#else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -91,14 +108,35 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secre
 #else
 	return (OQS_STATUS) pqcrystals_kyber512_ref_keypair(public_key, secret_key);
 #endif
+#endif /* OQS_LIBJADE_BUILD */
 }
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
 #if OQS_LIBJADE_BUILD
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_ENCAPS_START
-
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_ENCAPS_END
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
+#if defined(OQS_DIST_BUILD)
+	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
+#endif /* OQS_DIST_BUILD */
+		return (OQS_STATUS) libjade_kyber512_amd64_avx2_enc(public_key, secret_key);
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_kyber512_amd64_ref_enc(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
+#elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
+#if defined(OQS_DIST_BUILD)
+	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
+#endif /* OQS_DIST_BUILD */
+		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_enc(public_key, secret_key);
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_kyber512_amd64_ref_enc(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
 #else
+    return (OQS_STATUS) libjade_kyber512_amd64_ref_enc(public_key, secret_key);
+#endif
+#else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -122,14 +160,35 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared
 #else
 	return (OQS_STATUS) pqcrystals_kyber512_ref_enc(ciphertext, shared_secret, public_key);
 #endif
+#endif /* OQS_LIBJADE_BUILD */
 }
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_START
-
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_END
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
+#if defined(OQS_DIST_BUILD)
+	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
+#endif /* OQS_DIST_BUILD */
+		return (OQS_STATUS) libjade_kyber512_amd64_avx2_dec(public_key, secret_key);
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_kyber512_amd64_ref_dec(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
+#elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
+#if defined(OQS_DIST_BUILD)
+	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
+#endif /* OQS_DIST_BUILD */
+		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_dec(public_key, secret_key);
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_kyber512_amd64_ref_dec(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
 #else
+    return (OQS_STATUS) libjade_kyber512_amd64_ref_dec(public_key, secret_key);
+#endif
+#else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -153,6 +212,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_decaps(uint8_t *shared_secret, const uint8_
 #else
 	return (OQS_STATUS) pqcrystals_kyber512_ref_dec(shared_secret, ciphertext, secret_key);
 #endif
+#endif /* OQS_LIBJADE_BUILD */
 }
 
 #endif
diff --git a/src/kem/kyber/kem_kyber_768.c b/src/kem/kyber/kem_kyber_768.c
index 911340b603..c7a8820102 100644
--- a/src/kem/kyber/kem_kyber_768.c
+++ b/src/kem/kyber/kem_kyber_768.c
@@ -45,29 +45,46 @@ extern int PQCLEAN_KYBER768_AARCH64_crypto_kem_keypair(uint8_t *pk, uint8_t *sk)
 extern int PQCLEAN_KYBER768_AARCH64_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int PQCLEAN_KYBER768_AARCH64_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_START
-
 
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768)
 extern int libjade_kyber768_amd64_ref_keypair(uint8_t *pk, uint8_t *sk);
 extern int libjade_kyber768_amd64_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int libjade_kyber768_amd64_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
-
+    
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
 extern int libjade_kyber768_amd64_avx2_keypair(uint8_t *pk, uint8_t *sk);
 extern int libjade_kyber768_amd64_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int libjade_kyber768_amd64_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
-
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_END
+    
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_KEYPAIR_START
-
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_KEYPAIR_END
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
+#if defined(OQS_DIST_BUILD)
+	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
+#endif /* OQS_DIST_BUILD */
+		return (OQS_STATUS) libjade_kyber768_amd64_avx2_keypair(public_key, secret_key);
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_kyber768_amd64_ref_keypair(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
+#elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
+#if defined(OQS_DIST_BUILD)
+	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
+#endif /* OQS_DIST_BUILD */
+		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_keypair(public_key, secret_key);
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_kyber768_amd64_ref_keypair(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
 #else
+    return (OQS_STATUS) libjade_kyber768_amd64_ref_keypair(public_key, secret_key);
+#endif
+#else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -91,14 +108,35 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secre
 #else
 	return (OQS_STATUS) pqcrystals_kyber768_ref_keypair(public_key, secret_key);
 #endif
+#endif /* OQS_LIBJADE_BUILD */
 }
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
 #if OQS_LIBJADE_BUILD
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_ENCAPS_START
-
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_ENCAPS_END
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
+#if defined(OQS_DIST_BUILD)
+	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
+#endif /* OQS_DIST_BUILD */
+		return (OQS_STATUS) libjade_kyber768_amd64_avx2_enc(public_key, secret_key);
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_kyber768_amd64_ref_enc(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
+#elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
+#if defined(OQS_DIST_BUILD)
+	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
+#endif /* OQS_DIST_BUILD */
+		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_enc(public_key, secret_key);
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_kyber768_amd64_ref_enc(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
 #else
+    return (OQS_STATUS) libjade_kyber768_amd64_ref_enc(public_key, secret_key);
+#endif
+#else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -122,14 +160,35 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared
 #else
 	return (OQS_STATUS) pqcrystals_kyber768_ref_enc(ciphertext, shared_secret, public_key);
 #endif
+#endif /* OQS_LIBJADE_BUILD */
 }
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_START
-
-///// OQS_COPY_FROM_LIBJADE_FRAGMENT_KEM_SCHEME_DECAPS_END
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
+#if defined(OQS_DIST_BUILD)
+	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
+#endif /* OQS_DIST_BUILD */
+		return (OQS_STATUS) libjade_kyber768_amd64_avx2_dec(public_key, secret_key);
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_kyber768_amd64_ref_dec(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
+#elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
+#if defined(OQS_DIST_BUILD)
+	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
+#endif /* OQS_DIST_BUILD */
+		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_dec(public_key, secret_key);
+#if defined(OQS_DIST_BUILD)
+	} else {
+		return (OQS_STATUS) libjade_kyber768_amd64_ref_dec(public_key, secret_key);
+	}
+#endif /* OQS_DIST_BUILD */
 #else
+    return (OQS_STATUS) libjade_kyber768_amd64_ref_dec(public_key, secret_key);
+#endif
+#else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -153,6 +212,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_decaps(uint8_t *shared_secret, const uint8_
 #else
 	return (OQS_STATUS) pqcrystals_kyber768_ref_dec(shared_secret, ciphertext, secret_key);
 #endif
+#endif /* OQS_LIBJADE_BUILD */
 }
 
 #endif

From 36a1dcf9b09b952810e677a193e6a5226a9955bb Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 17:58:10 +0200
Subject: [PATCH 24/82] Update copy_from_upstream.py

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/copy_from_upstream.py | 12 ------------
 1 file changed, 12 deletions(-)

diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index 3f26196bbe..75f1f3195b 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -632,18 +632,6 @@ def process_families(instructions, basedir, with_kat, with_generator, with_libja
                 libjade=True
             )
 
-            for scheme in family['schemes']:
-                for template in instructions['templates'][family['type'] + '_scheme.c']:
-                    replacer_contextual(
-                        os.path.join(os.environ['LIBOQS_DIR'], 'src', family['type'], family['name'],
-                                    family['type'] + '_{}_{}.c'.format(family['name'], scheme['scheme_c'])),
-                        os.path.join('src', family['type'], 'family', template),
-                        '/////',
-                        family,
-                        scheme,
-                        libjade=True
-                    )
-
 
 def copy_from_upstream():
     for t in ["kem", "sig"]:

From 70fd60f760d10ae7425e06eecb01f9744b69d618 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 18:32:12 +0200
Subject: [PATCH 25/82] Fix KEM temlates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../src/kem/family/CMakeLists.txt.libjade              |  2 +-
 scripts/copy_from_upstream/src/kem/family/kem_scheme.c | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
index 0afa4610a6..c7eebc27d9 100644
--- a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
@@ -32,7 +32,7 @@ if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}{%- if 'alias_sch
 if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}_{{ impl['name'].replace('/', '_') }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}{%- endif %})
     add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} OBJECT {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
         {%- endif %}
-    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }})
+    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/include)
     target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
         {%- if impl['name'] != scheme['default_implementation'] and impl['required_flags'] -%}
            {%- set opts %}{% for flag in impl['required_flags'] %}{%- if flag != 'arm_neon' %} -m{%- if flag == 'bmi1' -%} bmi {% elif flag == 'sse4_1' -%} sse4.1 {% elif flag == 'pclmulqdq' -%} pclmul {% else -%}{{ flag }} {% endif %}{% endif -%}{% endfor %}{% endset %}
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
index e607720839..7bf734678c 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
@@ -118,13 +118,13 @@ extern int PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper
 {%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
 {% for scheme in schemes -%}
 
-    {%- for impl in scheme['metadata']['implementations'] if impl['name'] in scheme['libjade_implementations'] %}
+{%- for impl in scheme['metadata']['implementations'] if impl['name'] in scheme['libjade_implementations'] %}
 #if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] != scheme['default_implementation'] %}_{{ 'amd64_' + impl['name'] }}{%- endif %}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ 'amd64_' + impl['name'] }}){%- endif %}
 extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_keypair(uint8_t *pk, uint8_t *sk);
 extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
-    {% endfor -%}
+{% endfor -%}
 {% endfor -%}
 {% endif %}
 
@@ -159,7 +159,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #else
     {%- endif %}
-    return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_keypair(public_key, secret_key);
+	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_keypair(public_key, secret_key);
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif
     {%- endif %}
@@ -233,7 +233,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #else
     {%- endif %}
-    return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_enc(public_key, secret_key);
+	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_enc(public_key, secret_key);
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif 
     {%- endif %}
@@ -307,7 +307,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *s
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #else
     {%- endif %}
-    return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_dec(public_key, secret_key);
+	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_dec(public_key, secret_key);
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif
     {%- endif %}

From 421886aea2cc92a58425b3a5699ea00568fc7d73 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 18:33:11 +0200
Subject: [PATCH 26/82] Run copy_from_upstream.py

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 src/kem/kyber/CMakeLists.txt  |  8 ++++----
 src/kem/kyber/kem_kyber_512.c | 10 +++++-----
 src/kem/kyber/kem_kyber_768.c | 10 +++++-----
 3 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/kem/kyber/CMakeLists.txt b/src/kem/kyber/CMakeLists.txt
index 08444ec4ec..2c3edafa0a 100644
--- a/src/kem/kyber/CMakeLists.txt
+++ b/src/kem/kyber/CMakeLists.txt
@@ -93,14 +93,14 @@ endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_512)
     add_library(kyber_512_amd64_ref OBJECT kem_kyber_512.c libjade_kyber512_amd64_ref/api.c libjade_kyber512_amd64_ref/kem.s)
-    target_include_directories(kyber_512_amd64_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_amd64_ref)
+    target_include_directories(kyber_512_amd64_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_amd64_ref/include)
     target_include_directories(kyber_512_amd64_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_amd64_ref>)
 endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
     add_library(kyber_512_amd64_avx2 OBJECT libjade_kyber512_amd64_avx2/api.c libjade_kyber512_amd64_avx2/kem.s)
-    target_include_directories(kyber_512_amd64_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_amd64_avx2)
+    target_include_directories(kyber_512_amd64_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_amd64_avx2/include)
     target_include_directories(kyber_512_amd64_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     target_compile_options(kyber_512_amd64_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_amd64_avx2>)
@@ -108,14 +108,14 @@ endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_768)
     add_library(kyber_768_amd64_ref OBJECT kem_kyber_768.c libjade_kyber768_amd64_ref/api.c libjade_kyber768_amd64_ref/kem.s)
-    target_include_directories(kyber_768_amd64_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_amd64_ref)
+    target_include_directories(kyber_768_amd64_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_amd64_ref/include)
     target_include_directories(kyber_768_amd64_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_amd64_ref>)
 endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
     add_library(kyber_768_amd64_avx2 OBJECT libjade_kyber768_amd64_avx2/api.c libjade_kyber768_amd64_avx2/kem.s)
-    target_include_directories(kyber_768_amd64_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_amd64_avx2)
+    target_include_directories(kyber_768_amd64_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_amd64_avx2/include)
     target_include_directories(kyber_768_amd64_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     target_compile_options(kyber_768_amd64_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_amd64_avx2>)
diff --git a/src/kem/kyber/kem_kyber_512.c b/src/kem/kyber/kem_kyber_512.c
index 210c125fda..26dadaac38 100644
--- a/src/kem/kyber/kem_kyber_512.c
+++ b/src/kem/kyber/kem_kyber_512.c
@@ -51,13 +51,13 @@ extern int libjade_kyber512_amd64_ref_keypair(uint8_t *pk, uint8_t *sk);
 extern int libjade_kyber512_amd64_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int libjade_kyber512_amd64_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
-    
+
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
 extern int libjade_kyber512_amd64_avx2_keypair(uint8_t *pk, uint8_t *sk);
 extern int libjade_kyber512_amd64_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int libjade_kyber512_amd64_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
-    
+
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
@@ -82,7 +82,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secre
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-    return (OQS_STATUS) libjade_kyber512_amd64_ref_keypair(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber512_amd64_ref_keypair(public_key, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
@@ -134,7 +134,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-    return (OQS_STATUS) libjade_kyber512_amd64_ref_enc(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber512_amd64_ref_enc(public_key, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
@@ -186,7 +186,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_decaps(uint8_t *shared_secret, const uint8_
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-    return (OQS_STATUS) libjade_kyber512_amd64_ref_dec(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber512_amd64_ref_dec(public_key, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
diff --git a/src/kem/kyber/kem_kyber_768.c b/src/kem/kyber/kem_kyber_768.c
index c7a8820102..bf69a83d38 100644
--- a/src/kem/kyber/kem_kyber_768.c
+++ b/src/kem/kyber/kem_kyber_768.c
@@ -51,13 +51,13 @@ extern int libjade_kyber768_amd64_ref_keypair(uint8_t *pk, uint8_t *sk);
 extern int libjade_kyber768_amd64_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int libjade_kyber768_amd64_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
-    
+
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
 extern int libjade_kyber768_amd64_avx2_keypair(uint8_t *pk, uint8_t *sk);
 extern int libjade_kyber768_amd64_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
 extern int libjade_kyber768_amd64_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
-    
+
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
@@ -82,7 +82,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secre
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-    return (OQS_STATUS) libjade_kyber768_amd64_ref_keypair(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber768_amd64_ref_keypair(public_key, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
@@ -134,7 +134,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-    return (OQS_STATUS) libjade_kyber768_amd64_ref_enc(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber768_amd64_ref_enc(public_key, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
@@ -186,7 +186,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_decaps(uint8_t *shared_secret, const uint8_
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-    return (OQS_STATUS) libjade_kyber768_amd64_ref_dec(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber768_amd64_ref_dec(public_key, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)

From d5bc95604a3a204ba1cf18e083db18e0e09402ce Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 18:34:56 +0200
Subject: [PATCH 27/82] Add libjade_shim

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 src/common/CMakeLists.txt                      |  1 +
 src/common/libjade_shims/libjade_randombytes.c |  9 +++++++++
 src/common/libjade_shims/libjade_randombytes.h | 11 +++++++++++
 3 files changed, 21 insertions(+)
 create mode 100644 src/common/libjade_shims/libjade_randombytes.c
 create mode 100644 src/common/libjade_shims/libjade_randombytes.h

diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index 73b917e07c..f0bc12c933 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -78,6 +78,7 @@ add_library(common OBJECT ${AES_IMPL} aes/aes.c
                           common.c
                           pqclean_shims/fips202.c
                           pqclean_shims/fips202x4.c
+                          libjade_shims/libjade_randombytes.c
                           rand/rand.c)
 
 # Implementations of the internal API to be exposed to test programs
diff --git a/src/common/libjade_shims/libjade_randombytes.c b/src/common/libjade_shims/libjade_randombytes.c
new file mode 100644
index 0000000000..d2c9bb09b9
--- /dev/null
+++ b/src/common/libjade_shims/libjade_randombytes.c
@@ -0,0 +1,9 @@
+// SPDX-License-Identifier: MIT
+
+#include <oqs/rand.h>
+#include "libjade_randombytes.h"
+
+void __jasmin_syscall_randombytes__(uint8_t *_x, uint64_t xlen) {
+	OQS_randombytes(_x, xlen);
+	// return _x;
+}
diff --git a/src/common/libjade_shims/libjade_randombytes.h b/src/common/libjade_shims/libjade_randombytes.h
new file mode 100644
index 0000000000..45abb4ebf0
--- /dev/null
+++ b/src/common/libjade_shims/libjade_randombytes.h
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: MIT
+
+#ifndef LIBJADE_RANDOMBYTES_H
+#define LIBJADE_RANDOMBYTES_H
+
+#include <stdint.h>
+#include <oqs/rand.h>
+
+void __jasmin_syscall_randombytes__(uint8_t *_x, uint64_t xlen) __asm__("__jasmin_syscall_randombytes__");
+
+#endif // LIBJADE_RANDOMBYTES_H

From 79ccabf71745ce0e6785e671a8e5c02ba99885bc Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 18:35:42 +0200
Subject: [PATCH 28/82] Add jasmin/libjade namespaces to test_binary.py

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 tests/test_binary.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/test_binary.py b/tests/test_binary.py
index d212f416d3..d82ff1ee42 100644
--- a/tests/test_binary.py
+++ b/tests/test_binary.py
@@ -33,7 +33,7 @@ def test_namespace():
             symbols.append(line)
 
     # ideally this would be just ['oqs', 'pqclean'], but contains exceptions (e.g., providing compat implementations of unavailable platform functions)
-    namespaces = ['oqs', 'pqclean', 'keccak', 'pqcrystals', 'init', 'fini', 'seedexpander', '__x86.get_pc_thunk']
+    namespaces = ['oqs', 'pqclean', 'keccak', 'pqcrystals', 'init', 'fini', 'seedexpander', '__x86.get_pc_thunk', 'libjade', 'jade', '__jade', '__jasmin_syscall']
     non_namespaced = []
 
     for symbolstr in symbols:

From 6f5a9685c95f6f9d34702841fdd3a900ec7bfaa2 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 18:47:25 +0200
Subject: [PATCH 29/82] Update testing

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/unix.yml   |  7 +++++++
 .github/workflows/weekly.yml | 10 ++++++++++
 2 files changed, 17 insertions(+)

diff --git a/.github/workflows/unix.yml b/.github/workflows/unix.yml
index ab0213ef34..b5d3977cef 100644
--- a/.github/workflows/unix.yml
+++ b/.github/workflows/unix.yml
@@ -23,6 +23,12 @@ jobs:
     container: openquantumsafe/ci-ubuntu-focal-x86_64:latest
     runs-on: ubuntu-latest
     steps:
+      - name: Setup nix
+        uses: cachix/install-nix-action@v26
+      - run: nix-channel --add https://nixos.org/channels/nixos-23.11 nixpkgs
+      - run: nix-channel --update
+      - name: Setup jasmin-compiler
+        run: nix-env -iA nixpkgs.jasmin-compiler
       - name: Checkout code
         uses: actions/checkout@v4
       - name: Verify copy_from_upstream state
@@ -34,6 +40,7 @@ jobs:
           cd scripts/copy_from_upstream && \
           ! pip3 install -r requirements.txt 2>&1 | grep ERROR && \
           python3 copy_from_upstream.py copy && \
+          python3 copy_from_upstream.py libjade && \
           ! git status | grep modified
 
   buildcheck:
diff --git a/.github/workflows/weekly.yml b/.github/workflows/weekly.yml
index 327e04d16e..d59abea370 100644
--- a/.github/workflows/weekly.yml
+++ b/.github/workflows/weekly.yml
@@ -22,6 +22,16 @@ jobs:
             CMAKE_ARGS: -DOQS_DIST_BUILD=OFF -DOQS_OPT_TARGET=haswell -DCMAKE_BUILD_TYPE=Debug -DOQS_ENABLE_TEST_CONSTANT_TIME=ON
             PYTEST_ARGS: --numprocesses=auto -k 'test_constant_time'
             SKIP_ALGS: 'SPHINCS\+-SHA(.)*s-simple,SPHINCS\+-SHAKE-(.)*,Classic-McEliece-[^3](.)*'
+          - name: verified_generic
+            container: openquantumsafe/ci-ubuntu-focal-x86_64:latest
+            CMAKE_ARGS: -DOQS_DIST_BUILD=OFF -DOQS_OPT_TARGET=generic -DCMAKE_BUILD_TYPE=Debug -DOQS_LIBJADE_BUILD=ON -DOQS_ENABLE_TEST_CONSTANT_TIME=ON
+            PYTEST_ARGS: --numprocesses=auto -k 'test_constant_time'
+            SKIP_ALGS: 'SPHINCS\+-SHA(.)*s-simple,SPHINCS\+-SHAKE-(.)*,Classic-McEliece-[^3](.)*'
+          - name: verified_extensions
+            container: openquantumsafe/ci-ubuntu-focal-x86_64:latest
+            CMAKE_ARGS: -DOQS_DIST_BUILD=OFF -DOQS_OPT_TARGET=haswell -DCMAKE_BUILD_TYPE=Debug -DOQS_LIBJADE_BUILD=ON -DOQS_ENABLE_TEST_CONSTANT_TIME=ON
+            PYTEST_ARGS: --numprocesses=auto -k 'test_constant_time'
+            SKIP_ALGS: 'SPHINCS\+-SHA(.)*s-simple,SPHINCS\+-SHAKE-(.)*,Classic-McEliece-[^3](.)*'
     container:
       image: ${{ matrix.container }}
     steps:

From 1b6034f6f6b02666c76afd1d5f89f6691d397cf1 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 18:48:30 +0200
Subject: [PATCH 30/82] Allow manually triggering CI tests

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/unix.yml   | 2 +-
 .github/workflows/weekly.yml | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/unix.yml b/.github/workflows/unix.yml
index b5d3977cef..5ebac59bf5 100644
--- a/.github/workflows/unix.yml
+++ b/.github/workflows/unix.yml
@@ -1,6 +1,6 @@
 name: Linux and MacOS tests
 
-on: [push, pull_request]
+on: [push, pull_request, workflow_dispatch]
 
 jobs:
 
diff --git a/.github/workflows/weekly.yml b/.github/workflows/weekly.yml
index d59abea370..917d0b3bb7 100644
--- a/.github/workflows/weekly.yml
+++ b/.github/workflows/weekly.yml
@@ -3,6 +3,7 @@ name: Weekly extended tests
 on:
   schedule:
   - cron: "5 0 * * 0"
+  workflow_dispatch:
 
 jobs:
 

From f418438190c2a91d00dde54cda13e020cc6f9950 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 18:55:16 +0200
Subject: [PATCH 31/82] Change container for upstreamcheck in unix.yml

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/unix.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/unix.yml b/.github/workflows/unix.yml
index 5ebac59bf5..1553603a52 100644
--- a/.github/workflows/unix.yml
+++ b/.github/workflows/unix.yml
@@ -20,7 +20,7 @@ jobs:
 
   upstreamcheck:
     name: Check upstream code is properly integrated
-    container: openquantumsafe/ci-ubuntu-focal-x86_64:latest
+    container: praveksharma/ci-ubuntu-focal-x86_64:latest
     runs-on: ubuntu-latest
     steps:
       - name: Setup nix

From 109092e523aaf3ba27639093c793b2be80ec106e Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 21:07:18 +0200
Subject: [PATCH 32/82] Update copy_from_upstream.py

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/copy_from_upstream.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index 75f1f3195b..bab2993ae4 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -674,6 +674,8 @@ def copy_from_libjade():
     process_families(instructions, os.environ['LIBOQS_DIR'], True, False, True)
     replacer('.CMake/alg_support.cmake', instructions, '#####', libjade=True)
     replacer('src/oqsconfig.h.cmake', instructions, '/////', libjade=True)
+    if not keepdata:
+        shutil.rmtree('repos')
 
 
 def verify_from_upstream():

From f8ca495e0238996795e040093153a814a47e2307 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 22:11:11 +0200
Subject: [PATCH 33/82] Edit unix.yml

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/unix.yml | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/unix.yml b/.github/workflows/unix.yml
index 1553603a52..99525af9c7 100644
--- a/.github/workflows/unix.yml
+++ b/.github/workflows/unix.yml
@@ -31,7 +31,7 @@ jobs:
         run: nix-env -iA nixpkgs.jasmin-compiler
       - name: Checkout code
         uses: actions/checkout@v4
-      - name: Verify copy_from_upstream state
+      - name: Verify copy_from_upstream state after "copy"
         run: |
           git config --global user.name "ciuser" && \
           git config --global user.email "ci@openquantumsafe.org" && \
@@ -40,6 +40,10 @@ jobs:
           cd scripts/copy_from_upstream && \
           ! pip3 install -r requirements.txt 2>&1 | grep ERROR && \
           python3 copy_from_upstream.py copy && \
+          ! git status | grep modified
+      - name: Verify copy_from_upstream state after "copy"
+        run: |
+          cd scripts/copy_from_upstream && \
           python3 copy_from_upstream.py libjade && \
           ! git status | grep modified
 

From 578eab76a2fe2fcfd18527c63df4e50bb93831f3 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 3 Apr 2024 22:16:13 +0200
Subject: [PATCH 34/82] Edit unix.yml

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/unix.yml | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/unix.yml b/.github/workflows/unix.yml
index 99525af9c7..0f52aa3afb 100644
--- a/.github/workflows/unix.yml
+++ b/.github/workflows/unix.yml
@@ -41,9 +41,14 @@ jobs:
           ! pip3 install -r requirements.txt 2>&1 | grep ERROR && \
           python3 copy_from_upstream.py copy && \
           ! git status | grep modified
-      - name: Verify copy_from_upstream state after "copy"
+      - name: Verify copy_from_upstream state after "libjade"
         run: |
+          git config --global user.name "ciuser" && \
+          git config --global user.email "ci@openquantumsafe.org" && \
+          export LIBOQS_DIR=`pwd` && \
+          git config --global --add safe.directory $LIBOQS_DIR && \
           cd scripts/copy_from_upstream && \
+          ! pip3 install -r requirements.txt 2>&1 | grep ERROR && \
           python3 copy_from_upstream.py libjade && \
           ! git status | grep modified
 

From 176c5cb5fba4879a60ad21c129403b5489c9285b Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 4 Apr 2024 20:11:10 +0200
Subject: [PATCH 35/82] Restrict copying of code from libjade repo to relevant
 files

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../copy_from_upstream/copy_from_upstream.py  | 33 ++++++++++++-------
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index bab2993ae4..1331859113 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -461,19 +461,28 @@ def handle_implementation(impl, family, scheme, dst_basedir):
         except FileExistsError as fee:
             print(fee)
             pass
-        # determine list of files to copy:
-        if 'sources' in i:
-            srcs = i['sources'].split(" ")
-            for s in srcs:
-                # Copy recursively only in case of directories not with plain files to avoid copying over symbolic links
-                if os.path.isfile(os.path.join(origfolder, s)):
-                    subprocess.run(['cp', os.path.join(origfolder, s), os.path.join(srcfolder, os.path.basename(s))])
-                else:
-                    subprocess.run(
-                        ['cp', '-r', os.path.join(origfolder, s), os.path.join(srcfolder, os.path.basename(s))])
+        if upstream_location == 'libjade':
+            # Flatten directory structure while copying relevant files from libjade repo
+            for root, _, files in os.walk(origfolder):
+                for file in files:
+                    if os.path.splitext(file)[1].lower() in ['.c', '.h', '.s']:
+                        source_path = os.path.join(root, file)
+                        dest_path = os.path.join(srcfolder, file)
+                        subprocess.run(['cp', source_path, dest_path])
         else:
-            subprocess.run(['cp', '-pr', os.path.join(origfolder, '.'), srcfolder])
-            # raise Exception("Malformed YML file: No sources listed to copy. Check upstream YML file." )
+            # determine list of files to copy:
+            if 'sources' in i:
+                srcs = i['sources'].split(" ")
+                for s in srcs:
+                    # Copy recursively only in case of directories not with plain files to avoid copying over symbolic links
+                    if os.path.isfile(os.path.join(origfolder, s)):
+                        subprocess.run(['cp', os.path.join(origfolder, s), os.path.join(srcfolder, os.path.basename(s))])
+                    else:
+                        subprocess.run(
+                            ['cp', '-r', os.path.join(origfolder, s), os.path.join(srcfolder, os.path.basename(s))])
+            else:
+                subprocess.run(['cp', '-pr', os.path.join(origfolder, '.'), srcfolder])
+                # raise Exception("Malformed YML file: No sources listed to copy. Check upstream YML file." )
 
     else:
         raise Exception("Mandatory argument upstream_location is missing")

From f2c6c043ad742d5db12e609fe0768f2a72630b15 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 4 Apr 2024 20:13:52 +0200
Subject: [PATCH 36/82] Remove irrelevant libjade code

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../libjade_kyber512_amd64_avx2/.deps/kem.s.d |   1 -
 .../libjade_kyber512_amd64_avx2/Makefile      |   3 -
 .../{include => }/api.h                       |   0
 .../gen_matrix.jinc                           | 658 ---------------
 .../libjade_kyber512_amd64_avx2/indcpa.jinc   | 217 -----
 .../libjade_kyber512_amd64_avx2/kem.jazz      |  66 --
 .../libjade_kyber512_amd64_ref/.deps/kem.s.d  |   1 -
 .../kyber/libjade_kyber512_amd64_ref/Makefile |   2 -
 .../{include => }/api.h                       |   0
 .../libjade_kyber512_amd64_ref/indcpa.jinc    | 242 ------
 .../kyber/libjade_kyber512_amd64_ref/kem.jazz |  66 --
 .../libjade_kyber768_amd64_avx2/.deps/kem.s.d |   1 -
 .../libjade_kyber768_amd64_avx2/Makefile      |   3 -
 .../{include => }/api.h                       |   0
 .../gen_matrix.jinc                           | 790 ------------------
 .../libjade_kyber768_amd64_avx2/indcpa.jinc   | 218 -----
 .../libjade_kyber768_amd64_avx2/kem.jazz      |  66 --
 .../libjade_kyber768_amd64_ref/.deps/kem.s.d  |   1 -
 .../kyber/libjade_kyber768_amd64_ref/Makefile |   4 -
 .../{include => }/api.h                       |   0
 .../libjade_kyber768_amd64_ref/indcpa.jinc    | 254 ------
 .../kyber/libjade_kyber768_amd64_ref/kem.jazz |  66 --
 .../kyber/libjade_kyber768_amd64_ref/kem.jinc | 150 ----
 .../libjade_kyber768_amd64_ref/params.jinc    |  21 -
 .../libjade_kyber768_amd64_ref/poly.jinc      | 731 ----------------
 .../libjade_kyber768_amd64_ref/polyvec.jinc   | 285 -------
 .../libjade_kyber768_amd64_ref/verify.jinc    |  49 --
 27 files changed, 3895 deletions(-)
 delete mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/.deps/kem.s.d
 delete mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/Makefile
 rename src/kem/kyber/libjade_kyber512_amd64_avx2/{include => }/api.h (100%)
 delete mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/gen_matrix.jinc
 delete mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/indcpa.jinc
 delete mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/kem.jazz
 delete mode 100644 src/kem/kyber/libjade_kyber512_amd64_ref/.deps/kem.s.d
 delete mode 100644 src/kem/kyber/libjade_kyber512_amd64_ref/Makefile
 rename src/kem/kyber/libjade_kyber512_amd64_ref/{include => }/api.h (100%)
 delete mode 100644 src/kem/kyber/libjade_kyber512_amd64_ref/indcpa.jinc
 delete mode 100644 src/kem/kyber/libjade_kyber512_amd64_ref/kem.jazz
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/.deps/kem.s.d
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/Makefile
 rename src/kem/kyber/libjade_kyber768_amd64_avx2/{include => }/api.h (100%)
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/gen_matrix.jinc
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/indcpa.jinc
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/kem.jazz
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/.deps/kem.s.d
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/Makefile
 rename src/kem/kyber/libjade_kyber768_amd64_ref/{include => }/api.h (100%)
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/indcpa.jinc
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/kem.jazz
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/kem.jinc
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/params.jinc
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/poly.jinc
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/polyvec.jinc
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/verify.jinc

diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/.deps/kem.s.d b/src/kem/kyber/libjade_kyber512_amd64_avx2/.deps/kem.s.d
deleted file mode 100644
index e8c06cc3b9..0000000000
--- a/src/kem/kyber/libjade_kyber512_amd64_avx2/.deps/kem.s.d
+++ /dev/null
@@ -1 +0,0 @@
-kem.s: kem.jazz /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber512/amd64/avx2/indcpa.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber512/common/params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/poly.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_DIRTY.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/avx2/keccak1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/avx2/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_4x_DIRTY.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/avx2/keccakf1600_4x.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600_globals.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_xof/shake256/amd64/avx2/shake256_4x.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/shuffle.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/consts.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/reduce.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/polyvec.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber512/amd64/avx2/gen_matrix.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_xof/shake128/amd64/avx2/shake128_4x.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/tofromstack.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/verify.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/kem.jinc
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/Makefile b/src/kem/kyber/libjade_kyber512_amd64_avx2/Makefile
deleted file mode 100644
index eec5ee0e38..0000000000
--- a/src/kem/kyber/libjade_kyber512_amd64_avx2/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-SRCS := kem.jazz
-include ../../../../../Makefile.common
-
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/include/api.h b/src/kem/kyber/libjade_kyber512_amd64_avx2/api.h
similarity index 100%
rename from src/kem/kyber/libjade_kyber512_amd64_avx2/include/api.h
rename to src/kem/kyber/libjade_kyber512_amd64_avx2/api.h
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/gen_matrix.jinc b/src/kem/kyber/libjade_kyber512_amd64_avx2/gen_matrix.jinc
deleted file mode 100644
index 98ed9b7ab1..0000000000
--- a/src/kem/kyber/libjade_kyber512_amd64_avx2/gen_matrix.jinc
+++ /dev/null
@@ -1,658 +0,0 @@
-from Jade require "common/keccak/common/fips202_DIRTY.jinc"
-from Jade require "common/keccak/common/fips202_4x_DIRTY.jinc"
-from Jade require "crypto_xof/shake128/amd64/avx2/shake128_4x.jinc"
-
-param int GENMATRIX_NBLOCKS = ((12*KYBER_N/8*4096/KYBER_Q + SHAKE128_RATE)/SHAKE128_RATE);
-param int REJ_UNIFORM_AVX_BUFLEN = GENMATRIX_NBLOCKS * SHAKE128_RATE;
-
-u8[2048] ru_idx = {-1, -1, -1, -1, -1, -1, -1, -1,
-                0, -1, -1, -1, -1, -1, -1, -1,
-                2, -1, -1, -1, -1, -1, -1, -1,
-                0,  2, -1, -1, -1, -1, -1, -1,
-                4, -1, -1, -1, -1, -1, -1, -1,
-                0,  4, -1, -1, -1, -1, -1, -1,
-                2,  4, -1, -1, -1, -1, -1, -1,
-                0,  2,  4, -1, -1, -1, -1, -1,
-                6, -1, -1, -1, -1, -1, -1, -1,
-                0,  6, -1, -1, -1, -1, -1, -1,
-                2,  6, -1, -1, -1, -1, -1, -1,
-                0,  2,  6, -1, -1, -1, -1, -1,
-                4,  6, -1, -1, -1, -1, -1, -1,
-                0,  4,  6, -1, -1, -1, -1, -1,
-                2,  4,  6, -1, -1, -1, -1, -1,
-                0,  2,  4,  6, -1, -1, -1, -1,
-                8, -1, -1, -1, -1, -1, -1, -1,
-                0,  8, -1, -1, -1, -1, -1, -1,
-                2,  8, -1, -1, -1, -1, -1, -1,
-                0,  2,  8, -1, -1, -1, -1, -1,
-                4,  8, -1, -1, -1, -1, -1, -1,
-                0,  4,  8, -1, -1, -1, -1, -1,
-                2,  4,  8, -1, -1, -1, -1, -1,
-                0,  2,  4,  8, -1, -1, -1, -1,
-                6,  8, -1, -1, -1, -1, -1, -1,
-                0,  6,  8, -1, -1, -1, -1, -1,
-                2,  6,  8, -1, -1, -1, -1, -1,
-                0,  2,  6,  8, -1, -1, -1, -1,
-                4,  6,  8, -1, -1, -1, -1, -1,
-                0,  4,  6,  8, -1, -1, -1, -1,
-                2,  4,  6,  8, -1, -1, -1, -1,
-                0,  2,  4,  6,  8, -1, -1, -1,
-                10, -1, -1, -1, -1, -1, -1, -1,
-                0, 10, -1, -1, -1, -1, -1, -1,
-                2, 10, -1, -1, -1, -1, -1, -1,
-                0,  2, 10, -1, -1, -1, -1, -1,
-                4, 10, -1, -1, -1, -1, -1, -1,
-                0,  4, 10, -1, -1, -1, -1, -1,
-                2,  4, 10, -1, -1, -1, -1, -1,
-                0,  2,  4, 10, -1, -1, -1, -1,
-                6, 10, -1, -1, -1, -1, -1, -1,
-                0,  6, 10, -1, -1, -1, -1, -1,
-                2,  6, 10, -1, -1, -1, -1, -1,
-                0,  2,  6, 10, -1, -1, -1, -1,
-                4,  6, 10, -1, -1, -1, -1, -1,
-                0,  4,  6, 10, -1, -1, -1, -1,
-                2,  4,  6, 10, -1, -1, -1, -1,
-                0,  2,  4,  6, 10, -1, -1, -1,
-                8, 10, -1, -1, -1, -1, -1, -1,
-                0,  8, 10, -1, -1, -1, -1, -1,
-                2,  8, 10, -1, -1, -1, -1, -1,
-                0,  2,  8, 10, -1, -1, -1, -1,
-                4,  8, 10, -1, -1, -1, -1, -1,
-                0,  4,  8, 10, -1, -1, -1, -1,
-                2,  4,  8, 10, -1, -1, -1, -1,
-                0,  2,  4,  8, 10, -1, -1, -1,
-                6,  8, 10, -1, -1, -1, -1, -1,
-                0,  6,  8, 10, -1, -1, -1, -1,
-                2,  6,  8, 10, -1, -1, -1, -1,
-                0,  2,  6,  8, 10, -1, -1, -1,
-                4,  6,  8, 10, -1, -1, -1, -1,
-                0,  4,  6,  8, 10, -1, -1, -1,
-                2,  4,  6,  8, 10, -1, -1, -1,
-                0,  2,  4,  6,  8, 10, -1, -1,
-                12, -1, -1, -1, -1, -1, -1, -1,
-                0, 12, -1, -1, -1, -1, -1, -1,
-                2, 12, -1, -1, -1, -1, -1, -1,
-                0,  2, 12, -1, -1, -1, -1, -1,
-                4, 12, -1, -1, -1, -1, -1, -1,
-                0,  4, 12, -1, -1, -1, -1, -1,
-                2,  4, 12, -1, -1, -1, -1, -1,
-                0,  2,  4, 12, -1, -1, -1, -1,
-                6, 12, -1, -1, -1, -1, -1, -1,
-                0,  6, 12, -1, -1, -1, -1, -1,
-                2,  6, 12, -1, -1, -1, -1, -1,
-                0,  2,  6, 12, -1, -1, -1, -1,
-                4,  6, 12, -1, -1, -1, -1, -1,
-                0,  4,  6, 12, -1, -1, -1, -1,
-                2,  4,  6, 12, -1, -1, -1, -1,
-                0,  2,  4,  6, 12, -1, -1, -1,
-                8, 12, -1, -1, -1, -1, -1, -1,
-                0,  8, 12, -1, -1, -1, -1, -1,
-                2,  8, 12, -1, -1, -1, -1, -1,
-                0,  2,  8, 12, -1, -1, -1, -1,
-                4,  8, 12, -1, -1, -1, -1, -1,
-                0,  4,  8, 12, -1, -1, -1, -1,
-                2,  4,  8, 12, -1, -1, -1, -1,
-                0,  2,  4,  8, 12, -1, -1, -1,
-                6,  8, 12, -1, -1, -1, -1, -1,
-                0,  6,  8, 12, -1, -1, -1, -1,
-                2,  6,  8, 12, -1, -1, -1, -1,
-                0,  2,  6,  8, 12, -1, -1, -1,
-                4,  6,  8, 12, -1, -1, -1, -1,
-                0,  4,  6,  8, 12, -1, -1, -1,
-                2,  4,  6,  8, 12, -1, -1, -1,
-                0,  2,  4,  6,  8, 12, -1, -1,
-                10, 12, -1, -1, -1, -1, -1, -1,
-                0, 10, 12, -1, -1, -1, -1, -1,
-                2, 10, 12, -1, -1, -1, -1, -1,
-                0,  2, 10, 12, -1, -1, -1, -1,
-                4, 10, 12, -1, -1, -1, -1, -1,
-                0,  4, 10, 12, -1, -1, -1, -1,
-                2,  4, 10, 12, -1, -1, -1, -1,
-                0,  2,  4, 10, 12, -1, -1, -1,
-                6, 10, 12, -1, -1, -1, -1, -1,
-                0,  6, 10, 12, -1, -1, -1, -1,
-                2,  6, 10, 12, -1, -1, -1, -1,
-                0,  2,  6, 10, 12, -1, -1, -1,
-                4,  6, 10, 12, -1, -1, -1, -1,
-                0,  4,  6, 10, 12, -1, -1, -1,
-                2,  4,  6, 10, 12, -1, -1, -1,
-                0,  2,  4,  6, 10, 12, -1, -1,
-                8, 10, 12, -1, -1, -1, -1, -1,
-                0,  8, 10, 12, -1, -1, -1, -1,
-                2,  8, 10, 12, -1, -1, -1, -1,
-                0,  2,  8, 10, 12, -1, -1, -1,
-                4,  8, 10, 12, -1, -1, -1, -1,
-                0,  4,  8, 10, 12, -1, -1, -1,
-                2,  4,  8, 10, 12, -1, -1, -1,
-                0,  2,  4,  8, 10, 12, -1, -1,
-                6,  8, 10, 12, -1, -1, -1, -1,
-                0,  6,  8, 10, 12, -1, -1, -1,
-                2,  6,  8, 10, 12, -1, -1, -1,
-                0,  2,  6,  8, 10, 12, -1, -1,
-                4,  6,  8, 10, 12, -1, -1, -1,
-                0,  4,  6,  8, 10, 12, -1, -1,
-                2,  4,  6,  8, 10, 12, -1, -1,
-                0,  2,  4,  6,  8, 10, 12, -1,
-                14, -1, -1, -1, -1, -1, -1, -1,
-                0, 14, -1, -1, -1, -1, -1, -1,
-                2, 14, -1, -1, -1, -1, -1, -1,
-                0,  2, 14, -1, -1, -1, -1, -1,
-                4, 14, -1, -1, -1, -1, -1, -1,
-                0,  4, 14, -1, -1, -1, -1, -1,
-                2,  4, 14, -1, -1, -1, -1, -1,
-                0,  2,  4, 14, -1, -1, -1, -1,
-                6, 14, -1, -1, -1, -1, -1, -1,
-                0,  6, 14, -1, -1, -1, -1, -1,
-                2,  6, 14, -1, -1, -1, -1, -1,
-                0,  2,  6, 14, -1, -1, -1, -1,
-                4,  6, 14, -1, -1, -1, -1, -1,
-                0,  4,  6, 14, -1, -1, -1, -1,
-                2,  4,  6, 14, -1, -1, -1, -1,
-                0,  2,  4,  6, 14, -1, -1, -1,
-                8, 14, -1, -1, -1, -1, -1, -1,
-                0,  8, 14, -1, -1, -1, -1, -1,
-                2,  8, 14, -1, -1, -1, -1, -1,
-                0,  2,  8, 14, -1, -1, -1, -1,
-                4,  8, 14, -1, -1, -1, -1, -1,
-                0,  4,  8, 14, -1, -1, -1, -1,
-                2,  4,  8, 14, -1, -1, -1, -1,
-                0,  2,  4,  8, 14, -1, -1, -1,
-                6,  8, 14, -1, -1, -1, -1, -1,
-                0,  6,  8, 14, -1, -1, -1, -1,
-                2,  6,  8, 14, -1, -1, -1, -1,
-                0,  2,  6,  8, 14, -1, -1, -1,
-                4,  6,  8, 14, -1, -1, -1, -1,
-                0,  4,  6,  8, 14, -1, -1, -1,
-                2,  4,  6,  8, 14, -1, -1, -1,
-                0,  2,  4,  6,  8, 14, -1, -1,
-                10, 14, -1, -1, -1, -1, -1, -1,
-                0, 10, 14, -1, -1, -1, -1, -1,
-                2, 10, 14, -1, -1, -1, -1, -1,
-                0,  2, 10, 14, -1, -1, -1, -1,
-                4, 10, 14, -1, -1, -1, -1, -1,
-                0,  4, 10, 14, -1, -1, -1, -1,
-                2,  4, 10, 14, -1, -1, -1, -1,
-                0,  2,  4, 10, 14, -1, -1, -1,
-                6, 10, 14, -1, -1, -1, -1, -1,
-                0,  6, 10, 14, -1, -1, -1, -1,
-                2,  6, 10, 14, -1, -1, -1, -1,
-                0,  2,  6, 10, 14, -1, -1, -1,
-                4,  6, 10, 14, -1, -1, -1, -1,
-                0,  4,  6, 10, 14, -1, -1, -1,
-                2,  4,  6, 10, 14, -1, -1, -1,
-                0,  2,  4,  6, 10, 14, -1, -1,
-                8, 10, 14, -1, -1, -1, -1, -1,
-                0,  8, 10, 14, -1, -1, -1, -1,
-                2,  8, 10, 14, -1, -1, -1, -1,
-                0,  2,  8, 10, 14, -1, -1, -1,
-                4,  8, 10, 14, -1, -1, -1, -1,
-                0,  4,  8, 10, 14, -1, -1, -1,
-                2,  4,  8, 10, 14, -1, -1, -1,
-                0,  2,  4,  8, 10, 14, -1, -1,
-                6,  8, 10, 14, -1, -1, -1, -1,
-                0,  6,  8, 10, 14, -1, -1, -1,
-                2,  6,  8, 10, 14, -1, -1, -1,
-                0,  2,  6,  8, 10, 14, -1, -1,
-                4,  6,  8, 10, 14, -1, -1, -1,
-                0,  4,  6,  8, 10, 14, -1, -1,
-                2,  4,  6,  8, 10, 14, -1, -1,
-                0,  2,  4,  6,  8, 10, 14, -1,
-                12, 14, -1, -1, -1, -1, -1, -1,
-                0, 12, 14, -1, -1, -1, -1, -1,
-                2, 12, 14, -1, -1, -1, -1, -1,
-                0,  2, 12, 14, -1, -1, -1, -1,
-                4, 12, 14, -1, -1, -1, -1, -1,
-                0,  4, 12, 14, -1, -1, -1, -1,
-                2,  4, 12, 14, -1, -1, -1, -1,
-                0,  2,  4, 12, 14, -1, -1, -1,
-                6, 12, 14, -1, -1, -1, -1, -1,
-                0,  6, 12, 14, -1, -1, -1, -1,
-                2,  6, 12, 14, -1, -1, -1, -1,
-                0,  2,  6, 12, 14, -1, -1, -1,
-                4,  6, 12, 14, -1, -1, -1, -1,
-                0,  4,  6, 12, 14, -1, -1, -1,
-                2,  4,  6, 12, 14, -1, -1, -1,
-                0,  2,  4,  6, 12, 14, -1, -1,
-                8, 12, 14, -1, -1, -1, -1, -1,
-                0,  8, 12, 14, -1, -1, -1, -1,
-                2,  8, 12, 14, -1, -1, -1, -1,
-                0,  2,  8, 12, 14, -1, -1, -1,
-                4,  8, 12, 14, -1, -1, -1, -1,
-                0,  4,  8, 12, 14, -1, -1, -1,
-                2,  4,  8, 12, 14, -1, -1, -1,
-                0,  2,  4,  8, 12, 14, -1, -1,
-                6,  8, 12, 14, -1, -1, -1, -1,
-                0,  6,  8, 12, 14, -1, -1, -1,
-                2,  6,  8, 12, 14, -1, -1, -1,
-                0,  2,  6,  8, 12, 14, -1, -1,
-                4,  6,  8, 12, 14, -1, -1, -1,
-                0,  4,  6,  8, 12, 14, -1, -1,
-                2,  4,  6,  8, 12, 14, -1, -1,
-                0,  2,  4,  6,  8, 12, 14, -1,
-                10, 12, 14, -1, -1, -1, -1, -1,
-                0, 10, 12, 14, -1, -1, -1, -1,
-                2, 10, 12, 14, -1, -1, -1, -1,
-                0,  2, 10, 12, 14, -1, -1, -1,
-                4, 10, 12, 14, -1, -1, -1, -1,
-                0,  4, 10, 12, 14, -1, -1, -1,
-                2,  4, 10, 12, 14, -1, -1, -1,
-                0,  2,  4, 10, 12, 14, -1, -1,
-                6, 10, 12, 14, -1, -1, -1, -1,
-                0,  6, 10, 12, 14, -1, -1, -1,
-                2,  6, 10, 12, 14, -1, -1, -1,
-                0,  2,  6, 10, 12, 14, -1, -1,
-                4,  6, 10, 12, 14, -1, -1, -1,
-                0,  4,  6, 10, 12, 14, -1, -1,
-                2,  4,  6, 10, 12, 14, -1, -1,
-                0,  2,  4,  6, 10, 12, 14, -1,
-                8, 10, 12, 14, -1, -1, -1, -1,
-                0,  8, 10, 12, 14, -1, -1, -1,
-                2,  8, 10, 12, 14, -1, -1, -1,
-                0,  2,  8, 10, 12, 14, -1, -1,
-                4,  8, 10, 12, 14, -1, -1, -1,
-                0,  4,  8, 10, 12, 14, -1, -1,
-                2,  4,  8, 10, 12, 14, -1, -1,
-                0,  2,  4,  8, 10, 12, 14, -1,
-                6,  8, 10, 12, 14, -1, -1, -1,
-                0,  6,  8, 10, 12, 14, -1, -1,
-                2,  6,  8, 10, 12, 14, -1, -1,
-                0,  2,  6,  8, 10, 12, 14, -1,
-                4,  6,  8, 10, 12, 14, -1, -1,
-                0,  4,  6,  8, 10, 12, 14, -1,
-                2,  4,  6,  8, 10, 12, 14, -1,
-                0,  2,  4,  6,  8, 10, 12, 14};
-
-inline
-fn __shake128_squeezenblocks4x(reg ptr u256[25] state, reg ptr u8[REJ_UNIFORM_AVX_BUFLEN] h0 h1 h2 h3)
-  -> reg ptr u256[25], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN]
-{
-  inline int i;
-
-  for i = 0 to GENMATRIX_NBLOCKS
-  {
-    state, h0[i*SHAKE128_RATE:SHAKE128_RATE], h1[i*SHAKE128_RATE:SHAKE128_RATE], h2[i*SHAKE128_RATE:SHAKE128_RATE], h3[i*SHAKE128_RATE:SHAKE128_RATE] = __shake128_squeezeblock4x(state, h0[i*SHAKE128_RATE:SHAKE128_RATE], h1[i*SHAKE128_RATE:SHAKE128_RATE], h2[i*SHAKE128_RATE:SHAKE128_RATE], h3[i*SHAKE128_RATE:SHAKE128_RATE]);
-  }
-
-  return state, h0, h1, h2, h3;
-}
-
-inline
-fn __rej_uniform(reg ptr u16[KYBER_N] rp, reg u64 offset, reg ptr u8[SHAKE128_RATE] buf, inline int buflen) ->  reg u64, stack u16[KYBER_N]
-{
-  reg u16 val0 val1;
-  reg u16 t;
-  reg u64 pos ctr;
-  reg u8 fl1 fl2;
-  reg bool cf zf b;
-
-  ctr = offset;
-  pos = 0;
-
-  _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 1);
-  fl1 = #SETcc(cf || zf); //SETBE
-
-  _, cf, _, _, zf = #CMP_64(pos, buflen - 3);
-  fl2 = #SETcc(cf || zf);  //SETBE
-
-  _, _, _, _, b = #TEST_8(fl1, fl2);
-
-  while(!b)
-  {
-    val0 = (16u)buf[(int)pos];
-    pos += 1;
-
-    t   = (16u)buf[(int)pos];
-    val1 = t;
-    val1 >>= 4;
-
-    t &= 0x0F;
-    t <<= 8;
-    val0 |= t;
-    pos += 1;
-
-    t   = (16u)buf[(int)pos];
-    t <<= 4;
-    val1 |= t;
-    pos += 1;
-
-    if(val0 < KYBER_Q)
-    {
-      rp[(int)ctr] = val0;
-      ctr += 1;
-    }
-
-    if(ctr < KYBER_N)
-    {
-      if(val1 < KYBER_Q)
-      {
-        rp[(int)ctr] = val1;
-        ctr += 1;
-      }
-    }
-
-    _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 1);
-    fl1 = #SETcc(cf || zf); //SETBE
-
-    _, cf, _, _, zf = #CMP_64(pos, buflen - 3);
-    fl2 = #SETcc(cf || zf);  //SETBE
-
-    _, _, _, _, b = #TEST_8(fl1, fl2);
-  }
-
-  return ctr, rp;
-}
-
-u8 ru_ones_s = 1;
-u16 ru_mask_s = 0x0FFF;
-u8[32] ru_idx8_s = {0, 1, 1, 2, 3, 4, 4, 5,
-                 6, 7, 7, 8, 9, 10, 10, 11,
-                 4, 5, 5, 6, 7, 8, 8, 9,
-                 10, 11, 11, 12, 13, 14, 14, 15};
-
-fn _rej_uniform_avx(reg ptr u16[KYBER_N] rp, reg ptr u8[REJ_UNIFORM_AVX_BUFLEN] buf) -> reg u64, reg ptr u16[KYBER_N]
-{
-  reg u256 f0 f1 g0 g1 g2 g3;
-  reg u256 bound ones mask idx8;
-  reg u128 f t l h;
-  reg u64 pos ctr t64 t64_1 t64_2 t64_3;
-  reg u64 good;
-  reg u16 val0 val1 t16;
-  reg ptr u8[2048] idxp;
-  reg u8 fl1 fl2;
-  reg bool cf zf b;
-
-  idxp = ru_idx;
-
-  bound = jqx16[u256 0];
-  ctr = 0;
-  pos = 0;
-  ones = #VPBROADCAST_32u8(ru_ones_s);
-  mask = #VPBROADCAST_16u16(ru_mask_s);
-  idx8 = ru_idx8_s[u256 0];
-
-  _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 32);
-  fl1 = #SETcc(cf || zf);
-
-  _, cf, _, _, zf = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 56);
-  fl2 = #SETcc(cf || zf);
-
-   _, _, _, _, b = #TEST_8(fl1, fl2);
-
-  while(!b)
-  {
-    f0 = #VPERMQ(buf.[u256 (int)pos], 0x94);
-    f1 = #VPERMQ(buf.[u256 24 + (int)pos], 0x94);
-    f0 = #VPSHUFB_256(f0, idx8);
-    f1 = #VPSHUFB_256(f1, idx8);
-    g0 = #VPSRL_16u16(f0, 4);
-    g1 = #VPSRL_16u16(f1, 4);
-    f0 = #VPBLEND_16u16(f0, g0, 0xAA);
-    f1 = #VPBLEND_16u16(f1, g1, 0xAA);
-    f0 = #VPAND_256(f0, mask);
-    f1 = #VPAND_256(f1, mask);
-
-    g0 = #VPCMPGT_16u16(bound, f0);
-    g1 = #VPCMPGT_16u16(bound, f1);
-
-    g0 = #VPACKSS_16u16(g0, g1);
-    good = #VPMOVMSKB_u256u64(g0);
-
-    t64 = good;
-    t64 &= 0xFF;
-    g0 = (256u) #VMOV(idxp[u64 (int)t64]);
-
-    t64_1 = good;
-    t64_1 >>= 16;
-    t64_1 &= 0xFF;
-    l = #VMOV(idxp[u64 (int)t64_1]);
-
-    t64_2 = good;
-    t64_2 >>= 8;
-    t64_2 &= 0xFF;
-    g1 = (256u) #VMOV(idxp[u64 (int)t64_2]);
-
-    t64_3 = good;
-    t64_3 >>= 24;
-    t64_3 &= 0xFF;
-    h = #VMOV(idxp[u64 (int)t64_3]);
-
-    g0 = #VINSERTI128(g0, l, 1);
-
-    _, _, _, _, _, t64 = #POPCNT_64(t64);
-    _, _, _, _, _, t64_1 = #POPCNT_64(t64_1);
-    t64 += ctr;
-
-    g1 = #VINSERTI128(g1, h, 1);
-
-    t64_1 += t64;
-    _, _, _, _, _, t64_2 = #POPCNT_64(t64_2);
-    t64_2 += t64_1;
-    _, _, _, _, _, t64_3 = #POPCNT_64(t64_3);
-    t64_3 += t64_2;
-
-    g2 = #VPADD_32u8(g0, ones);
-    g0 = #VPUNPCKL_32u8(g0, g2);
-    g3 = #VPADD_32u8(g1, ones);
-    g1 = #VPUNPCKL_32u8(g1, g3);
-
-    f0 = #VPSHUFB_256(f0, g0);
-    f1 = #VPSHUFB_256(f1, g1);
-
-    rp.[u128 2*(int)ctr] = (128u)f0;
-    rp.[u128 2*(int)t64] = #VEXTRACTI128(f0, 1);
-    rp.[u128 2*(int)t64_1] = (128u)f1;
-    rp.[u128 2*(int)t64_2] = #VEXTRACTI128(f1, 1);
-
-    ctr = t64_3;
-
-    _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 32);
-    fl1 = #SETcc(cf || zf);
-
-    pos += 48;
-    _, cf, _, _, zf = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 56);
-    fl2 = #SETcc(cf || zf);
-
-     _, _, _, _, b = #TEST_8(fl1, fl2);
-  }
-
-  _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 8);
-  fl1 = #SETcc(cf || zf);
-
-  _, cf, _, _, zf = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 16);
-  fl2 = #SETcc(cf || zf);
-
-   _, _, _, _, b = #TEST_8(fl1, fl2);
-
-  t64 = 0x5555;
-  while(!b)
-  {
-    f = buf.[u128 (int)pos];
-    f = #VPSHUFB_128(f, idx8);
-    t = #VPSRL_8u16(f, 4);
-    f = #VPBLEND_8u16(f, t, 0xAA);
-    f = #VPAND_128(f, mask);
-
-    t = #VPCMPGT_8u16(bound, f);
-    good = #VPMOVMSKB_u128u64(t);
-
-    good = #PEXT_64(good, t64);
-    l = #VMOV(idxp[u64 (int)good]);
-    _, _, _, _, _, good =  #POPCNT_64(good);
-
-    h = #VPADD_16u8(l, ones);
-    l = #VPUNPCKL_16u8(l, h);
-    f = #VPSHUFB_128(f, l);
-
-    rp.[u128 2*(int)ctr] = f;
-    ctr += good;
-
-    pos += 12;
-    _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 8);
-    fl1 = #SETcc(cf || zf);
-
-    _, cf, _, _, zf = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 16);
-    fl2 = #SETcc(cf || zf);
-
-     _, _, _, _, b = #TEST_8(fl1, fl2);
-  }
-
-  _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 1);
-  fl1 = #SETcc(cf || zf);
-
-  _, cf, _, _, zf = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 3);
-  fl2 = #SETcc(cf || zf);
-
-   _, _, _, _, b = #TEST_8(fl1, fl2);
-
-  while(!b)
-  {
-    val0 = (16u)buf[(int)pos];
-    pos += 1;
-    t16 = (16u)buf[(int)pos];
-    pos += 1;
-    val1 = t16;
-
-    t16 <<= 8;
-    val0 |= t16;
-    val0 &= 0xFFF;
-
-    val1 >>= 4;
-    t16 = (16u)buf[(int)pos];
-    pos += 1;
-    t16 <<= 4;
-    val1 |= t16;
-
-    if(val0 < KYBER_Q)
-    {
-      rp[(int)ctr] = val0;
-      ctr += 1;
-    }
-    if(val1 < KYBER_Q)
-    {
-      if(ctr < KYBER_N)
-      {
-        rp[(int)ctr] = val1;
-        ctr += 1;
-      }
-    }
-
-    _, cf, _, _, zf = #CMP_64(ctr, KYBER_N - 1);
-    fl1 = #SETcc(cf || zf); //SETBE
-
-    _, cf, _, _, zf = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 3);
-    fl2 = #SETcc(cf || zf);  //SETBE
-
-    _, _, _, _, b = #TEST_8(fl1, fl2);
-  }
-
-  return ctr, rp;
-}
-
-inline
-fn __gen_matrix(stack u8[KYBER_SYMBYTES] seed, inline int transposed) -> stack u16[KYBER_K*KYBER_VECN]
-{
-  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf0;
-  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf1;
-  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf2;
-  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf3;
-  stack u256[25] state;
-  stack u16[KYBER_K*KYBER_VECN] rr;
-  reg u256 f;
-  reg u64 ctr0 ctr1 ctr2 ctr3 tmp;
-  reg u8 flg0 flg1 bflg;
-  reg bool cf zf;
-  inline int i, j;
-  
-  f = seed[u256 0];
-  buf0[u256 0] = f;
-  buf1[u256 0] = f;
-  buf2[u256 0] = f;
-  buf3[u256 0] = f;
-
-  if(transposed == 1)
-  {
-    buf0[KYBER_SYMBYTES]   = 0;
-    buf0[KYBER_SYMBYTES+1] = 0;
-    buf1[KYBER_SYMBYTES]   = 0;
-    buf1[KYBER_SYMBYTES+1] = 1;
-    buf2[KYBER_SYMBYTES]   = 1;
-    buf2[KYBER_SYMBYTES+1] = 0;
-    buf3[KYBER_SYMBYTES]   = 1;
-    buf3[KYBER_SYMBYTES+1] = 1;
-  }
-  else
-  {
-    buf0[KYBER_SYMBYTES]   = 0;
-    buf0[KYBER_SYMBYTES+1] = 0;
-    buf1[KYBER_SYMBYTES]   = 1;
-    buf1[KYBER_SYMBYTES+1] = 0;
-    buf2[KYBER_SYMBYTES]   = 0;
-    buf2[KYBER_SYMBYTES+1] = 1;
-    buf3[KYBER_SYMBYTES]   = 1;
-    buf3[KYBER_SYMBYTES+1] = 1;
-  }
-
-  state = _shake128_absorb4x_34(state, buf0[0:34], buf1[0:34], buf2[0:34], buf3[0:34]);
-  state, buf0, buf1, buf2, buf3 = __shake128_squeezenblocks4x(state, buf0, buf1, buf2, buf3);
-
-  tmp, rr[0*KYBER_VECN+0*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[0*KYBER_VECN+0*KYBER_N:KYBER_N], buf0);
-  ctr0 = tmp;
-  tmp, rr[0*KYBER_VECN+1*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[0*KYBER_VECN+1*KYBER_N:KYBER_N], buf1);
-  ctr1 = tmp;
-  tmp, rr[1*KYBER_VECN+0*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[1*KYBER_VECN+0*KYBER_N:KYBER_N], buf2);
-  ctr2 = tmp;
-  ctr3, rr[1*KYBER_VECN+1*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[1*KYBER_VECN+1*KYBER_N:KYBER_N], buf3);
-
-  _, cf, _, _, zf = #CMP_64(ctr0, KYBER_N - 1);
-  flg0 = #SETcc(cf || zf); //SETBE
-
-  _, cf, _, _, zf = #CMP_64(ctr1, KYBER_N - 1);
-  flg1 = #SETcc(cf || zf);
-
-  _, _, _, _, _, bflg = #OR_8(flg0, flg1);
-
-  _, cf, _, _, zf = #CMP_64(ctr2, KYBER_N - 1);
-  flg0 = #SETcc(cf || zf);
-
-  _, cf, _, _, zf = #CMP_64(ctr3, KYBER_N - 1);
-  flg1 = #SETcc(cf || zf);
-
-  _, _, _, _, _, flg0 = #OR_8(flg0, flg1);
-  _, _, _, _, _, bflg = #OR_8(flg0, bflg);
-
-  while(bflg != 0) {
-    state, buf0[0:SHAKE128_RATE], buf1[0:SHAKE128_RATE], buf2[0:SHAKE128_RATE], buf3[0:SHAKE128_RATE] = __shake128_squeezeblock4x(state, buf0[0:SHAKE128_RATE], buf1[0:SHAKE128_RATE], buf2[0:SHAKE128_RATE], buf3[0:SHAKE128_RATE]);
-
-    ctr0, rr[0*KYBER_VECN+0*KYBER_N:KYBER_N] = __rej_uniform(rr[0*KYBER_VECN+0*KYBER_N:KYBER_N], ctr0, buf0[0:SHAKE128_RATE], SHAKE128_RATE);
-    ctr1, rr[0*KYBER_VECN+1*KYBER_N:KYBER_N] = __rej_uniform(rr[0*KYBER_VECN+1*KYBER_N:KYBER_N], ctr1, buf1[0:SHAKE128_RATE], SHAKE128_RATE);
-    ctr2, rr[1*KYBER_VECN+0*KYBER_N:KYBER_N] = __rej_uniform(rr[1*KYBER_VECN+0*KYBER_N:KYBER_N], ctr2, buf2[0:SHAKE128_RATE], SHAKE128_RATE);
-    ctr3, rr[1*KYBER_VECN+1*KYBER_N:KYBER_N] = __rej_uniform(rr[1*KYBER_VECN+1*KYBER_N:KYBER_N], ctr3, buf3[0:SHAKE128_RATE], SHAKE128_RATE);
-
-    _, cf, _, _, zf = #CMP_64(ctr0, KYBER_N - 1);
-    flg0 = #SETcc(cf || zf);
-
-    _, cf, _, _, zf = #CMP_64(ctr1, KYBER_N - 1);
-    flg1 = #SETcc(cf || zf);
-
-    _, _, _, _, _, bflg = #OR_8(flg0, flg1);
-
-    _, cf, _, _, zf = #CMP_64(ctr2, KYBER_N - 1);
-    flg0 = #SETcc(cf || zf);
-
-    _, cf, _, _, zf = #CMP_64(ctr3, KYBER_N - 1);
-    flg1 = #SETcc(cf || zf);
-
-    _, _, _, _, _, flg0 = #OR_8(flg0, flg1);
-    _, _, _, _, _, bflg = #OR_8(flg0, bflg);
-  }
-  for i = 0 to KYBER_K
-  {
-    for j = 0 to KYBER_K
-    {
-      rr[i*KYBER_VECN+j*KYBER_N:KYBER_N] = _nttunpack(rr[i*KYBER_VECN+j*KYBER_N:KYBER_N]);
-    }
-  }
-
-
-  return rr;
-}
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/indcpa.jinc b/src/kem/kyber/libjade_kyber512_amd64_avx2/indcpa.jinc
deleted file mode 100644
index 1f9e08d6e4..0000000000
--- a/src/kem/kyber/libjade_kyber512_amd64_avx2/indcpa.jinc
+++ /dev/null
@@ -1,217 +0,0 @@
-from Jade require "crypto_kem/kyber/kyber512/common/params.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/avx2/poly.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/avx2/polyvec.jinc"
-require "gen_matrix.jinc"
-
-inline
-fn __indcpa_keypair_derand(reg u64 pkp, reg u64 skp, reg ptr u8[KYBER_SYMBYTES] coins)
-{
-  stack u64 spkp sskp;
-  stack u16[KYBER_K*KYBER_VECN] aa;
-  stack u16[KYBER_VECN] e pkpv skpv;
-  stack u8[64] buf;
-  stack u8[KYBER_SYMBYTES] publicseed noiseseed;
-  reg u64 t64;
-  reg u8 nonce;
-  inline int i;
-
-  spkp = pkp;
-  sskp = skp;
-
-  buf = _sha3_512_32(buf, coins);
-
-  for i=0 to KYBER_SYMBYTES/8
-  {
-    t64 = buf[u64 i];
-    publicseed[u64 i] = t64;
-    t64 = buf[u64 i + KYBER_SYMBYTES/8];
-    noiseseed[u64 i] = t64;
-  }
-
-  aa = __gen_matrix(publicseed, 0);
-
-  nonce = 0;
-  skpv[0:KYBER_N], skpv[KYBER_N:KYBER_N], e[0:KYBER_N], e[KYBER_N:KYBER_N] = _poly_getnoise_eta1_4x(skpv[0:KYBER_N], skpv[KYBER_N:KYBER_N], e[0:KYBER_N], e[KYBER_N:KYBER_N], noiseseed, nonce);
-
-  skpv = __polyvec_ntt(skpv);
-  e    = __polyvec_ntt(e);
-
-  for i=0 to KYBER_K
-  {
-    pkpv[i*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(pkpv[i*KYBER_N:KYBER_N], aa[i*KYBER_VECN:KYBER_VECN], skpv);
-    pkpv[i*KYBER_N:KYBER_N] = _poly_frommont(pkpv[i*KYBER_N:KYBER_N]);
-  }
-
-  pkpv = __polyvec_add2(pkpv, e);
-  pkpv = __polyvec_reduce(pkpv);
-
-  pkp = spkp;
-  skp = sskp;
-
-  __polyvec_tobytes(skp, skpv);
-  __polyvec_tobytes(pkp, pkpv);
-
-  pkp += KYBER_POLYVECBYTES;
-
-  for i=0 to KYBER_SYMBYTES/8
-  {
-    t64 = publicseed[u64 i];
-    (u64)[pkp] = t64;
-    pkp += 8;
-  }
-}
-
-// FIXME: E_EPTR
-inline
-fn __indcpa_enc_0(stack u64 sctp, reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed)
-{
-  stack u16[KYBER_K*KYBER_VECN] aat;
-  stack u16[KYBER_VECN] pkpv sp ep bp;
-  stack u16[KYBER_N] k epp v;
-  stack u8[KYBER_SYMBYTES] publicseed;
-  stack ptr u8[KYBER_SYMBYTES] s_noiseseed;
-  reg ptr u8[KYBER_SYMBYTES] lnoiseseed;
-  reg u64 i ctp t64;
-  reg u8 nonce;
-  inline int w;
-
-  pkpv = __polyvec_frombytes(pkp);
-
-  i = 0;
-  pkp += KYBER_POLYVECBYTES;
-  while (i < KYBER_SYMBYTES/8)
-  {
-    t64 = (u64)[pkp];
-    publicseed[u64 (int)i] = t64;
-    pkp += 8;
-    i += 1;
-  }
-
-  k = _poly_frommsg_1(k, msgp);
-
-  s_noiseseed = noiseseed;
-  aat = __gen_matrix(publicseed, 1);
-  lnoiseseed = s_noiseseed;
-
-  nonce = 0;
-  sp[0:KYBER_N], sp[KYBER_N:KYBER_N], ep[0:KYBER_N], ep[KYBER_N:KYBER_N] = _poly_getnoise_eta1122_4x(sp[0:KYBER_N], sp[KYBER_N:KYBER_N], ep[0:KYBER_N], ep[KYBER_N:KYBER_N], lnoiseseed, nonce);
-
-  nonce = 4;
-  lnoiseseed = s_noiseseed;
-  epp = _poly_getnoise(epp, lnoiseseed, nonce);
-
-  sp = __polyvec_ntt(sp);
-
-  for w=0 to KYBER_K
-  {
-    bp[w*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(bp[w*KYBER_N:KYBER_N], aat[w*KYBER_VECN:KYBER_VECN], sp);
-  }
-
-  v = __polyvec_pointwise_acc(v, pkpv, sp);
-
-  bp = __polyvec_invntt(bp);
-  v = _poly_invntt(v);
-
-  bp = __polyvec_add2(bp, ep);
-  v = _poly_add2(v, epp);
-  v = _poly_add2(v, k);
-  bp = __polyvec_reduce(bp);
-  v  = __poly_reduce(v);
-
-  ctp = sctp;
-  __polyvec_compress(ctp, bp);
-  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
-  v = _poly_compress(ctp, v);
-}
-
-// FIXME: E_EPTR
-inline
-fn __indcpa_enc_1(reg ptr u8[KYBER_INDCPA_BYTES] ctp, reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed) -> reg ptr u8[KYBER_INDCPA_BYTES]
-{
-  stack u16[KYBER_K*KYBER_VECN] aat;
-  stack u16[KYBER_VECN] pkpv sp ep bp;
-  stack u16[KYBER_N] k epp v;
-  stack u8[KYBER_SYMBYTES] publicseed;
-  stack ptr u8[KYBER_SYMBYTES] s_noiseseed;
-  reg ptr u8[KYBER_SYMBYTES] lnoiseseed;
-  stack ptr u8[KYBER_INDCPA_BYTES] sctp;
-  reg u64 i t64;
-  reg u8 nonce;
-  inline int w;
-
-  sctp = ctp;
-
-  pkpv = __polyvec_frombytes(pkp);
-
-  i = 0;
-  pkp += KYBER_POLYVECBYTES;
-  while (i < KYBER_SYMBYTES/8)
-  {
-    t64 = (u64)[pkp];
-    publicseed[u64 (int)i] = t64;
-    pkp += 8;
-    i += 1;
-  }
-
-  k = _poly_frommsg_1(k, msgp);
-
-  s_noiseseed = noiseseed;
-  aat = __gen_matrix(publicseed, 1);
-  lnoiseseed = s_noiseseed;
-
-  nonce = 0;
-  sp[0:KYBER_N], sp[KYBER_N:KYBER_N], ep[0:KYBER_N], ep[KYBER_N:KYBER_N] = _poly_getnoise_eta1122_4x(sp[0:KYBER_N], sp[KYBER_N:KYBER_N], ep[0:KYBER_N], ep[KYBER_N:KYBER_N], lnoiseseed, nonce);
-
-  nonce = 4;
-  lnoiseseed = s_noiseseed;
-  epp = _poly_getnoise(epp, lnoiseseed, nonce);
-
-  sp = __polyvec_ntt(sp);
-    
-  for w=0 to KYBER_K
-  {
-    bp[w*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(bp[w*KYBER_N:KYBER_N], aat[w*KYBER_VECN:KYBER_VECN], sp);
-  }
- 
-  v = __polyvec_pointwise_acc(v, pkpv, sp);
-
-  bp = __polyvec_invntt(bp);
-  v = _poly_invntt(v);
-
-  bp = __polyvec_add2(bp, ep);
-  v = _poly_add2(v, epp);
-  v = _poly_add2(v, k);
-  bp = __polyvec_reduce(bp);
-  v  = __poly_reduce(v);
-
-  ctp = sctp;
-  ctp[0:KYBER_POLYVECCOMPRESSEDBYTES] = __polyvec_compress_1(ctp[0:KYBER_POLYVECCOMPRESSEDBYTES], bp);
-  ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v = _poly_compress_1(ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v);
-
-  return ctp;
-}
-
-
-inline
-fn __indcpa_dec(reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 ctp, reg u64 skp) -> reg ptr u8[KYBER_INDCPA_MSGBYTES]
-{
-  stack u16[KYBER_N] t v mp;
-  stack u16[KYBER_VECN] bp skpv;
-
-  bp = __polyvec_decompress(ctp);
-  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
-  v = _poly_decompress(v, ctp);
-
-  skpv = __polyvec_frombytes(skp);
-  
-  bp = __polyvec_ntt(bp);
-  t = __polyvec_pointwise_acc(t, skpv, bp);
-  t = _poly_invntt(t);
-
-  mp = _poly_sub(mp, v, t);
-  mp = __poly_reduce(mp);
-  
-  msgp, mp = _poly_tomsg_1(msgp, mp);
-
-  return msgp;
-}
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.jazz b/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.jazz
deleted file mode 100644
index c4b7a7935b..0000000000
--- a/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.jazz
+++ /dev/null
@@ -1,66 +0,0 @@
-require "indcpa.jinc"
-from Jade require "common/tofromstack.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/avx2/verify.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/kem.jinc"
-
-export fn jade_kem_kyber_kyber512_amd64_avx2_keypair_derand(reg u64 public_key secret_key coins) -> reg u64
-{
-  reg u64 r;
-  stack u8[2*KYBER_SYMBYTES] stack_coins;
-
-  public_key = public_key;
-  secret_key = secret_key;
-  stack_coins = __tostack64u8(stack_coins, coins);
-  __crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber512_amd64_avx2_keypair(reg u64 public_key secret_key) -> reg u64
-{
-  reg u64 r;
-  stack u8[2*KYBER_SYMBYTES] stack_coins;
-
-  public_key = public_key;
-  secret_key = secret_key;
-  stack_coins = #randombytes(stack_coins);
-  __crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber512_amd64_avx2_enc_derand(reg u64 ciphertext shared_secret public_key coins) -> reg u64
-{
-  reg u64 r;
-  stack u8[KYBER_SYMBYTES] stack_coins;
-  
-  ciphertext = ciphertext;
-  shared_secret = shared_secret;
-  public_key = public_key;
-  stack_coins = __tostack32u8(stack_coins, coins);
-  __crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber512_amd64_avx2_enc(reg u64 ciphertext shared_secret public_key) -> reg u64
-{
-  reg u64 r;
-  stack u8[KYBER_SYMBYTES] stack_coins;
-
-  ciphertext = ciphertext;
-  shared_secret = shared_secret;
-  public_key = public_key;
-  stack_coins = #randombytes(stack_coins);
-  __crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber512_amd64_avx2_dec(reg u64 shared_secret ciphertext secret_key) -> reg u64
-{
-  reg u64 r;
-  __crypto_kem_dec_jazz(shared_secret, ciphertext, secret_key);
-  ?{}, r = #set0();
-  return r;
-}
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/.deps/kem.s.d b/src/kem/kyber/libjade_kyber512_amd64_ref/.deps/kem.s.d
deleted file mode 100644
index d3b866d0ef..0000000000
--- a/src/kem/kyber/libjade_kyber512_amd64_ref/.deps/kem.s.d
+++ /dev/null
@@ -1 +0,0 @@
-kem.s: kem.jazz /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber512/amd64/ref/indcpa.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber512/common/params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/poly.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_ref_DIRTY.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/ref1/keccak1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/ref1/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600_globals.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/zetas.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/reduce.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/polyvec.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/gen_matrix.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/tofromstack.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/verify.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/kem.jinc
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/Makefile b/src/kem/kyber/libjade_kyber512_amd64_ref/Makefile
deleted file mode 100644
index 29a80faa80..0000000000
--- a/src/kem/kyber/libjade_kyber512_amd64_ref/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-SRCS := kem.jazz
-include ../../../../../Makefile.common
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/include/api.h b/src/kem/kyber/libjade_kyber512_amd64_ref/api.h
similarity index 100%
rename from src/kem/kyber/libjade_kyber512_amd64_ref/include/api.h
rename to src/kem/kyber/libjade_kyber512_amd64_ref/api.h
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/indcpa.jinc b/src/kem/kyber/libjade_kyber512_amd64_ref/indcpa.jinc
deleted file mode 100644
index c1bb634bb2..0000000000
--- a/src/kem/kyber/libjade_kyber512_amd64_ref/indcpa.jinc
+++ /dev/null
@@ -1,242 +0,0 @@
-from Jade require "crypto_kem/kyber/kyber512/common/params.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/ref/poly.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/ref/polyvec.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/ref/gen_matrix.jinc"
-
-inline
-fn __indcpa_keypair_derand(reg u64 pkp, reg u64 skp, reg ptr u8[KYBER_SYMBYTES] coins)
-{
-  stack u64 spkp sskp;
-  stack u16[KYBER_K * KYBER_VECN] a;
-  stack u16[KYBER_VECN] e pkpv skpv;
-  stack u8[64] buf;
-  stack u8[KYBER_SYMBYTES] publicseed noiseseed;
-  reg u64 t64;
-  reg u8 nonce, c;
-  inline int i;
-
-  spkp = pkp;
-  sskp = skp;
-
-  buf = _sha3_512_32(buf, coins);
-
-  for i=0 to KYBER_SYMBYTES/8
-  {
-    t64 = buf[u64 i];
-    publicseed[u64 i] = t64;
-    t64 = buf[u64 i + KYBER_SYMBYTES/8];
-    noiseseed[u64 i] = t64;
-  }
-
-  a = __gen_matrix(publicseed, 0);
-
-  nonce = 0;
-  skpv[0:KYBER_N] = _poly_getnoise_eta1(skpv[0:KYBER_N], noiseseed, nonce);
-  nonce = 1;
-  skpv[KYBER_N:KYBER_N] = _poly_getnoise_eta1(skpv[KYBER_N:KYBER_N], noiseseed, nonce);
-
-  nonce = 2;
-  e[0:KYBER_N] = _poly_getnoise_eta1(e[0:KYBER_N], noiseseed, nonce);
-  nonce = 3;
-  e[KYBER_N:KYBER_N] = _poly_getnoise_eta1(e[KYBER_N:KYBER_N], noiseseed, nonce);
-
-  skpv = __polyvec_ntt(skpv);
-  e    = __polyvec_ntt(e);
-
-  for i=0 to KYBER_K
-  {
-    pkpv[i*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(a[i*KYBER_VECN:KYBER_VECN], skpv);
-    pkpv[i*KYBER_N:KYBER_N] = _poly_frommont(pkpv[i*KYBER_N:KYBER_N]);
-  }
-
-  pkpv = __polyvec_add2(pkpv, e);
-  pkpv = __polyvec_reduce(pkpv);
-
-  pkp = spkp;
-  skp = sskp;
-
-  __polyvec_tobytes(skp, skpv);
-  __polyvec_tobytes(pkp, pkpv);
-
-  pkp += KYBER_POLYVECBYTES; 
-  for i=0 to KYBER_SYMBYTES/8
-  {
-    t64 = publicseed[u64 i];
-    (u64)[pkp] = t64;
-    pkp += 8;
-  }
-}
-
-
-inline
-fn __indcpa_enc_0(stack u64 sctp, reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed)
-{
-  stack u16[KYBER_K*KYBER_VECN] aat;
-  stack u16[KYBER_VECN] pkpv sp ep bp;
-  stack u16[KYBER_N] k epp v;
-  stack u8[KYBER_SYMBYTES] publicseed;
-  stack ptr u8[KYBER_SYMBYTES] s_noiseseed;
-  reg ptr u8[KYBER_SYMBYTES] lnoiseseed;
-  reg u64 i ctp t64;
-  reg u8 nonce;
-  inline int j;
-
-  pkpv = __polyvec_frombytes(pkp);
-
-  i = 0;
-  pkp += KYBER_POLYVECBYTES;
-  while (i < KYBER_SYMBYTES/8)
-  {
-    t64 = (u64)[pkp];
-    publicseed[u64 (int)i] = t64;
-    pkp += 8;
-    i += 1;
-  }
-
-  k = _i_poly_frommsg(k, msgp);
-
-  s_noiseseed = noiseseed;
-  aat = __gen_matrix(publicseed, 1);
-
-  lnoiseseed = s_noiseseed;
-  nonce = 0;
-  sp[0:KYBER_N] = _poly_getnoise_eta1(sp[0:KYBER_N], lnoiseseed, nonce);
-  lnoiseseed = s_noiseseed;
-  nonce = 1;
-  sp[KYBER_N:KYBER_N] = _poly_getnoise_eta1(sp[KYBER_N:KYBER_N], lnoiseseed, nonce);
-
-  lnoiseseed = s_noiseseed;
-  nonce = 2;
-  ep[0:KYBER_N] = _poly_getnoise_eta2(ep[0:KYBER_N], lnoiseseed, nonce);
-  lnoiseseed = s_noiseseed;
-  nonce = 3;
-  ep[KYBER_N:KYBER_N] = _poly_getnoise_eta2(ep[KYBER_N:KYBER_N], lnoiseseed, nonce);
-
-  lnoiseseed = s_noiseseed;
-  nonce = 4;
-  epp = _poly_getnoise_eta2(epp, lnoiseseed, nonce);
-
-  sp = __polyvec_ntt(sp);
-
-  for j=0 to KYBER_K
-  {
-    bp[j*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(aat[j*KYBER_VECN:KYBER_VECN], sp);
-  }
-  
-  v = __polyvec_pointwise_acc(pkpv, sp);
-
-  bp = __polyvec_invntt(bp);
-  v = _poly_invntt(v);
-
-  bp = __polyvec_add2(bp, ep);
-  v = _poly_add2(v, epp);
-  v = _poly_add2(v, k);
-  bp = __polyvec_reduce(bp);
-  v  = __poly_reduce(v);
-
-  ctp = sctp;
-  __polyvec_compress(ctp, bp);
-  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
-  v = _poly_compress(ctp, v);
-}
-
-inline
-fn __indcpa_enc_1(reg ptr u8[KYBER_INDCPA_BYTES] ctp, reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed) -> reg ptr u8[KYBER_INDCPA_BYTES]
-{
-  stack u16[KYBER_K*KYBER_VECN] aat;
-  stack u16[KYBER_VECN] pkpv sp ep bp;
-  stack u16[KYBER_N] k epp v;
-  stack u8[KYBER_SYMBYTES] publicseed;
-  stack ptr u8[KYBER_SYMBYTES] s_noiseseed;
-  reg ptr u8[KYBER_SYMBYTES] lnoiseseed;
-  stack ptr u8[KYBER_INDCPA_BYTES] sctp;
-  reg u64 i t64;
-  reg u8 nonce;
-  inline int j;
-
-  sctp = ctp;
-
-  pkpv = __polyvec_frombytes(pkp);
-
-  i = 0;
-  pkp += KYBER_POLYVECBYTES;
-  while (i < KYBER_SYMBYTES/8)
-  {
-    t64 = (u64)[pkp];
-    publicseed[u64 (int)i] = t64;
-    pkp += 8;
-    i += 1;
-  }
-
-  k = _i_poly_frommsg(k, msgp);
-
-  s_noiseseed = noiseseed;
-  aat = __gen_matrix(publicseed, 1);
-  lnoiseseed = s_noiseseed;
-
-  nonce = 0;
-  sp[0:KYBER_N] = _poly_getnoise_eta1(sp[0:KYBER_N], lnoiseseed, nonce);
-  lnoiseseed = s_noiseseed;
-  nonce = 1;
-  sp[KYBER_N:KYBER_N] = _poly_getnoise_eta1(sp[KYBER_N:KYBER_N], lnoiseseed, nonce);
-
-  lnoiseseed = s_noiseseed;
-  nonce = 2;
-  ep[0:KYBER_N] = _poly_getnoise_eta2(ep[0:KYBER_N], lnoiseseed, nonce);
-  lnoiseseed = s_noiseseed;
-  nonce = 3;
-  ep[KYBER_N:KYBER_N] = _poly_getnoise_eta2(ep[KYBER_N:KYBER_N], lnoiseseed, nonce);
-
-  lnoiseseed = s_noiseseed;
-  nonce = 4;
-  epp = _poly_getnoise_eta2(epp, lnoiseseed, nonce);
-
-  sp = __polyvec_ntt(sp);
-    
-  for j=0 to KYBER_K
-  {
-    bp[j*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(aat[j*KYBER_VECN:KYBER_VECN], sp);
-  }
-  
-  v = __polyvec_pointwise_acc(pkpv, sp);
-
-  bp = __polyvec_invntt(bp);
-  v = _poly_invntt(v);
-
-  bp = __polyvec_add2(bp, ep);
-  v = _poly_add2(v, epp);
-  v = _poly_add2(v, k);
-  bp = __polyvec_reduce(bp);
-  v  = __poly_reduce(v);
-
-  ctp = sctp;
-  ctp[0:KYBER_POLYVECCOMPRESSEDBYTES] = __i_polyvec_compress(ctp[0:KYBER_POLYVECCOMPRESSEDBYTES], bp);
-  ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v = _i_poly_compress(ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v);
-
-  return ctp;
-}
-
-
-inline
-fn __indcpa_dec(reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 ctp, reg u64 skp) -> reg ptr u8[KYBER_INDCPA_MSGBYTES]
-{
-  stack u16[KYBER_N] t v mp;
-  stack u16[KYBER_VECN] bp skpv;
-
-  bp = __polyvec_decompress(ctp);
-  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
-  v = _poly_decompress(v, ctp);
-
-  skpv = __polyvec_frombytes(skp);
-  
-  bp = __polyvec_ntt(bp);
-  t = __polyvec_pointwise_acc(skpv, bp);
-  t = _poly_invntt(t);
-
-  mp = _poly_sub(mp, v, t);
-  mp = __poly_reduce(mp);
-  
-  msgp, mp = _i_poly_tomsg(msgp, mp);
-
-  return msgp;
-}
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/kem.jazz b/src/kem/kyber/libjade_kyber512_amd64_ref/kem.jazz
deleted file mode 100644
index 3d43af2ae5..0000000000
--- a/src/kem/kyber/libjade_kyber512_amd64_ref/kem.jazz
+++ /dev/null
@@ -1,66 +0,0 @@
-require "indcpa.jinc"
-from Jade require "common/tofromstack.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/ref/verify.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/kem.jinc"
-
-export fn jade_kem_kyber_kyber512_amd64_ref_keypair_derand(reg u64 public_key secret_key coins) -> reg u64
-{
-  reg u64 r;
-  stack u8[2*KYBER_SYMBYTES] stack_coins;
-
-  public_key = public_key;
-  secret_key = secret_key;
-  stack_coins = __tostack64u8(stack_coins, coins);
-  __crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber512_amd64_ref_keypair(reg u64 public_key secret_key) -> reg u64
-{
-  reg u64 r;
-  stack u8[2*KYBER_SYMBYTES] stack_coins;
-
-  public_key = public_key;
-  secret_key = secret_key;
-  stack_coins = #randombytes(stack_coins);
-  __crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber512_amd64_ref_enc_derand(reg u64 ciphertext shared_secret public_key coins) -> reg u64
-{
-  reg u64 r;
-  stack u8[KYBER_SYMBYTES] stack_coins;
-  
-  ciphertext = ciphertext;
-  shared_secret = shared_secret;
-  public_key = public_key;
-  stack_coins = __tostack32u8(stack_coins, coins);
-  __crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber512_amd64_ref_enc(reg u64 ciphertext shared_secret public_key) -> reg u64
-{
-  reg u64 r;
-  stack u8[KYBER_SYMBYTES] stack_coins;
-
-  ciphertext = ciphertext;
-  shared_secret = shared_secret;
-  public_key = public_key;
-  stack_coins = #randombytes(stack_coins);
-  __crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber512_amd64_ref_dec(reg u64 shared_secret ciphertext secret_key) -> reg u64
-{
-  reg u64 r;
-  __crypto_kem_dec_jazz(shared_secret, ciphertext, secret_key);
-  ?{}, r = #set0();
-  return r;
-}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/.deps/kem.s.d b/src/kem/kyber/libjade_kyber768_amd64_avx2/.deps/kem.s.d
deleted file mode 100644
index 2fb0ff7f8d..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_avx2/.deps/kem.s.d
+++ /dev/null
@@ -1 +0,0 @@
-kem.s: kem.jazz /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/avx2/indcpa.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/common/params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/poly.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_DIRTY.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/avx2/keccak1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/avx2/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_4x_DIRTY.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/avx2/keccakf1600_4x.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600_globals.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_xof/shake256/amd64/avx2/shake256_4x.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/shuffle.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/consts.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/reduce.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/polyvec.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/avx2/gen_matrix.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_xof/shake128/amd64/avx2/shake128_4x.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/tofromstack.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/avx2/verify.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/kem.jinc
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/Makefile b/src/kem/kyber/libjade_kyber768_amd64_avx2/Makefile
deleted file mode 100644
index eec5ee0e38..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_avx2/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-SRCS := kem.jazz
-include ../../../../../Makefile.common
-
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/include/api.h b/src/kem/kyber/libjade_kyber768_amd64_avx2/api.h
similarity index 100%
rename from src/kem/kyber/libjade_kyber768_amd64_avx2/include/api.h
rename to src/kem/kyber/libjade_kyber768_amd64_avx2/api.h
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/gen_matrix.jinc b/src/kem/kyber/libjade_kyber768_amd64_avx2/gen_matrix.jinc
deleted file mode 100644
index 9ae8a16763..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_avx2/gen_matrix.jinc
+++ /dev/null
@@ -1,790 +0,0 @@
-from Jade require "common/keccak/common/fips202_DIRTY.jinc"
-from Jade require "common/keccak/common/fips202_4x_DIRTY.jinc"
-from Jade require "crypto_xof/shake128/amd64/avx2/shake128_4x.jinc"
-
-param int GENMATRIX_NBLOCKS = ((12*KYBER_N/8*4096/KYBER_Q + SHAKE128_RATE)/SHAKE128_RATE);
-param int REJ_UNIFORM_AVX_BUFLEN = GENMATRIX_NBLOCKS * SHAKE128_RATE;
-
-u8[2048] ru_idx = {-1, -1, -1, -1, -1, -1, -1, -1,
-                0, -1, -1, -1, -1, -1, -1, -1,
-                2, -1, -1, -1, -1, -1, -1, -1,
-                0,  2, -1, -1, -1, -1, -1, -1,
-                4, -1, -1, -1, -1, -1, -1, -1,
-                0,  4, -1, -1, -1, -1, -1, -1,
-                2,  4, -1, -1, -1, -1, -1, -1,
-                0,  2,  4, -1, -1, -1, -1, -1,
-                6, -1, -1, -1, -1, -1, -1, -1,
-                0,  6, -1, -1, -1, -1, -1, -1,
-                2,  6, -1, -1, -1, -1, -1, -1,
-                0,  2,  6, -1, -1, -1, -1, -1,
-                4,  6, -1, -1, -1, -1, -1, -1,
-                0,  4,  6, -1, -1, -1, -1, -1,
-                2,  4,  6, -1, -1, -1, -1, -1,
-                0,  2,  4,  6, -1, -1, -1, -1,
-                8, -1, -1, -1, -1, -1, -1, -1,
-                0,  8, -1, -1, -1, -1, -1, -1,
-                2,  8, -1, -1, -1, -1, -1, -1,
-                0,  2,  8, -1, -1, -1, -1, -1,
-                4,  8, -1, -1, -1, -1, -1, -1,
-                0,  4,  8, -1, -1, -1, -1, -1,
-                2,  4,  8, -1, -1, -1, -1, -1,
-                0,  2,  4,  8, -1, -1, -1, -1,
-                6,  8, -1, -1, -1, -1, -1, -1,
-                0,  6,  8, -1, -1, -1, -1, -1,
-                2,  6,  8, -1, -1, -1, -1, -1,
-                0,  2,  6,  8, -1, -1, -1, -1,
-                4,  6,  8, -1, -1, -1, -1, -1,
-                0,  4,  6,  8, -1, -1, -1, -1,
-                2,  4,  6,  8, -1, -1, -1, -1,
-                0,  2,  4,  6,  8, -1, -1, -1,
-                10, -1, -1, -1, -1, -1, -1, -1,
-                0, 10, -1, -1, -1, -1, -1, -1,
-                2, 10, -1, -1, -1, -1, -1, -1,
-                0,  2, 10, -1, -1, -1, -1, -1,
-                4, 10, -1, -1, -1, -1, -1, -1,
-                0,  4, 10, -1, -1, -1, -1, -1,
-                2,  4, 10, -1, -1, -1, -1, -1,
-                0,  2,  4, 10, -1, -1, -1, -1,
-                6, 10, -1, -1, -1, -1, -1, -1,
-                0,  6, 10, -1, -1, -1, -1, -1,
-                2,  6, 10, -1, -1, -1, -1, -1,
-                0,  2,  6, 10, -1, -1, -1, -1,
-                4,  6, 10, -1, -1, -1, -1, -1,
-                0,  4,  6, 10, -1, -1, -1, -1,
-                2,  4,  6, 10, -1, -1, -1, -1,
-                0,  2,  4,  6, 10, -1, -1, -1,
-                8, 10, -1, -1, -1, -1, -1, -1,
-                0,  8, 10, -1, -1, -1, -1, -1,
-                2,  8, 10, -1, -1, -1, -1, -1,
-                0,  2,  8, 10, -1, -1, -1, -1,
-                4,  8, 10, -1, -1, -1, -1, -1,
-                0,  4,  8, 10, -1, -1, -1, -1,
-                2,  4,  8, 10, -1, -1, -1, -1,
-                0,  2,  4,  8, 10, -1, -1, -1,
-                6,  8, 10, -1, -1, -1, -1, -1,
-                0,  6,  8, 10, -1, -1, -1, -1,
-                2,  6,  8, 10, -1, -1, -1, -1,
-                0,  2,  6,  8, 10, -1, -1, -1,
-                4,  6,  8, 10, -1, -1, -1, -1,
-                0,  4,  6,  8, 10, -1, -1, -1,
-                2,  4,  6,  8, 10, -1, -1, -1,
-                0,  2,  4,  6,  8, 10, -1, -1,
-                12, -1, -1, -1, -1, -1, -1, -1,
-                0, 12, -1, -1, -1, -1, -1, -1,
-                2, 12, -1, -1, -1, -1, -1, -1,
-                0,  2, 12, -1, -1, -1, -1, -1,
-                4, 12, -1, -1, -1, -1, -1, -1,
-                0,  4, 12, -1, -1, -1, -1, -1,
-                2,  4, 12, -1, -1, -1, -1, -1,
-                0,  2,  4, 12, -1, -1, -1, -1,
-                6, 12, -1, -1, -1, -1, -1, -1,
-                0,  6, 12, -1, -1, -1, -1, -1,
-                2,  6, 12, -1, -1, -1, -1, -1,
-                0,  2,  6, 12, -1, -1, -1, -1,
-                4,  6, 12, -1, -1, -1, -1, -1,
-                0,  4,  6, 12, -1, -1, -1, -1,
-                2,  4,  6, 12, -1, -1, -1, -1,
-                0,  2,  4,  6, 12, -1, -1, -1,
-                8, 12, -1, -1, -1, -1, -1, -1,
-                0,  8, 12, -1, -1, -1, -1, -1,
-                2,  8, 12, -1, -1, -1, -1, -1,
-                0,  2,  8, 12, -1, -1, -1, -1,
-                4,  8, 12, -1, -1, -1, -1, -1,
-                0,  4,  8, 12, -1, -1, -1, -1,
-                2,  4,  8, 12, -1, -1, -1, -1,
-                0,  2,  4,  8, 12, -1, -1, -1,
-                6,  8, 12, -1, -1, -1, -1, -1,
-                0,  6,  8, 12, -1, -1, -1, -1,
-                2,  6,  8, 12, -1, -1, -1, -1,
-                0,  2,  6,  8, 12, -1, -1, -1,
-                4,  6,  8, 12, -1, -1, -1, -1,
-                0,  4,  6,  8, 12, -1, -1, -1,
-                2,  4,  6,  8, 12, -1, -1, -1,
-                0,  2,  4,  6,  8, 12, -1, -1,
-                10, 12, -1, -1, -1, -1, -1, -1,
-                0, 10, 12, -1, -1, -1, -1, -1,
-                2, 10, 12, -1, -1, -1, -1, -1,
-                0,  2, 10, 12, -1, -1, -1, -1,
-                4, 10, 12, -1, -1, -1, -1, -1,
-                0,  4, 10, 12, -1, -1, -1, -1,
-                2,  4, 10, 12, -1, -1, -1, -1,
-                0,  2,  4, 10, 12, -1, -1, -1,
-                6, 10, 12, -1, -1, -1, -1, -1,
-                0,  6, 10, 12, -1, -1, -1, -1,
-                2,  6, 10, 12, -1, -1, -1, -1,
-                0,  2,  6, 10, 12, -1, -1, -1,
-                4,  6, 10, 12, -1, -1, -1, -1,
-                0,  4,  6, 10, 12, -1, -1, -1,
-                2,  4,  6, 10, 12, -1, -1, -1,
-                0,  2,  4,  6, 10, 12, -1, -1,
-                8, 10, 12, -1, -1, -1, -1, -1,
-                0,  8, 10, 12, -1, -1, -1, -1,
-                2,  8, 10, 12, -1, -1, -1, -1,
-                0,  2,  8, 10, 12, -1, -1, -1,
-                4,  8, 10, 12, -1, -1, -1, -1,
-                0,  4,  8, 10, 12, -1, -1, -1,
-                2,  4,  8, 10, 12, -1, -1, -1,
-                0,  2,  4,  8, 10, 12, -1, -1,
-                6,  8, 10, 12, -1, -1, -1, -1,
-                0,  6,  8, 10, 12, -1, -1, -1,
-                2,  6,  8, 10, 12, -1, -1, -1,
-                0,  2,  6,  8, 10, 12, -1, -1,
-                4,  6,  8, 10, 12, -1, -1, -1,
-                0,  4,  6,  8, 10, 12, -1, -1,
-                2,  4,  6,  8, 10, 12, -1, -1,
-                0,  2,  4,  6,  8, 10, 12, -1,
-                14, -1, -1, -1, -1, -1, -1, -1,
-                0, 14, -1, -1, -1, -1, -1, -1,
-                2, 14, -1, -1, -1, -1, -1, -1,
-                0,  2, 14, -1, -1, -1, -1, -1,
-                4, 14, -1, -1, -1, -1, -1, -1,
-                0,  4, 14, -1, -1, -1, -1, -1,
-                2,  4, 14, -1, -1, -1, -1, -1,
-                0,  2,  4, 14, -1, -1, -1, -1,
-                6, 14, -1, -1, -1, -1, -1, -1,
-                0,  6, 14, -1, -1, -1, -1, -1,
-                2,  6, 14, -1, -1, -1, -1, -1,
-                0,  2,  6, 14, -1, -1, -1, -1,
-                4,  6, 14, -1, -1, -1, -1, -1,
-                0,  4,  6, 14, -1, -1, -1, -1,
-                2,  4,  6, 14, -1, -1, -1, -1,
-                0,  2,  4,  6, 14, -1, -1, -1,
-                8, 14, -1, -1, -1, -1, -1, -1,
-                0,  8, 14, -1, -1, -1, -1, -1,
-                2,  8, 14, -1, -1, -1, -1, -1,
-                0,  2,  8, 14, -1, -1, -1, -1,
-                4,  8, 14, -1, -1, -1, -1, -1,
-                0,  4,  8, 14, -1, -1, -1, -1,
-                2,  4,  8, 14, -1, -1, -1, -1,
-                0,  2,  4,  8, 14, -1, -1, -1,
-                6,  8, 14, -1, -1, -1, -1, -1,
-                0,  6,  8, 14, -1, -1, -1, -1,
-                2,  6,  8, 14, -1, -1, -1, -1,
-                0,  2,  6,  8, 14, -1, -1, -1,
-                4,  6,  8, 14, -1, -1, -1, -1,
-                0,  4,  6,  8, 14, -1, -1, -1,
-                2,  4,  6,  8, 14, -1, -1, -1,
-                0,  2,  4,  6,  8, 14, -1, -1,
-                10, 14, -1, -1, -1, -1, -1, -1,
-                0, 10, 14, -1, -1, -1, -1, -1,
-                2, 10, 14, -1, -1, -1, -1, -1,
-                0,  2, 10, 14, -1, -1, -1, -1,
-                4, 10, 14, -1, -1, -1, -1, -1,
-                0,  4, 10, 14, -1, -1, -1, -1,
-                2,  4, 10, 14, -1, -1, -1, -1,
-                0,  2,  4, 10, 14, -1, -1, -1,
-                6, 10, 14, -1, -1, -1, -1, -1,
-                0,  6, 10, 14, -1, -1, -1, -1,
-                2,  6, 10, 14, -1, -1, -1, -1,
-                0,  2,  6, 10, 14, -1, -1, -1,
-                4,  6, 10, 14, -1, -1, -1, -1,
-                0,  4,  6, 10, 14, -1, -1, -1,
-                2,  4,  6, 10, 14, -1, -1, -1,
-                0,  2,  4,  6, 10, 14, -1, -1,
-                8, 10, 14, -1, -1, -1, -1, -1,
-                0,  8, 10, 14, -1, -1, -1, -1,
-                2,  8, 10, 14, -1, -1, -1, -1,
-                0,  2,  8, 10, 14, -1, -1, -1,
-                4,  8, 10, 14, -1, -1, -1, -1,
-                0,  4,  8, 10, 14, -1, -1, -1,
-                2,  4,  8, 10, 14, -1, -1, -1,
-                0,  2,  4,  8, 10, 14, -1, -1,
-                6,  8, 10, 14, -1, -1, -1, -1,
-                0,  6,  8, 10, 14, -1, -1, -1,
-                2,  6,  8, 10, 14, -1, -1, -1,
-                0,  2,  6,  8, 10, 14, -1, -1,
-                4,  6,  8, 10, 14, -1, -1, -1,
-                0,  4,  6,  8, 10, 14, -1, -1,
-                2,  4,  6,  8, 10, 14, -1, -1,
-                0,  2,  4,  6,  8, 10, 14, -1,
-                12, 14, -1, -1, -1, -1, -1, -1,
-                0, 12, 14, -1, -1, -1, -1, -1,
-                2, 12, 14, -1, -1, -1, -1, -1,
-                0,  2, 12, 14, -1, -1, -1, -1,
-                4, 12, 14, -1, -1, -1, -1, -1,
-                0,  4, 12, 14, -1, -1, -1, -1,
-                2,  4, 12, 14, -1, -1, -1, -1,
-                0,  2,  4, 12, 14, -1, -1, -1,
-                6, 12, 14, -1, -1, -1, -1, -1,
-                0,  6, 12, 14, -1, -1, -1, -1,
-                2,  6, 12, 14, -1, -1, -1, -1,
-                0,  2,  6, 12, 14, -1, -1, -1,
-                4,  6, 12, 14, -1, -1, -1, -1,
-                0,  4,  6, 12, 14, -1, -1, -1,
-                2,  4,  6, 12, 14, -1, -1, -1,
-                0,  2,  4,  6, 12, 14, -1, -1,
-                8, 12, 14, -1, -1, -1, -1, -1,
-                0,  8, 12, 14, -1, -1, -1, -1,
-                2,  8, 12, 14, -1, -1, -1, -1,
-                0,  2,  8, 12, 14, -1, -1, -1,
-                4,  8, 12, 14, -1, -1, -1, -1,
-                0,  4,  8, 12, 14, -1, -1, -1,
-                2,  4,  8, 12, 14, -1, -1, -1,
-                0,  2,  4,  8, 12, 14, -1, -1,
-                6,  8, 12, 14, -1, -1, -1, -1,
-                0,  6,  8, 12, 14, -1, -1, -1,
-                2,  6,  8, 12, 14, -1, -1, -1,
-                0,  2,  6,  8, 12, 14, -1, -1,
-                4,  6,  8, 12, 14, -1, -1, -1,
-                0,  4,  6,  8, 12, 14, -1, -1,
-                2,  4,  6,  8, 12, 14, -1, -1,
-                0,  2,  4,  6,  8, 12, 14, -1,
-                10, 12, 14, -1, -1, -1, -1, -1,
-                0, 10, 12, 14, -1, -1, -1, -1,
-                2, 10, 12, 14, -1, -1, -1, -1,
-                0,  2, 10, 12, 14, -1, -1, -1,
-                4, 10, 12, 14, -1, -1, -1, -1,
-                0,  4, 10, 12, 14, -1, -1, -1,
-                2,  4, 10, 12, 14, -1, -1, -1,
-                0,  2,  4, 10, 12, 14, -1, -1,
-                6, 10, 12, 14, -1, -1, -1, -1,
-                0,  6, 10, 12, 14, -1, -1, -1,
-                2,  6, 10, 12, 14, -1, -1, -1,
-                0,  2,  6, 10, 12, 14, -1, -1,
-                4,  6, 10, 12, 14, -1, -1, -1,
-                0,  4,  6, 10, 12, 14, -1, -1,
-                2,  4,  6, 10, 12, 14, -1, -1,
-                0,  2,  4,  6, 10, 12, 14, -1,
-                8, 10, 12, 14, -1, -1, -1, -1,
-                0,  8, 10, 12, 14, -1, -1, -1,
-                2,  8, 10, 12, 14, -1, -1, -1,
-                0,  2,  8, 10, 12, 14, -1, -1,
-                4,  8, 10, 12, 14, -1, -1, -1,
-                0,  4,  8, 10, 12, 14, -1, -1,
-                2,  4,  8, 10, 12, 14, -1, -1,
-                0,  2,  4,  8, 10, 12, 14, -1,
-                6,  8, 10, 12, 14, -1, -1, -1,
-                0,  6,  8, 10, 12, 14, -1, -1,
-                2,  6,  8, 10, 12, 14, -1, -1,
-                0,  2,  6,  8, 10, 12, 14, -1,
-                4,  6,  8, 10, 12, 14, -1, -1,
-                0,  4,  6,  8, 10, 12, 14, -1,
-                2,  4,  6,  8, 10, 12, 14, -1,
-                0,  2,  4,  6,  8, 10, 12, 14};
-
-inline
-fn __shake128_squeezenblocks(reg u256[7] state, stack u8[REJ_UNIFORM_AVX_BUFLEN] out)
-      -> reg u256[7], stack u8[REJ_UNIFORM_AVX_BUFLEN]
-{
-  inline int i;
-
-  for i = 0 to GENMATRIX_NBLOCKS 
-  {
-      state, out[i*SHAKE128_RATE:SHAKE128_RATE] = __shake128_squeezeblock(state, out[i*SHAKE128_RATE:SHAKE128_RATE]);
-  }
-  return state, out;
-}
-
-inline
-fn __shake128_squeezenblocks4x(reg ptr u256[25] state, reg ptr u8[REJ_UNIFORM_AVX_BUFLEN] h0 h1 h2 h3)
-  -> reg ptr u256[25], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN], reg ptr u8[REJ_UNIFORM_AVX_BUFLEN]
-{
-  inline int i;
-
-  for i = 0 to GENMATRIX_NBLOCKS
-  {
-    state, h0[i*SHAKE128_RATE:SHAKE128_RATE], h1[i*SHAKE128_RATE:SHAKE128_RATE], h2[i*SHAKE128_RATE:SHAKE128_RATE], h3[i*SHAKE128_RATE:SHAKE128_RATE] = __shake128_squeezeblock4x(state, h0[i*SHAKE128_RATE:SHAKE128_RATE], h1[i*SHAKE128_RATE:SHAKE128_RATE], h2[i*SHAKE128_RATE:SHAKE128_RATE], h3[i*SHAKE128_RATE:SHAKE128_RATE]);
-  }
-
-  return state, h0, h1, h2, h3;
-}
-
-inline
-fn __rej_uniform(reg ptr u16[KYBER_N] rp, reg u64 offset, reg ptr u8[SHAKE128_RATE] buf, inline int buflen) ->  reg u64, stack u16[KYBER_N]
-{
-  reg u16 val0 val1;
-  reg u16 t;
-  reg u64 pos ctr;
-  reg u8 fl1 fl2;
-  reg bool b;
-
-  ctr = offset;
-  pos = 0;
-
-  ?{ "<=u" = b }= #CMP_64(ctr, KYBER_N - 1);
-  fl1 = #SETcc(b);
-
-  ?{ "<=u" = b } = #CMP_64(pos, buflen - 3);
-  fl2 = #SETcc(b);
-
-  _, _, _, _, b = #TEST_8(fl1, fl2);
-
-  while(!b)
-  {
-    val0 = (16u)buf[(int)pos];
-    pos += 1;
-
-    t   = (16u)buf[(int)pos];
-    val1 = t;
-    val1 >>= 4;
-
-    t &= 0x0F;
-    t <<= 8;
-    val0 |= t;
-    pos += 1;
-
-    t   = (16u)buf[(int)pos];
-    t <<= 4;
-    val1 |= t;
-    pos += 1;
-
-    if(val0 < KYBER_Q)
-    {
-      rp[(int)ctr] = val0;
-      ctr += 1;
-    }
-
-    if(ctr < KYBER_N)
-    {
-      if(val1 < KYBER_Q)
-      {
-        rp[(int)ctr] = val1;
-        ctr += 1;
-      }
-    }
-
-    ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 1);
-    fl1 = #SETcc(b);
-
-    ?{ "<=u" = b } = #CMP_64(pos, buflen - 3);
-    fl2 = #SETcc(b);
-
-    _, _, _, _, b = #TEST_8(fl1, fl2);
-  }
-
-  return ctr, rp;
-}
-
-u8 ru_ones_s = 1;
-u16 ru_mask_s = 0x0FFF;
-u8[32] ru_idx8_s = {0, 1, 1, 2, 3, 4, 4, 5,
-                 6, 7, 7, 8, 9, 10, 10, 11,
-                 4, 5, 5, 6, 7, 8, 8, 9,
-                 10, 11, 11, 12, 13, 14, 14, 15};
-
-fn _rej_uniform_avx(reg ptr u16[KYBER_N] rp, reg ptr u8[REJ_UNIFORM_AVX_BUFLEN] buf) -> reg u64, reg ptr u16[KYBER_N]
-{
-  reg u256 f0 f1 g0 g1 g2 g3;
-  reg u256 bound ones mask idx8;
-  reg u128 f t l h;
-  reg u64 pos ctr t64 t64_1 t64_2 t64_3;
-  reg u64 good;
-  reg u16 val0 val1 t16;
-  reg ptr u8[2048] idxp;
-  reg u8 fl1 fl2;
-  reg bool b;
-
-  idxp = ru_idx;
-
-  bound = jqx16[u256 0];
-  ctr = 0;
-  pos = 0;
-  ones = #VPBROADCAST_32u8(ru_ones_s);
-  mask = #VPBROADCAST_16u16(ru_mask_s);
-  idx8 = ru_idx8_s[u256 0];
-
-  ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 32);
-  fl1 = #SETcc(b);
-
-  ?{ "<=u" = b } = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 56);
-  fl2 = #SETcc(b);
-
-   _, _, _, _, b = #TEST_8(fl1, fl2);
-
-  while(!b)
-  {
-    f0 = #VPERMQ(buf.[u256 (int)pos], 0x94);
-    f1 = #VPERMQ(buf.[u256 24 + (int)pos], 0x94);
-    f0 = #VPSHUFB_256(f0, idx8);
-    f1 = #VPSHUFB_256(f1, idx8);
-    g0 = #VPSRL_16u16(f0, 4);
-    g1 = #VPSRL_16u16(f1, 4);
-    f0 = #VPBLEND_16u16(f0, g0, 0xAA);
-    f1 = #VPBLEND_16u16(f1, g1, 0xAA);
-    f0 = #VPAND_256(f0, mask);
-    f1 = #VPAND_256(f1, mask);
-
-    g0 = #VPCMPGT_16u16(bound, f0);
-    g1 = #VPCMPGT_16u16(bound, f1);
-
-    g0 = #VPACKSS_16u16(g0, g1);
-    good = #VPMOVMSKB_u256u64(g0);
-
-    t64 = good;
-    t64 &= 0xFF;
-    g0 = (256u) #VMOV(idxp[u64 (int)t64]);
-
-    t64_1 = good;
-    t64_1 >>= 16;
-    t64_1 &= 0xFF;
-    l = #VMOV(idxp[u64 (int)t64_1]);
-
-    t64_2 = good;
-    t64_2 >>= 8;
-    t64_2 &= 0xFF;
-    g1 = (256u) #VMOV(idxp[u64 (int)t64_2]);
-
-    t64_3 = good;
-    t64_3 >>= 24;
-    t64_3 &= 0xFF;
-    h = #VMOV(idxp[u64 (int)t64_3]);
-
-    g0 = #VINSERTI128(g0, l, 1);
-
-    _, _, _, _, _, t64 = #POPCNT_64(t64);
-    _, _, _, _, _, t64_1 = #POPCNT_64(t64_1);
-    t64 += ctr;
-
-    g1 = #VINSERTI128(g1, h, 1);
-
-    t64_1 += t64;
-    _, _, _, _, _, t64_2 = #POPCNT_64(t64_2);
-    t64_2 += t64_1;
-    _, _, _, _, _, t64_3 = #POPCNT_64(t64_3);
-    t64_3 += t64_2;
-
-    g2 = #VPADD_32u8(g0, ones);
-    g0 = #VPUNPCKL_32u8(g0, g2);
-    g3 = #VPADD_32u8(g1, ones);
-    g1 = #VPUNPCKL_32u8(g1, g3);
-
-    f0 = #VPSHUFB_256(f0, g0);
-    f1 = #VPSHUFB_256(f1, g1);
-
-    rp.[u128 2*(int)ctr] = (128u)f0;
-    rp.[u128 2*(int)t64] = #VEXTRACTI128(f0, 1);
-    rp.[u128 2*(int)t64_1] = (128u)f1;
-    rp.[u128 2*(int)t64_2] = #VEXTRACTI128(f1, 1);
-
-    ctr = t64_3;
-
-    ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 32);
-    fl1 = #SETcc(b);
-
-    pos += 48;
-    ?{ "<=u" = b } = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 56);
-    fl2 = #SETcc(b);
-
-     _, _, _, _, b = #TEST_8(fl1, fl2);
-  }
-
-  ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 8);
-  fl1 = #SETcc(b);
-
-  ?{ "<=u" = b } = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 16);
-  fl2 = #SETcc(b);
-
-   _, _, _, _, b = #TEST_8(fl1, fl2);
-
-  t64 = 0x5555;
-  while(!b)
-  {
-    f = buf.[u128 (int)pos];
-    f = #VPSHUFB_128(f, idx8);
-    t = #VPSRL_8u16(f, 4);
-    f = #VPBLEND_8u16(f, t, 0xAA);
-    f = #VPAND_128(f, mask);
-
-    t = #VPCMPGT_8u16(bound, f);
-    good = #VPMOVMSKB_u128u64(t);
-
-    good = #PEXT_64(good, t64);
-    l = #VMOV(idxp[u64 (int)good]);
-    _, _, _, _, _, good =  #POPCNT_64(good);
-
-    h = #VPADD_16u8(l, ones);
-    l = #VPUNPCKL_16u8(l, h);
-    f = #VPSHUFB_128(f, l);
-
-    rp.[u128 2*(int)ctr] = f;
-    ctr += good;
-
-    pos += 12;
-    ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 8);
-    fl1 = #SETcc(b);
-
-    ?{ "<=u" = b } = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 16);
-    fl2 = #SETcc(b);
-
-     _, _, _, _, b = #TEST_8(fl1, fl2);
-  }
-
-  ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 1);
-  fl1 = #SETcc(b);
-
-  ?{ "<=u" = b } = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 3);
-  fl2 = #SETcc(b);
-
-   _, _, _, _, b = #TEST_8(fl1, fl2);
-
-  while(!b)
-  {
-    val0 = (16u)buf[(int)pos];
-    pos += 1;
-    t16 = (16u)buf[(int)pos];
-    pos += 1;
-    val1 = t16;
-
-    t16 <<= 8;
-    val0 |= t16;
-    val0 &= 0xFFF;
-
-    val1 >>= 4;
-    t16 = (16u)buf[(int)pos];
-    pos += 1;
-    t16 <<= 4;
-    val1 |= t16;
-
-    if(val0 < KYBER_Q)
-    {
-      rp[(int)ctr] = val0;
-      ctr += 1;
-    }
-    if(val1 < KYBER_Q)
-    {
-      if(ctr < KYBER_N)
-      {
-        rp[(int)ctr] = val1;
-        ctr += 1;
-      }
-    }
-
-    ?{ "<=u" = b } = #CMP_64(ctr, KYBER_N - 1);
-    fl1 = #SETcc(b);
-
-    ?{ "<=u" = b } = #CMP_64(pos, REJ_UNIFORM_AVX_BUFLEN - 3);
-    fl2 = #SETcc(b);
-
-    _, _, _, _, b = #TEST_8(fl1, fl2);
-  }
-
-  return ctr, rp;
-}
-
-inline
-fn __gen_matrix(stack u8[KYBER_SYMBYTES] seed, inline int transposed) -> stack u16[KYBER_K*KYBER_VECN]
-{
-  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf0;
-  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf1;
-  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf2;
-  stack u8[REJ_UNIFORM_AVX_BUFLEN] buf3;
-  reg u256[7] statev;
-  stack u64[28] s_state;
-  stack u256[25] state;
-  stack u16[KYBER_K*KYBER_VECN] rr;
-  stack u256 fs;
-  reg u256 f;
-  reg u64 ctr0 ctr1 ctr2 ctr3 tmp;
-  stack u64 ctr0_s;
-  reg u8 flg0 flg1 bflg;
-  reg bool b;
-  reg bool zf;
-
-  inline int i, j;
-
-  f = seed[u256 0];
-  buf0[u256 0] = f;
-  buf1[u256 0] = f;
-  buf2[u256 0] = f;
-  buf3[u256 0] = f;
-  fs = f;
-
-  if(transposed == 1)
-  {
-    buf0[KYBER_SYMBYTES]   = 0;
-    buf0[KYBER_SYMBYTES+1] = 0;
-    buf1[KYBER_SYMBYTES]   = 0;
-    buf1[KYBER_SYMBYTES+1] = 1;
-    buf2[KYBER_SYMBYTES]   = 0;
-    buf2[KYBER_SYMBYTES+1] = 2;
-    buf3[KYBER_SYMBYTES]   = 1;
-    buf3[KYBER_SYMBYTES+1] = 0;
-  }
-  else
-  {
-    buf0[KYBER_SYMBYTES]   = 0;
-    buf0[KYBER_SYMBYTES+1] = 0;
-    buf1[KYBER_SYMBYTES]   = 1;
-    buf1[KYBER_SYMBYTES+1] = 0;
-    buf2[KYBER_SYMBYTES]   = 2;
-    buf2[KYBER_SYMBYTES+1] = 0;
-    buf3[KYBER_SYMBYTES]   = 0;
-    buf3[KYBER_SYMBYTES+1] = 1;
-  }
-
-  state = _shake128_absorb4x_34(state, buf0[0:34], buf1[0:34], buf2[0:34], buf3[0:34]);
-  state, buf0, buf1, buf2, buf3 = __shake128_squeezenblocks4x(state, buf0, buf1, buf2, buf3);
-
-  tmp, rr[0*KYBER_VECN+0*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[0*KYBER_VECN+0*KYBER_N:KYBER_N], buf0);
-  ctr0 = tmp;
-  tmp, rr[0*KYBER_VECN+1*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[0*KYBER_VECN+1*KYBER_N:KYBER_N], buf1);
-  ctr1 = tmp;
-  tmp, rr[0*KYBER_VECN+2*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[0*KYBER_VECN+2*KYBER_N:KYBER_N], buf2);
-  ctr2 = tmp;
-  ctr3, rr[1*KYBER_VECN+0*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[1*KYBER_VECN+0*KYBER_N:KYBER_N], buf3);
-
-  ?{ "<=u" = b } = #CMP_64(ctr0, KYBER_N - 1);
-  flg0 = #SETcc(b);
-
-  ?{ "<=u" = b } = #CMP_64(ctr1, KYBER_N - 1);
-  flg1 = #SETcc(b);
-
-  _, _, _, _, _, bflg = #OR_8(flg0, flg1);
-
-  ?{ "<=u" = b } = #CMP_64(ctr2, KYBER_N - 1);
-  flg0 = #SETcc(b);
-
-  ?{ "<=u" = b } = #CMP_64(ctr3, KYBER_N - 1);
-  flg1 = #SETcc(b);
-
-  _, _, _, _, _, flg0 = #OR_8(flg0, flg1);
-  _, _, _, _, zf, _ = #OR_8(flg0, bflg);
-
-  while (!zf) {
-    state, buf0[0:SHAKE128_RATE], buf1[0:SHAKE128_RATE], buf2[0:SHAKE128_RATE], buf3[0:SHAKE128_RATE] = __shake128_squeezeblock4x(state, buf0[0:SHAKE128_RATE], buf1[0:SHAKE128_RATE], buf2[0:SHAKE128_RATE], buf3[0:SHAKE128_RATE]);
-
-    ctr0, rr[0*KYBER_VECN+0*KYBER_N:KYBER_N] = __rej_uniform(rr[0*KYBER_VECN+0*KYBER_N:KYBER_N], ctr0, buf0[0:SHAKE128_RATE], SHAKE128_RATE);
-    ctr1, rr[0*KYBER_VECN+1*KYBER_N:KYBER_N] = __rej_uniform(rr[0*KYBER_VECN+1*KYBER_N:KYBER_N], ctr1, buf1[0:SHAKE128_RATE], SHAKE128_RATE);
-    ctr2, rr[0*KYBER_VECN+2*KYBER_N:KYBER_N] = __rej_uniform(rr[0*KYBER_VECN+2*KYBER_N:KYBER_N], ctr2, buf2[0:SHAKE128_RATE], SHAKE128_RATE);
-    ctr3, rr[1*KYBER_VECN+0*KYBER_N:KYBER_N] = __rej_uniform(rr[1*KYBER_VECN+0*KYBER_N:KYBER_N], ctr3, buf3[0:SHAKE128_RATE], SHAKE128_RATE);
-
-    ?{ "<=u" = b } = #CMP_64(ctr0, KYBER_N - 1);
-    flg0 = #SETcc(b);
-
-    ?{ "<=u" = b } = #CMP_64(ctr1, KYBER_N - 1);
-    flg1 = #SETcc(b);
-
-    _, _, _, _, _, bflg = #OR_8(flg0, flg1);
-
-    ?{ "<=u" = b } = #CMP_64(ctr2, KYBER_N - 1);
-    flg0 = #SETcc(b);
-
-    ?{ "<=u" = b } = #CMP_64(ctr3, KYBER_N - 1);
-    flg1 = #SETcc(b);
-
-    _, _, _, _, _, flg0 = #OR_8(flg0, flg1);
-    _, _, _, _, zf, _ = #OR_8(flg0, bflg);
-  }
-  
-  f = fs;
-  buf0[u256 0] = f;
-  buf1[u256 0] = f;
-  buf2[u256 0] = f;
-  buf3[u256 0] = f;
-  fs = f;
-
-  if(transposed == 1)
-  {
-    buf0[KYBER_SYMBYTES]   = 1;
-    buf0[KYBER_SYMBYTES+1] = 1;
-    buf1[KYBER_SYMBYTES]   = 1;
-    buf1[KYBER_SYMBYTES+1] = 2;
-    buf2[KYBER_SYMBYTES]   = 2;
-    buf2[KYBER_SYMBYTES+1] = 0;
-    buf3[KYBER_SYMBYTES]   = 2;
-    buf3[KYBER_SYMBYTES+1] = 1;
-  }
-  else
-  {
-    buf0[KYBER_SYMBYTES]   = 1;
-    buf0[KYBER_SYMBYTES+1] = 1;
-    buf1[KYBER_SYMBYTES]   = 2;
-    buf1[KYBER_SYMBYTES+1] = 1;
-    buf2[KYBER_SYMBYTES]   = 0;
-    buf2[KYBER_SYMBYTES+1] = 2;
-    buf3[KYBER_SYMBYTES]   = 1;
-    buf3[KYBER_SYMBYTES+1] = 2;
-  }
-
-  state = _shake128_absorb4x_34(state, buf0[0:34], buf1[0:34], buf2[0:34], buf3[0:34]);
-  state, buf0, buf1, buf2, buf3 = __shake128_squeezenblocks4x(state, buf0, buf1, buf2, buf3);
-
-  tmp, rr[1*KYBER_VECN+1*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[1*KYBER_VECN+1*KYBER_N:KYBER_N], buf0);
-  ctr0 = tmp;
-  tmp, rr[1*KYBER_VECN+2*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[1*KYBER_VECN+2*KYBER_N:KYBER_N], buf1);
-  ctr1 = tmp;
-  tmp, rr[2*KYBER_VECN+0*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[2*KYBER_VECN+0*KYBER_N:KYBER_N], buf2);
-  ctr2 = tmp;
-  ctr3, rr[2*KYBER_VECN+1*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[2*KYBER_VECN+1*KYBER_N:KYBER_N], buf3);
-
-  ?{ "<=u" = b } = #CMP_64(ctr0, KYBER_N - 1);
-  flg0 = #SETcc(b);
-
-  ?{ "<=u" = b } = #CMP_64(ctr1, KYBER_N - 1);
-  flg1 = #SETcc(b);
-
-  _, _, _, _, _, bflg = #OR_8(flg0, flg1);
-
-  ?{ "<=u" = b } = #CMP_64(ctr2, KYBER_N - 1);
-  flg0 = #SETcc(b);
-
-  ?{ "<=u" = b } = #CMP_64(ctr3, KYBER_N - 1);
-  flg1 = #SETcc(b);
-
-  _, _, _, _, _, flg0 = #OR_8(flg0, flg1);
-  _, _, _, _, zf, _ = #OR_8(flg0, bflg);
-
-
-  while(!zf) {
-    state, buf0[0:SHAKE128_RATE], buf1[0:SHAKE128_RATE], buf2[0:SHAKE128_RATE], buf3[0:SHAKE128_RATE] = __shake128_squeezeblock4x(state, buf0[0:SHAKE128_RATE], buf1[0:SHAKE128_RATE], buf2[0:SHAKE128_RATE], buf3[0:SHAKE128_RATE]);
-
-    ctr0, rr[1*KYBER_VECN+1*KYBER_N:KYBER_N] = __rej_uniform(rr[1*KYBER_VECN+1*KYBER_N:KYBER_N], ctr0, buf0[0:SHAKE128_RATE], SHAKE128_RATE);
-    ctr1, rr[1*KYBER_VECN+2*KYBER_N:KYBER_N] = __rej_uniform(rr[1*KYBER_VECN+2*KYBER_N:KYBER_N], ctr1, buf1[0:SHAKE128_RATE], SHAKE128_RATE);
-    ctr2, rr[2*KYBER_VECN+0*KYBER_N:KYBER_N] = __rej_uniform(rr[2*KYBER_VECN+0*KYBER_N:KYBER_N], ctr2, buf2[0:SHAKE128_RATE], SHAKE128_RATE);
-    ctr3, rr[2*KYBER_VECN+1*KYBER_N:KYBER_N] = __rej_uniform(rr[2*KYBER_VECN+1*KYBER_N:KYBER_N], ctr3, buf3[0:SHAKE128_RATE], SHAKE128_RATE);
-
-    ?{ "<=u" = b } = #CMP_64(ctr0, KYBER_N - 1);
-    flg0 = #SETcc(b);
-
-    ?{ "<=u" = b } = #CMP_64(ctr1, KYBER_N - 1);
-    flg1 = #SETcc(b);
-
-    _, _, _, _, _, bflg = #OR_8(flg0, flg1);
-
-    ?{ "<=u" = b } = #CMP_64(ctr2, KYBER_N - 1);
-    flg0 = #SETcc(b);
-
-    ?{ "<=u" = b } = #CMP_64(ctr3, KYBER_N - 1);
-    flg1 = #SETcc(b);
-
-    _, _, _, _, _, flg0 = #OR_8(flg0, flg1);
-    _, _, _, _, zf, _ = #OR_8(flg0, bflg);
-  }
-
-  f = fs;
-  buf0[u256 0] = f;
-  buf0[KYBER_SYMBYTES]   = 2;
-  buf0[KYBER_SYMBYTES+1] = 2;
-
-  statev = __shake128_absorb34(statev, buf0[0:34]);
-  statev, buf0 = __shake128_squeezenblocks(statev, buf0);
-
-  // spill state to free registers for rejection sampling
-  for i=0 to 7 { s_state[u256 i] = statev[i]; } 
-
-  ctr0, rr[2*KYBER_VECN+2*KYBER_N:KYBER_N] = _rej_uniform_avx(rr[2*KYBER_VECN+2*KYBER_N:KYBER_N], buf0);
-
-  ?{ "<=u" = b } = #CMP_64(ctr0, KYBER_N - 1);
-  bflg = #SETcc(b);
-
-  for i=0 to 7 { statev[i] = s_state[u256 i]; }
-  
-  while(bflg != 0) {
-    statev, buf0[0:SHAKE128_RATE] = __shake128_squeezeblock(statev, buf0[0:SHAKE128_RATE]);
-
-    ctr0, rr[2*KYBER_VECN+2*KYBER_N:KYBER_N] = __rej_uniform(rr[2*KYBER_VECN+2*KYBER_N:KYBER_N], ctr0, buf0[0:SHAKE128_RATE], SHAKE128_RATE);
-
-    ?{ "<=u" = b } = #CMP_64(ctr0, KYBER_N - 1);
-    bflg = #SETcc(b);
-  }
-
-  for i = 0 to KYBER_K
-  {
-    for j = 0 to KYBER_K
-    {
-      rr[i*KYBER_VECN+j*KYBER_N:KYBER_N] = _nttunpack(rr[i*KYBER_VECN+j*KYBER_N:KYBER_N]);
-    }
-  }
-
-  return rr;
-}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/indcpa.jinc b/src/kem/kyber/libjade_kyber768_amd64_avx2/indcpa.jinc
deleted file mode 100644
index 9852b48f17..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_avx2/indcpa.jinc
+++ /dev/null
@@ -1,218 +0,0 @@
-from Jade require "crypto_kem/kyber/kyber768/common/params.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/avx2/poly.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/avx2/polyvec.jinc"
-require "gen_matrix.jinc"
-
-inline
-fn __indcpa_keypair_derand(reg u64 pkp, reg u64 skp, reg ptr u8[KYBER_SYMBYTES] coins)
-{
-  stack u64 spkp sskp;
-  stack u16[KYBER_K*KYBER_VECN] aa;
-  stack u16[KYBER_VECN] e pkpv skpv;
-  stack u8[64] buf;
-  stack u8[KYBER_SYMBYTES] publicseed noiseseed;
-  reg u64 t64;
-  reg u8 nonce;
-  inline int i;
-
-  spkp = pkp;
-  sskp = skp;
-
-  buf = _sha3_512_32(buf, coins);
-
-  for i=0 to KYBER_SYMBYTES/8
-  {
-    t64 = buf[u64 i];
-    publicseed[u64 i] = t64;
-    t64 = buf[u64 i + KYBER_SYMBYTES/8];
-    noiseseed[u64 i] = t64;
-  }
-
-  aa = __gen_matrix(publicseed, 0);
-
-  nonce = 0;
-  skpv[0:KYBER_N], skpv[KYBER_N:KYBER_N], skpv[2*KYBER_N:KYBER_N], e[0:KYBER_N] = _poly_getnoise_eta1_4x(skpv[0:KYBER_N], skpv[KYBER_N:KYBER_N], skpv[2*KYBER_N:KYBER_N], e[0:KYBER_N], noiseseed, nonce);
-
-  nonce = 4;
-  e[KYBER_N:KYBER_N], e[2*KYBER_N:KYBER_N], pkpv[0:KYBER_N], pkpv[KYBER_N:KYBER_N] = _poly_getnoise_eta1_4x(e[KYBER_N:KYBER_N], e[2*KYBER_N:KYBER_N], pkpv[0:KYBER_N], pkpv[KYBER_N:KYBER_N], noiseseed, nonce);
-
-  skpv = __polyvec_ntt(skpv);
-  e    = __polyvec_ntt(e);
-
-  for i=0 to KYBER_K
-  {
-    pkpv[i*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(pkpv[i*KYBER_N:KYBER_N], aa[i*KYBER_VECN:KYBER_VECN], skpv);
-    pkpv[i*KYBER_N:KYBER_N] = _poly_frommont(pkpv[i*KYBER_N:KYBER_N]);
-  }
-
-  pkpv = __polyvec_add2(pkpv, e);
-  pkpv = __polyvec_reduce(pkpv);
-
-  pkp = spkp;
-  skp = sskp;
-
-  __polyvec_tobytes(skp, skpv);
-  __polyvec_tobytes(pkp, pkpv);
-
-  pkp += KYBER_POLYVECBYTES;
-
-  for i=0 to KYBER_SYMBYTES/8
-  {
-    t64 = publicseed[u64 i];
-    (u64)[pkp] = t64;
-    pkp += 8;
-  }
-}
-
-// FIXME: E_EPTR
-inline
-fn __indcpa_enc_0(stack u64 sctp, reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed)
-{
-  stack u16[KYBER_VECN] pkpv sp ep bp;
-  stack u16[KYBER_K*KYBER_VECN] aat;
-  stack u16[KYBER_N] k epp v;
-  stack u8[KYBER_SYMBYTES] publicseed;
-  stack ptr u8[KYBER_SYMBYTES] s_noiseseed;
-  reg ptr u8[KYBER_SYMBYTES] lnoiseseed;
-  reg u64 i ctp t64;
-  reg u8 nonce;
-  inline int w;
-
-  pkpv = __polyvec_frombytes(pkp);
-
-  i = 0;
-  pkp += KYBER_POLYVECBYTES;
-  while (i < KYBER_SYMBYTES/8)
-  {
-    t64 = (u64)[pkp];
-    publicseed[u64 (int)i] = t64;
-    pkp += 8;
-    i += 1;
-  }
-
-  k = _poly_frommsg_1(k, msgp);
-
-  s_noiseseed = noiseseed;
-  aat = __gen_matrix(publicseed, 1);
-  lnoiseseed = s_noiseseed;
-
-  nonce = 0;
-  sp[0:KYBER_N], sp[KYBER_N:KYBER_N], sp[2*KYBER_N:KYBER_N], ep[0:KYBER_N] = _poly_getnoise_eta1_4x(sp[0:KYBER_N], sp[KYBER_N:KYBER_N], sp[2*KYBER_N:KYBER_N], ep[0:KYBER_N], lnoiseseed, nonce);
-
-  nonce = 4;
-  ep[KYBER_N:KYBER_N], ep[2*KYBER_N:KYBER_N], epp, bp[0:KYBER_N] = _poly_getnoise_eta1_4x(ep[KYBER_N:KYBER_N], ep[2*KYBER_N:KYBER_N], epp, bp[0:KYBER_N], lnoiseseed, nonce);
-
-  sp = __polyvec_ntt(sp);
-
-  for w=0 to KYBER_K
-  {
-    bp[w*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(bp[w*KYBER_N:KYBER_N], aat[w*KYBER_VECN:KYBER_VECN], sp);
-  }
-
-  v = __polyvec_pointwise_acc(v, pkpv, sp);
-
-  bp = __polyvec_invntt(bp);
-  v = _poly_invntt(v);
-
-  bp = __polyvec_add2(bp, ep);
-  v = _poly_add2(v, epp);
-  v = _poly_add2(v, k);
-  bp = __polyvec_reduce(bp);
-  v  = __poly_reduce(v);
-
-  ctp = sctp;
-  __polyvec_compress(ctp, bp);
-  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
-  v = _poly_compress(ctp, v);
-}
-
-// FIXME: E_EPTR
-inline
-fn __indcpa_enc_1(reg ptr u8[KYBER_INDCPA_BYTES] ctp, reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed) -> reg ptr u8[KYBER_INDCPA_BYTES]
-{
-  stack u16[KYBER_VECN] pkpv sp ep bp;
-  stack u16[KYBER_K*KYBER_VECN] aat;
-  stack u16[KYBER_N] k epp v;
-  stack u8[KYBER_SYMBYTES] publicseed;
-  stack ptr u8[KYBER_SYMBYTES] s_noiseseed;
-  reg ptr u8[KYBER_SYMBYTES] lnoiseseed;
-  stack ptr u8[KYBER_INDCPA_BYTES] sctp;
-  reg u64 i t64;
-  reg u8 nonce;
-  inline int w;
-
-  sctp = ctp;
-
-  pkpv = __polyvec_frombytes(pkp);
-
-  i = 0;
-  pkp += KYBER_POLYVECBYTES;
-  while (i < KYBER_SYMBYTES/8)
-  {
-    t64 = (u64)[pkp];
-    publicseed[u64 (int)i] = t64;
-    pkp += 8;
-    i += 1;
-  }
-
-  k = _poly_frommsg_1(k, msgp);
-
-  s_noiseseed = noiseseed;
-  aat = __gen_matrix(publicseed, 1);
-  lnoiseseed = s_noiseseed;
-
-  nonce = 0;
-  sp[0:KYBER_N], sp[KYBER_N:KYBER_N], sp[2*KYBER_N:KYBER_N], ep[0:KYBER_N] = _poly_getnoise_eta1_4x(sp[0:KYBER_N], sp[KYBER_N:KYBER_N], sp[2*KYBER_N:KYBER_N], ep[0:KYBER_N], lnoiseseed, nonce);
-
-  nonce = 4;
-  ep[KYBER_N:KYBER_N], ep[2*KYBER_N:KYBER_N], epp, bp[0:KYBER_N] = _poly_getnoise_eta1_4x(ep[KYBER_N:KYBER_N], ep[2*KYBER_N:KYBER_N], epp, bp[0:KYBER_N], lnoiseseed, nonce);
-
-  sp = __polyvec_ntt(sp);
-    
-  for w=0 to KYBER_K
-  {
-    bp[w*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(bp[w*KYBER_N:KYBER_N], aat[w*KYBER_VECN:KYBER_VECN], sp);
-  }
-
-  v = __polyvec_pointwise_acc(v, pkpv, sp);
-
-  bp = __polyvec_invntt(bp);
-  v = _poly_invntt(v);
-
-  bp = __polyvec_add2(bp, ep);
-  v = _poly_add2(v, epp);
-  v = _poly_add2(v, k);
-  bp = __polyvec_reduce(bp);
-  v  = __poly_reduce(v);
-
-  ctp = sctp;
-  ctp[0:KYBER_POLYVECCOMPRESSEDBYTES] = __polyvec_compress_1(ctp[0:KYBER_POLYVECCOMPRESSEDBYTES], bp);
-  ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v = _poly_compress_1(ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v);
-
-  return ctp;
-}
-
-
-inline
-fn __indcpa_dec(reg ptr u8[KYBER_INDCPA_MSGBYTES] msgp, reg u64 ctp, reg u64 skp) -> reg ptr u8[KYBER_INDCPA_MSGBYTES]
-{
-  stack u16[KYBER_N] t v mp;
-  stack u16[KYBER_VECN] bp skpv;
-
-  bp = __polyvec_decompress(ctp);
-  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
-  v = _poly_decompress(v, ctp);
-
-  skpv = __polyvec_frombytes(skp);
-  
-  bp = __polyvec_ntt(bp);
-  t = __polyvec_pointwise_acc(t, skpv, bp);
-  t = _poly_invntt(t);
-
-  mp = _poly_sub(mp, v, t);
-  mp = __poly_reduce(mp);
-  
-  msgp, mp = _poly_tomsg_1(msgp, mp);
-
-  return msgp;
-}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.jazz b/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.jazz
deleted file mode 100644
index 325177a63a..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.jazz
+++ /dev/null
@@ -1,66 +0,0 @@
-require "indcpa.jinc"
-from Jade require "common/tofromstack.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/avx2/verify.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/kem.jinc"
-
-export fn jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(reg u64 public_key secret_key coins) -> reg u64
-{
-  reg u64 r;
-  stack u8[2*KYBER_SYMBYTES] stack_coins;
-
-  public_key = public_key;
-  secret_key = secret_key;
-  stack_coins = __tostack64u8(stack_coins, coins);
-  __crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber768_amd64_avx2_keypair(reg u64 public_key secret_key) -> reg u64
-{
-  reg u64 r;
-  stack u8[2*KYBER_SYMBYTES] stack_coins;
-
-  public_key = public_key;
-  secret_key = secret_key;
-  stack_coins = #randombytes(stack_coins);
-  __crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber768_amd64_avx2_enc_derand(reg u64 ciphertext shared_secret public_key coins) -> reg u64
-{
-  reg u64 r;
-  stack u8[KYBER_SYMBYTES] stack_coins;
-  
-  ciphertext = ciphertext;
-  shared_secret = shared_secret;
-  public_key = public_key;
-  stack_coins = __tostack32u8(stack_coins, coins);
-  __crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber768_amd64_avx2_enc(reg u64 ciphertext shared_secret public_key) -> reg u64
-{
-  reg u64 r;
-  stack u8[KYBER_SYMBYTES] stack_coins;
-
-  ciphertext = ciphertext;
-  shared_secret = shared_secret;
-  public_key = public_key;
-  stack_coins = #randombytes(stack_coins);
-  __crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber768_amd64_avx2_dec(reg u64 shared_secret ciphertext secret_key) -> reg u64
-{
-  reg u64 r;
-  __crypto_kem_dec_jazz(shared_secret, ciphertext, secret_key);
-  ?{}, r = #set0();
-  return r;
-}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/.deps/kem.s.d b/src/kem/kyber/libjade_kyber768_amd64_ref/.deps/kem.s.d
deleted file mode 100644
index b8388f8b2e..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_ref/.deps/kem.s.d
+++ /dev/null
@@ -1 +0,0 @@
-kem.s: kem.jazz /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/ref/params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/ref/kem.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/ref/indcpa.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/ref/poly.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/reduce.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_ref_DIRTY.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/common/fips202_params.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/ref1/keccak1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/ref1/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600_globals.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/keccak/keccak1600/amd64/spec/keccakf1600.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/zetas.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/ref/polyvec.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/common/amd64/ref/gen_matrix.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/crypto_kem/kyber/kyber768/amd64/ref/verify.jinc /home/oqs/oqs/temp/liboqs/scripts/copy_from_upstream/repos/libjade/src/common/tofromstack.jinc
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/Makefile b/src/kem/kyber/libjade_kyber768_amd64_ref/Makefile
deleted file mode 100644
index 42a9eef0b6..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_ref/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-SAFETY_FLAGS := -nocheckalignment
-SRCS := kem.jazz
-include ../../../../../Makefile.common
-
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/include/api.h b/src/kem/kyber/libjade_kyber768_amd64_ref/api.h
similarity index 100%
rename from src/kem/kyber/libjade_kyber768_amd64_ref/include/api.h
rename to src/kem/kyber/libjade_kyber768_amd64_ref/api.h
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/indcpa.jinc b/src/kem/kyber/libjade_kyber768_amd64_ref/indcpa.jinc
deleted file mode 100644
index 5e0ac7566b..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_ref/indcpa.jinc
+++ /dev/null
@@ -1,254 +0,0 @@
-
-// from Jade require "crypto_kem/kyber/kyber768/common/params.jinc" // TODO: when hakyber avx2
-from Jade require "crypto_kem/kyber/kyber768/amd64/ref/params.jinc"
-
-from Jade require "crypto_kem/kyber/kyber768/amd64/ref/poly.jinc"
-from Jade require "crypto_kem/kyber/kyber768/amd64/ref/polyvec.jinc"
-from Jade require "common/keccak/common/fips202_ref_DIRTY.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/ref/gen_matrix.jinc"
-
-inline
-fn __indcpa_keypair_derand(reg u64 pkp, reg u64 skp, reg ptr u8[KYBER_SYMBYTES] randomnessp)
-{
-  stack u16[KYBER_K * KYBER_VECN] a;
-  stack u16[KYBER_VECN] e pkpv skpv;
-  stack u8[64] buf;
-  stack u8[KYBER_SYMBYTES] publicseed noiseseed;
-  stack u8[32] inbuf;
-  reg u64 t64;
-  reg u64 zero;
-  reg u8 nonce;
-  inline int i;
-
-  stack u64 spkp;
-  stack u64 sskp;
-
-  spkp = pkp;
-  sskp = skp;
-
-  for i=0 to KYBER_SYMBYTES/8
-  {
-    t64 = randomnessp[u64 i];
-    inbuf[u64 i] = t64;
-  }
-
-  buf = _sha3_512_32(buf, inbuf);
-
-  for i=0 to KYBER_SYMBYTES/8
-  {
-    t64 = buf[u64 i];
-    publicseed[u64 i] = t64;
-    t64 = buf[u64 i + KYBER_SYMBYTES/8];
-    noiseseed[u64 i] = t64;
-  }
-
-  zero = 0; 
-  a = __gen_matrix(publicseed, zero);
-
-  nonce = 0;
-  skpv[0:KYBER_N] = _poly_getnoise(skpv[0:KYBER_N], noiseseed, nonce);
-  nonce = 1;
-  skpv[KYBER_N:KYBER_N] = _poly_getnoise(skpv[KYBER_N:KYBER_N], noiseseed, nonce);
-  nonce = 2;
-  skpv[2*KYBER_N:KYBER_N] = _poly_getnoise(skpv[2*KYBER_N:KYBER_N], noiseseed, nonce);
-
-  nonce = 3;
-  e[0:KYBER_N] = _poly_getnoise(e[0:KYBER_N], noiseseed, nonce);
-  nonce = 4;
-  e[KYBER_N:KYBER_N] = _poly_getnoise(e[KYBER_N:KYBER_N], noiseseed, nonce);
-  nonce = 5;
-  e[2*KYBER_N:KYBER_N] = _poly_getnoise(e[2*KYBER_N:KYBER_N], noiseseed, nonce);
-
-  skpv = __polyvec_ntt(skpv);
-  e    = __polyvec_ntt(e);
-
-  pkpv[0:KYBER_N] = __polyvec_pointwise_acc(a[0:KYBER_VECN], skpv);
-  pkpv[0:KYBER_N] = _poly_frommont(pkpv[0:KYBER_N]);
-  pkpv[KYBER_N:KYBER_N] = __polyvec_pointwise_acc(a[KYBER_VECN:KYBER_VECN], skpv);
-  pkpv[KYBER_N:KYBER_N] = _poly_frommont(pkpv[KYBER_N:KYBER_N]);
-  pkpv[2*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(a[2*KYBER_VECN:KYBER_VECN], skpv);
-  pkpv[2*KYBER_N:KYBER_N] = _poly_frommont(pkpv[2*KYBER_N:KYBER_N]);
-
-  pkpv = __polyvec_add2(pkpv, e);
-  pkpv = __polyvec_reduce(pkpv);
-
-  pkp = spkp;
-  skp = sskp;
-
-  __polyvec_tobytes(skp, skpv);
-  __polyvec_tobytes(pkp, pkpv);
-
-  pkp += KYBER_POLYVECBYTES; 
-  for i=0 to KYBER_SYMBYTES/8
-  {
-    t64 = publicseed[u64 i];
-    (u64)[pkp] = t64;
-    pkp += 8;
-  }
-}
-
-inline
-fn __indcpa_enc(stack u64 sctp, reg ptr u8[32] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed)
-{
-  stack u16[KYBER_VECN] pkpv sp ep bp;
-  stack u16[KYBER_K*KYBER_VECN] aat;
-  stack u16[KYBER_N] k poly epp v poly0 poly1 poly2;
-  stack u8[KYBER_SYMBYTES] publicseed;
-  reg u64 i j t64;
-  reg u64 ctp;
-  reg u16 t;
-  reg u8 nonce;
-
-  pkpv = __polyvec_frombytes(pkp);
-
-  i = 0;
-  pkp += KYBER_POLYVECBYTES;
-  #bounded
-  while (i < KYBER_SYMBYTES/8)
-  {
-    t64 = (u64)[pkp];
-    publicseed.[u64 8 * (int)i] = t64;
-    pkp += 8;
-    i += 1;
-  }
-
-  k = _i_poly_frommsg(k, msgp);
-
-  aat = __gen_matrix(publicseed, 1);
-
-  nonce = 0;
-  sp[0:KYBER_N] = _poly_getnoise(sp[0:KYBER_N], noiseseed, nonce);
-  nonce = 1;
-  sp[KYBER_N:KYBER_N] = _poly_getnoise(sp[KYBER_N:KYBER_N], noiseseed, nonce);
-  nonce = 2;
-  sp[2*KYBER_N:KYBER_N] = _poly_getnoise(sp[2*KYBER_N:KYBER_N], noiseseed, nonce);
-
-  nonce = 3;
-  ep[0:KYBER_N] = _poly_getnoise(ep[0:KYBER_N], noiseseed, nonce);
-  nonce = 4;
-  ep[KYBER_N:KYBER_N] = _poly_getnoise(ep[KYBER_N:KYBER_N], noiseseed, nonce);
-  nonce = 5;
-  ep[2*KYBER_N:KYBER_N] = _poly_getnoise(ep[2*KYBER_N:KYBER_N], noiseseed, nonce);
-
-  nonce = 6;
-  epp = _poly_getnoise(epp, noiseseed, nonce);
-
-  sp = __polyvec_ntt(sp);
-    
-  bp[0:KYBER_N] = __polyvec_pointwise_acc(aat[0:KYBER_VECN], sp);
-  bp[KYBER_N:KYBER_N]= __polyvec_pointwise_acc(aat[KYBER_VECN:KYBER_VECN], sp);
-  bp[2*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(aat[2*KYBER_VECN:KYBER_VECN], sp);
-  
-  v = __polyvec_pointwise_acc(pkpv, sp);
-
-  bp = __polyvec_invntt(bp);
-  v = _poly_invntt(v);
-
-  bp = __polyvec_add2(bp, ep);
-  v = _poly_add2(v, epp);
-  v = _poly_add2(v, k);
-  bp = __polyvec_reduce(bp);
-  v  = __poly_reduce(v);
-
-  ctp = sctp;
-  __polyvec_compress(ctp, bp);
-  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
-  v = _poly_compress(ctp, v);
-}
-
-inline
-fn __iindcpa_enc(reg ptr u8[KYBER_CT_LEN] ctp, reg ptr u8[32] msgp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] noiseseed) -> reg ptr u8[KYBER_CT_LEN]
-{
-  stack u16[KYBER_VECN] pkpv sp ep bp;
-  stack u16[KYBER_K*KYBER_VECN] aat;
-  stack u16[KYBER_N] k poly epp v poly0 poly1 poly2;
-  stack u8[KYBER_SYMBYTES] publicseed;
-  reg u64 i j t64;
-  reg u16 t;
-  reg u8 nonce;
-  stack ptr u8[KYBER_CT_LEN] sctp;
-
-  sctp = ctp;
-
-  pkpv = __polyvec_frombytes(pkp);
-
-  i = 0;
-  pkp += KYBER_POLYVECBYTES;
-  #bounded
-  while (i < KYBER_SYMBYTES/8)
-  {
-    t64 = (u64)[pkp];
-    publicseed.[u64 8*(int)i] = t64;
-    pkp += 8;
-    i += 1;
-  }
-
-  k = _i_poly_frommsg(k, msgp);
-
-  aat = __gen_matrix(publicseed, 1);
-
-  nonce = 0;
-  sp[0:KYBER_N] = _poly_getnoise(sp[0:KYBER_N], noiseseed, nonce);
-  nonce = 1;
-  sp[KYBER_N:KYBER_N] = _poly_getnoise(sp[KYBER_N:KYBER_N], noiseseed, nonce);
-  nonce = 2;
-  sp[2*KYBER_N:KYBER_N] = _poly_getnoise(sp[2*KYBER_N:KYBER_N], noiseseed, nonce);
-
-  nonce = 3;
-  ep[0:KYBER_N] = _poly_getnoise(ep[0:KYBER_N], noiseseed, nonce);
-  nonce = 4;
-  ep[KYBER_N:KYBER_N] = _poly_getnoise(ep[KYBER_N:KYBER_N], noiseseed, nonce);
-  nonce = 5;
-  ep[2*KYBER_N:KYBER_N] = _poly_getnoise(ep[2*KYBER_N:KYBER_N], noiseseed, nonce);
-
-  nonce = 6;
-  epp = _poly_getnoise(epp, noiseseed, nonce);
-
-  sp = __polyvec_ntt(sp);
-    
-  bp[0:KYBER_N] = __polyvec_pointwise_acc(aat[0:KYBER_VECN], sp);
-  bp[KYBER_N:KYBER_N]= __polyvec_pointwise_acc(aat[KYBER_VECN:KYBER_VECN], sp);
-  bp[2*KYBER_N:KYBER_N] = __polyvec_pointwise_acc(aat[2*KYBER_VECN:KYBER_VECN], sp);
-  
-  v = __polyvec_pointwise_acc(pkpv, sp);
-
-  bp = __polyvec_invntt(bp);
-  v = _poly_invntt(v);
-
-  bp = __polyvec_add2(bp, ep);
-  v = _poly_add2(v, epp);
-  v = _poly_add2(v, k);
-  bp = __polyvec_reduce(bp);
-  v  = __poly_reduce(v);
-
-  ctp = sctp;
-  ctp[0:KYBER_POLYVECCOMPRESSEDBYTES] = __i_polyvec_compress(ctp[0:KYBER_POLYVECCOMPRESSEDBYTES], bp);
-  ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v = _i_poly_compress(ctp[KYBER_POLYVECCOMPRESSEDBYTES:KYBER_POLYCOMPRESSEDBYTES], v);
-
-  return ctp;
-}
-
-
-inline
-fn __indcpa_dec(reg ptr u8[KYBER_MSGBYTES] msgp, reg u64 ctp, reg u64 skp) -> reg ptr u8[KYBER_N/8]
-{
-  stack u16[KYBER_N] t v mp;
-  stack u16[KYBER_VECN] bp skpv;
-
-  bp = __polyvec_decompress(ctp);
-  ctp += KYBER_POLYVECCOMPRESSEDBYTES;
-  v = _poly_decompress(v, ctp);
-
-  skpv = __polyvec_frombytes(skp);
-  
-  bp = __polyvec_ntt(bp);
-  t = __polyvec_pointwise_acc(skpv, bp);
-  t = _poly_invntt(t );
-
-  mp = _poly_sub(mp, v, t);
-  mp = __poly_reduce(mp);
-  
-  msgp, mp = _i_poly_tomsg(msgp, mp);
-
-  return msgp;
-}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/kem.jazz b/src/kem/kyber/libjade_kyber768_amd64_ref/kem.jazz
deleted file mode 100644
index 0f74b72634..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_ref/kem.jazz
+++ /dev/null
@@ -1,66 +0,0 @@
-require "params.jinc"
-require "kem.jinc"
-from Jade require "common/tofromstack.jinc"
-
-export fn jade_kem_kyber_kyber768_amd64_ref_keypair_derand(reg u64 public_key secret_key coins) -> reg u64
-{
-  reg u64 r;
-  stack u8[2*KYBER_SYMBYTES] stack_coins;
-
-  public_key = public_key;
-  secret_key = secret_key;
-  stack_coins = __tostack64u8(stack_coins, coins);
-  _crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber768_amd64_ref_keypair(reg u64 public_key secret_key) -> reg u64
-{
-  reg u64 r;
-  stack u8[2*KYBER_SYMBYTES] stack_coins;
-
-  public_key = public_key;
-  secret_key = secret_key;
-  stack_coins = #randombytes(stack_coins);
-  _crypto_kem_keypair_derand_jazz(public_key, secret_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber768_amd64_ref_enc_derand(reg u64 ciphertext shared_secret public_key coins) -> reg u64
-{
-  reg u64 r;
-  stack u8[KYBER_SYMBYTES] stack_coins;
-  
-  ciphertext = ciphertext;
-  shared_secret = shared_secret;
-  public_key = public_key;
-  stack_coins = __tostack32u8(stack_coins, coins);
-  _crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber768_amd64_ref_enc(reg u64 ciphertext shared_secret public_key) -> reg u64
-{
-  reg u64 r;
-  stack u8[KYBER_SYMBYTES] stack_coins;
-
-  ciphertext = ciphertext;
-  shared_secret = shared_secret;
-  public_key = public_key;
-  stack_coins = #randombytes(stack_coins);
-  _crypto_kem_enc_derand_jazz(ciphertext, shared_secret, public_key, stack_coins);
-  ?{}, r = #set0();
-  return r;
-}
-
-export fn jade_kem_kyber_kyber768_amd64_ref_dec(reg u64 shared_secret ciphertext secret_key) -> reg u64
-{
-  reg u64 r;
-  __crypto_kem_dec_jazz(shared_secret, ciphertext, secret_key);
-  ?{}, r = #set0();
-  return r;
-}
-
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/kem.jinc b/src/kem/kyber/libjade_kyber768_amd64_ref/kem.jinc
deleted file mode 100644
index 12f2dbdb3d..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_ref/kem.jinc
+++ /dev/null
@@ -1,150 +0,0 @@
-
-// from Jade require "crypto_kem/kyber/kyber768/common/params.jinc" // TODO: when hakyber avx2
-from Jade require "crypto_kem/kyber/kyber768/amd64/ref/params.jinc"
-
-require "indcpa.jinc"
-require "verify.jinc"
-
-#[returnaddress="stack"]
-fn _crypto_kem_keypair_derand_jazz(reg u64 pkp, reg u64 skp, reg ptr u8[KYBER_SYMBYTES*2] randomnessp)
-{
-  stack ptr u8[KYBER_SYMBYTES*2] s_randomnessp;
-  reg ptr u8[KYBER_SYMBYTES] randomnessp1 randomnessp2;
-
-  stack u8[32] h_pk;
-  stack u64 s_skp s_pkp;
-  reg u64 t64;
-  inline int i;
-
-  s_randomnessp = randomnessp;
-  s_pkp = pkp;
-  s_skp = skp;
-
-  randomnessp1 = randomnessp[0:KYBER_SYMBYTES];
-  __indcpa_keypair_derand(pkp, skp, randomnessp1);
-
-  skp = s_skp;
-  skp += KYBER_POLYVECBYTES;
-  pkp = s_pkp;
-
-  for i=0 to KYBER_INDCPA_PUBLICKEYBYTES/8
-  {
-    t64 = (u64)[pkp + 8*i];
-    (u64)[skp] = t64;
-    skp += 8;
-  }
-
-  s_skp = skp;
-  pkp = s_pkp;
-  t64 = KYBER_POLYVECBYTES + KYBER_SYMBYTES;
-  h_pk = _sha3_256(h_pk, pkp, t64);
-  skp = s_skp;
-
-  for i=0 to 4
-  {
-    t64 = h_pk[u64 i];
-    (u64)[skp] = t64;
-    skp += 8;
-  }
-
-  randomnessp = s_randomnessp;
-  randomnessp2 = randomnessp[KYBER_SYMBYTES:KYBER_SYMBYTES];
-  for i=0 to KYBER_SYMBYTES/8
-  {
-    t64 = randomnessp2[u64 i];
-    (u64)[skp] = t64;
-    skp += 8;
-  }
-}
-
-#[returnaddress="stack"]
-fn _crypto_kem_enc_derand_jazz(reg u64 ctp, reg u64 shkp, reg u64 pkp, reg ptr u8[KYBER_SYMBYTES] randomnessp)
-{
-  inline int i;
-
-  stack u8[KYBER_SYMBYTES * 2] buf kr;
-  stack u64 s_pkp s_ctp s_shkp;
-  reg u64 t64;
-
-  s_pkp = pkp;
-  s_ctp = ctp;
-  s_shkp = shkp;
-
-  for i=0 to KYBER_SYMBYTES/8
-  {
-    t64 = randomnessp[u64 i];
-    kr[u64 i] = t64;
-  }
-
-  buf[0:KYBER_SYMBYTES] = _sha3_256_32(buf[0:KYBER_SYMBYTES], kr[0:KYBER_SYMBYTES]);
-
-  pkp = s_pkp;
-
-  t64 = KYBER_PUBLICKEYBYTES;
-  buf[KYBER_SYMBYTES:KYBER_SYMBYTES] = _sha3_256(buf[KYBER_SYMBYTES:KYBER_SYMBYTES], pkp, t64);
-
-  kr = _sha3_512_64(kr, buf);
-
-  pkp = s_pkp;
-
-  __indcpa_enc(s_ctp, buf[0:KYBER_SYMBYTES], pkp, kr[KYBER_SYMBYTES:KYBER_SYMBYTES]);
-
-  ctp = s_ctp;
-  t64 = KYBER_CT_LEN;
-  kr[KYBER_SYMBYTES:KYBER_SYMBYTES] = _sha3_256(kr[KYBER_SYMBYTES:KYBER_SYMBYTES], ctp, t64);
-
-  shkp = s_shkp;
-  t64 = KYBER_SSBYTES;
-  _shake256_64(shkp, t64, kr);
-}
-
-inline
-fn __crypto_kem_dec_jazz(reg u64 shkp, reg u64 ctp, reg u64 skp)
-{
-  stack u8[KYBER_CT_LEN] ctpc;
-  stack u8[2*KYBER_SYMBYTES] kr buf;
-  stack u64 s_skp s_ctp s_shkp;
-  reg u64 pkp hp zp t64 cnd;
-  inline int i;
-
-  s_shkp = shkp;
-  s_ctp = ctp;
-
-  buf[0:KYBER_MSGBYTES] = __indcpa_dec(buf[0:KYBER_MSGBYTES], ctp, skp);
-
-  hp = #LEA(skp + 32); // avoid -lea
-  //hp += 24 * KYBER_K * KYBER_N>>3;
-  hp += 3 * KYBER_K * KYBER_N;
-
-  for i=0 to KYBER_SYMBYTES/8
-  {
-    t64 = (u64)[hp + 8*i];
-    buf.[u64 KYBER_SYMBYTES + 8*i] = t64;
-  }
-
-  s_skp = skp;
-
-  kr = _sha3_512_64(kr, buf);
-
-  pkp = s_skp;
-  //pkp += 12 * KYBER_K * KYBER_N>>3;
-  pkp += 12 * KYBER_K * 32;
-
-  ctpc = __iindcpa_enc(ctpc, buf[0:KYBER_SYMBYTES], pkp, kr[KYBER_SYMBYTES:KYBER_SYMBYTES]);
-
-  ctp = s_ctp;
-  cnd = __verify(ctp, ctpc);
-
-  zp = s_skp;
-  zp += 64;
-  //zp += 24 * KYBER_K * KYBER_N>>3;
-  zp += 3 * KYBER_K * KYBER_N;
-  kr[0:KYBER_SYMBYTES] = __cmov(kr[0:KYBER_SYMBYTES], zp, cnd);
-
-  t64 = KYBER_CT_LEN;
-  kr[KYBER_SYMBYTES:KYBER_SYMBYTES] = _sha3_256(kr[KYBER_SYMBYTES:KYBER_SYMBYTES], ctp, t64);
-
-  shkp = s_shkp;
-  t64 = KYBER_SSBYTES;
-  _shake256_64(shkp, t64, kr);
-}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/params.jinc b/src/kem/kyber/libjade_kyber768_amd64_ref/params.jinc
deleted file mode 100644
index fc02c70843..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_ref/params.jinc
+++ /dev/null
@@ -1,21 +0,0 @@
-// Note1: This file was imported from hakyber, to ensure that the parameters that are defined
-// accordingly to their usage in the correctness proof. An alternative version of this file exists
-// in crypto_kem/kyber/kyber768/common/params.jinc and these will be merged once hakyber avx2 is
-// integrated into libjade.
-
-param int KYBER_Q = 3329;
-param int KYBER_N = 256;
-param int KYBER_K = 3;
-param int KYBER_VECN =  KYBER_K * KYBER_N;
-
-param int KYBER_SYMBYTES = 32;
-param int KYBER_ETA = 2;
-param int KYBER_POLYBYTES = 384;
-param int KYBER_POLYVECBYTES = (KYBER_K * KYBER_POLYBYTES);
-param int KYBER_POLYCOMPRESSEDBYTES = 128;
-param int KYBER_POLYVECCOMPRESSEDBYTES = (KYBER_K * 320);
-param int KYBER_MSGBYTES = KYBER_SYMBYTES;
-param int KYBER_CT_LEN = KYBER_POLYVECCOMPRESSEDBYTES + KYBER_POLYCOMPRESSEDBYTES;
-param int KYBER_INDCPA_PUBLICKEYBYTES = KYBER_POLYVECBYTES + KYBER_SYMBYTES;
-param int KYBER_PUBLICKEYBYTES = KYBER_INDCPA_PUBLICKEYBYTES;
-param int KYBER_SSBYTES = 32;
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/poly.jinc b/src/kem/kyber/libjade_kyber768_amd64_ref/poly.jinc
deleted file mode 100644
index b36b903367..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_ref/poly.jinc
+++ /dev/null
@@ -1,731 +0,0 @@
-// Note1: the previous kyber768/amd64/ref libjade implementation used the generic version of this
-// file, defined in crypto_kem/kyber/common/amd64/ref/poly.jinc. This file was imported from
-// hakyber and the main differences are: 1) the usage of KYBER_INDCPA_MSGBYTES (this file does
-// not); 2) get_noise;
-
-// Note2: although the standard practice in libjade is to require files within the same folder as
-// `require "file"`, the following `require` statement does not follow that rule to make explicit
-// the fact that we are including a `params.jinc` file that is not under a `common` folder. Other
-// instances of such cases exist in this folder.
-
-// from Jade require "crypto_kem/kyber/kyber768/common/params.jinc" // TODO: when hakyber avx2
-from Jade require "crypto_kem/kyber/kyber768/amd64/ref/params.jinc"
-
-from Jade require "crypto_kem/kyber/common/amd64/ref/reduce.jinc"
-from Jade require "common/keccak/common/fips202_ref_DIRTY.jinc"
-from Jade require "crypto_kem/kyber/common/amd64/ref/zetas.jinc"
-
-fn _poly_add2(reg ptr u16[KYBER_N] rp bp) -> stack u16[KYBER_N]
-{
-  reg u16 a;
-  reg u16 b;
-  reg u16 r;
-  reg u64 i;
-
-  i = 0;
-
-  #bounded
-  while (i < KYBER_N) {
-    a = rp[(int)i];
-    b = bp[(int)i];
-    r = a + b;
-    rp[(int)i] = r;
-    i += 1;
-  }
-  return rp;
-}
-
-fn _poly_csubq(reg ptr u16[KYBER_N] rp) -> reg ptr u16[KYBER_N]
-{
-  reg u64 i;
-  reg u16 t;
-  reg u16 b;
-
-  i = 0;
-  #bounded
-  while (i < KYBER_N)
-  {
-    t = rp[(int)i];
-    t -= KYBER_Q;
-    b = t;
-    b >>s= 15;
-    b &= KYBER_Q;
-    t += b;
-    rp[(int)i] = t;
-    i += 1;
-  }
-  return rp;
-}
-
-fn _poly_basemul(reg ptr u16[KYBER_N] rp, reg const ptr u16[KYBER_N] ap bp) -> reg ptr u16[KYBER_N]
-{
-  reg u64 offset;
-  reg u16 zeta;
-  reg u16 r0;
-  reg u16 r1;
-  reg u16 a0;
-  reg u16 a1;
-  reg u16 b0;
-  reg u16 b1;
-  reg u16 t;
-  reg ptr u16[128] zetasp;
-  reg u64 zetasctr;
-  reg u64 i;
-
-  stack ptr u16[KYBER_N] srp;
-
-  srp = rp;
-
-  zetasctr = 64;
-  i = 0;
-
-  #bounded
-  while(i < KYBER_N)
-  {
-    zetasp = jzetas;
-    zeta = zetasp[(int)zetasctr];
-    zetasctr += 1;
-    
-    a0 = ap[(int)i];
-    b0 = bp[(int)i];
-    i += 1;
-    a1 = ap[(int)i];
-    b1 = bp[(int)i];
-    i -= 1;
-
-    r0 = __fqmul(a1, b1);
-    r0 = __fqmul(r0, zeta);
-    t  = __fqmul(a0, b0);
-    r0 += t;
-
-    r1 = __fqmul(a0, b1);
-    t  = __fqmul(a1, b0);
-    r1 += t;
-
-    rp = srp;
-    rp[(int)i]   = r0;
-    i += 1;
-    rp[(int)i] = r1;
-    srp = rp;
-
-
-    zeta = -zeta;
-
-    i += 1;
-    a0 = ap[(int)i];
-    b0 = bp[(int)i];
-    i += 1;
-    a1 = ap[(int)i];
-    b1 = bp[(int)i];
-    i -= 1;
-
-    r0 = __fqmul(a1, b1);
-    r0 = __fqmul(r0, zeta);
-    t  = __fqmul(a0, b0);
-    r0 += t;
-
-    r1 = __fqmul(a0, b1);
-    t  = __fqmul(a1, b0);
-    r1 += t;
-
-    rp = srp;
-    rp[(int)i]   = r0;
-    i += 1;
-    rp[(int)i] = r1;
-    srp = rp;
-    
-    i += 1;
-  }
-  return rp;
-}
-
-inline
-fn __poly_reduce(reg ptr u16[KYBER_N] rp) -> reg ptr u16[KYBER_N]
-{
-  reg u64 j; 
-  reg u16 t;
-  j = 0;
-  #bounded
-  while (j < KYBER_N) 
-  {
-    t = rp[(int)j];
-    t = __barrett_reduce(t);
-    rp[(int)j] = t;
-    j += 1;
-  }
-  return rp;
-}
-
-fn _poly_compress(reg u64 rp, reg ptr u16[KYBER_N] a) -> reg ptr u16[KYBER_N]
-{
-  reg u16 t;
-  reg u32 d0, d1;
-  reg u64 i j;
-
-  a = _poly_csubq(a);
-
-  i = 0;
-  j = 0;
-  #bounded
-  while(i < 128)
-  {
-    t  = a[(int)j];
-    d0 = (32u)t;
-    d0 <<= 4;
-    d0 += 1665;
-    d0 *= 80635;
-    d0 >>= 28;
-    d0 &= 0xf;
-    j += 1;
-    t  = a[(int)j];
-    d1 = (32u)t;
-    d1 <<= 4;
-    d1 += 1665;
-    d1 *= 80635;
-    d1 >>= 28;
-    d1 &= 0xf;
-    d1 <<= 4;
-    d0 |= d1;
-    (u8)[rp+i] = d0;
-    i += 1;
-    j += 1;
-  }
-  return a;
-}
-
-fn _i_poly_compress(reg ptr u8[KYBER_POLYCOMPRESSEDBYTES] rp, reg ptr u16[KYBER_N] a) -> reg ptr u8[KYBER_POLYCOMPRESSEDBYTES], reg ptr u16[KYBER_N]
-{
-  reg u16 t;
-  reg u32 d0, d1;
-  reg u64 i j;
-
-  a = _poly_csubq(a);
-
-  i = 0;
-  j = 0;
-  #bounded
-  while(i < 128)
-  {
-    t  = a[(int)j];
-    d0 = (32u)t;
-    d0 <<= 4;
-    d0 += 1665;
-    d0 *= 80635;
-    d0 >>= 28;
-    d0 &= 0xf;
-    j += 1;
-    t  = a[(int)j];
-    d1 = (32u)t;
-    d1 <<= 4;
-    d1 += 1665;
-    d1 *= 80635;
-    d1 >>= 28;
-    d1 &= 0xf;
-    d1 <<= 4;
-    d0 |= d1;
-    rp[(int) i] = d0;
-    i += 1;
-    j += 1;
-  }
-  return rp, a;
-}
-
-
-fn _poly_decompress(reg ptr u16[KYBER_N] rp, reg u64 ap) -> stack u16[KYBER_N]
-{
-  reg u8 t;
-  reg u16 d0, d1;
-  reg u64 i j;
-
-  i = 0;
-  j = 0;
-
-  #bounded
-  while (i < 128) {
-    t  = (u8)[ap+i];
-    d0 = (16u)t;
-    d1 = (16u)t;
-    d0 &= 0xf;
-    d1 >>= 4;
-    d0 *= KYBER_Q;
-    d1 *= KYBER_Q;
-    d0 += 8;
-    d1 += 8;
-    d0 >>= 4;
-    d1 >>= 4;
-    rp[(int)j] = d0;
-    j += 1;
-    rp[(int)j] = d1;
-    j += 1;
-    i += 1;
-  }
-  return rp;
-}
-
-fn _poly_frombytes(reg ptr u16[KYBER_N] rp, reg u64 ap) -> reg ptr u16[KYBER_N]
-{
-  reg u8 c0, c1, c2;
-  reg u16 d0, d1, t;
-  inline int i;
-
-  for i = 0 to KYBER_N/2
-  {
-    c0 = (u8)[ap+3*i];
-    c1 = (u8)[ap+3*i+1];
-    c2 = (u8)[ap+3*i+2];
-    d0 = (16u)c0;
-    t  = (16u)c1;
-    t &= 0xf;
-    t <<= 8;
-    d0 |= t;
-    d1 = (16u)c2;
-    d1 <<= 4;
-    t  = (16u)c1;
-    t >>= 4;
-    d1 |= t;
-    rp[2*i]   = d0;
-    rp[2*i+1] = d1;
-  }
-  return rp;
-}
-
-param int DMONT   = 1353;      /* (1ULL << 32) % KYBER_Q */
-
-fn _poly_frommont(reg ptr u16[KYBER_N] rp) -> reg ptr u16[KYBER_N]
-{
-  reg u64 i;
-  reg u16 r;
-  reg u16 dmont;
-
-  dmont = DMONT;
-  
-  i = 0;
-  #bounded
-  while (i < KYBER_N)
-  {
-    r = rp[(int)i];
-    r = __fqmul(r, dmont);
-    rp[(int)i] = r;
-    i += 1;
-  }
-  return rp; 
-}
-
-fn _poly_frommsg(reg ptr u16[KYBER_N] rp, reg u64 ap) -> stack u16[KYBER_N]
-{
-  reg u8 c;
-  reg u16 t;
-  inline int i;
-  inline int j;
-
-  for i = 0 to 32
-  {
-    c = (u8)[ap + i];
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+1] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+2] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+3] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+4] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+5] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+6] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+7] = t;
-    c >>= 1;
-  }
-  return rp;
-}
-
-
-fn _i_poly_frommsg(reg ptr u16[KYBER_N] rp, reg ptr u8[32] ap) -> stack u16[KYBER_N]
-{
-  reg u8 c;
-  reg u16 t;
-  inline int i;
-  inline int j;
-
-  for i = 0 to 32
-  {
-    c = ap[i];
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+1] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+2] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+3] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+4] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+5] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+6] = t;
-    c >>= 1;
-
-    t = (16u)c; 
-    t &= 1;
-    t *= (KYBER_Q+1)/2;
-    rp[8*i+7] = t;
-    c >>= 1;
-  }
-  return rp;
-}
-
-#[returnaddress=stack]
-fn _poly_getnoise(reg ptr u16[KYBER_N] rp, reg ptr u8[KYBER_SYMBYTES] seed, reg u8 nonce) -> reg ptr u16[KYBER_N]
-{
-  stack u8[33] extseed;   /* 33 = KYBER_SYMBYTES +1 */
-  stack u8[128] buf;      /* 128 = KYBER_ETA*KYBER_N/4 */
-  reg u64 outlen;
-  reg u8 c,a,b;
-  reg u16 t;
-  reg u64 i j;
-  inline int k;
-
-  stack ptr u16[KYBER_N] srp;
-
-  srp = rp;
-  
-  for k = 0 to KYBER_SYMBYTES
-  {
-    c = seed[k];
-    extseed[k] = c;
-  }
-  extseed[KYBER_SYMBYTES] = nonce;
-
-  buf = _shake256_128_33(buf, extseed);
-
-  rp = srp;
-
-  i = 0;
-  j = 0;
-  #bounded
-  while (i < 128) {
-    c = buf[(int)i];
-    a = c;
-    a &= 0x55;
-
-    c >>= 1;
-    c &= 0x55;
-    c += a;
-
-    a = c;
-    a &= 0x3;
-    b = c;
-    b >>= 2;
-    b &= 0x3;
-    a -= b;
-    t = (16s)a;
-    rp[(int)j] = t;
-    a = c;
-    a >>= 4;
-    a &= 0x3;
-    b = c >> 6;
-    b &= 0x3;
-    a -= b;
-    t = (16s)a;
-    j += 1;
-    rp[(int)j] = t;
-    i += 1;
-    j += 1;
-  }
-  
-  return rp;
-}
-
-fn _poly_invntt(reg ptr u16[KYBER_N] rp) -> reg ptr u16[KYBER_N]
-{
-  reg u64 len;  
-  reg u64 start;
-  reg u64 j;
-  reg u64 cmp;
-  reg u64 offset;
-  
-  reg u16 zeta;
-  reg u16 t;
-  reg u16 s;
-  reg u16 m;
-
-  reg ptr u16[128] zetasp;
-  reg u64 zetasctr;
-
-  zetasp = jzetas_inv;
-  zetasctr = 0;
-
-  len = 2;
-  #bounded
-  while (len <= 128)
-  {
-    start = 0;
-    #bounded
-    while (start < 256)
-    {
-      zeta = zetasp[(int)zetasctr];
-      zetasctr += 1;
-
-      j = start;
-      cmp = #LEA(start + len); // avoid -lea
-      #bounded
-      while (j < cmp)
-      {
-        offset = #LEA(j + len); // avoid -lea
-        s = rp[(int)offset];
-        t = rp[(int)j];
-        m = s; m += t; // valgrind 16 bit lea not implemented
-        m = __barrett_reduce(m);
-        rp[(int)j] = m;
-        t -= s;
-        t = __fqmul(t, zeta);
-        rp[(int)offset] = t;
-        j += 1;
-      }
-      start = #LEA(j + len); // avoid -lea
-    }
-    len <<= 1;
-  }
-
-  zeta = zetasp[127];
-  j = 0;
-  #bounded
-  while (j < KYBER_N) 
-  {
-    t = rp[(int)j];
-    t = __fqmul(t, zeta);
-    rp[(int)j] = t;
-    j += 1;
-  }
-  return rp;
-}
-
-fn _poly_ntt(reg ptr u16[KYBER_N] rp) -> reg ptr u16[KYBER_N]
-{
-  reg u64 len;  
-  reg u64 start;
-  reg u64 j;
-  reg u64 cmp;
-  reg u64 offset;
-  
-  reg u16 zeta;
-  reg u16 t;
-  reg u16 s;
-  reg u16 m;
-
-  reg ptr u16[128] zetasp;
-  reg u64 zetasctr;
-
-  zetasp = jzetas;
-  zetasctr = 0;
-  len = 128;
-  #bounded
-  while (len >= 2)
-  {
-    start = 0;
-    #bounded
-    while (start < 256)
-    {
-      zetasctr += 1;
-      zeta = zetasp[(int)zetasctr];
-      j = start;
-      cmp = #LEA(start + len);
-      #bounded
-      while (j < cmp)
-      {
-        offset = #LEA(j + len);
-        t = rp[(int)offset];
-        t = __fqmul(t, zeta);
-        s = rp[(int)j];
-        m = s;
-        m -= t;
-        rp[(int)offset] = m;
-        t += s;
-        rp[(int)j] = t;
-        j += 1;
-      }
-      start = #LEA(j + len);
-    }
-    len >>= 1;
-  }
-
-  rp = __poly_reduce(rp);
-
-  return rp;
-}
-
-fn _poly_sub(reg ptr u16[KYBER_N] rp ap bp) -> reg ptr u16[KYBER_N]
-{
-  reg u16 a;
-  reg u16 b;
-  reg u16 r;
-  reg u64 i;
-
-  i = 0;
-  #bounded
-  while (i < KYBER_N) {
-    a = ap[(int)i];
-    b = bp[(int)i];
-    r = a - b;
-    rp[(int)i] = r;
-    i += 1;
-  }
-  return rp;
-}
-
-fn _poly_tobytes(reg u64 rp, reg ptr u16[KYBER_N] a) -> reg ptr u16[KYBER_N]
-{
-  reg u16 t0, t1, d;
-  reg u64 i j;
-
-  a = _poly_csubq(a);
-
-  i = 0;
-  j = 0;
-  #bounded
-  while (i < KYBER_N)
-  {
-    t0 = a[(int)i]; 
-    i += 1;
-    t1 = a[(int)i]; 
-    i += 1;
-    d  = t0;
-    d  &= 0xff;
-    (u8)[rp+j] = d;
-    j += 1;
-    t0 >>= 8;
-    d = t1;
-    d &= 0xf;
-    d <<= 4;
-    d |= t0;
-    (u8)[rp+j] = d;
-    j += 1;
-    t1 >>= 4;
-    (u8)[rp+j] = t1;
-    j += 1;
-  }
-  return a;
-}
-
-fn _poly_tomsg(reg u64 rp, reg ptr u16[KYBER_N] a) -> reg ptr u16[KYBER_N]
-{
-  reg u16 t;
-  reg u8 r;
-  reg u32 d;
-  inline int i j;
-
-  a = _poly_csubq(a); 
-
-  for i = 0 to 32
-  {
-    r = 0;
-    for j = 0 to 8
-    {
-      t = a[8*i+j]; 
-      d = (32u)t; 
-      d <<= 1;
-      d += 1665;
-      d *= 80635;
-      d >>= 28;
-      d &= 1;
-      d <<= j;
-      r  |= d;
-    }
-
-    (u8)[rp+i] = r;
-  }
-  return a;
-}
-
-fn _i_poly_tomsg(reg ptr u8[KYBER_N/8] rp, reg ptr u16[KYBER_N] a) -> reg ptr u8[KYBER_N/8], reg ptr u16[KYBER_N]
-{
-  reg u16 t;
-  reg u8 r;
-  reg u32 d;
-  inline int i j;
-
-  a = _poly_csubq(a); 
-
-  for i = 0 to 32
-  {
-    r = 0;
-    for j = 0 to 8
-    {
-      t = a[8*i+j]; 
-      d = (32u)t; 
-      d <<= 1;
-      d += 1665;
-      d *= 80635;
-      d >>= 28;
-      d &= 1;
-      d <<= j;
-      r  |= d;
-    }
-
-    rp[i] = r;
-  }
-
-  return rp, a;
-}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/polyvec.jinc b/src/kem/kyber/libjade_kyber768_amd64_ref/polyvec.jinc
deleted file mode 100644
index a9b3fec91c..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_ref/polyvec.jinc
+++ /dev/null
@@ -1,285 +0,0 @@
-require "poly.jinc"
-
-inline
-fn __polyvec_add2(stack u16[KYBER_VECN] r, stack u16[KYBER_VECN] b) -> stack u16[KYBER_VECN]
-{
-  r[0:KYBER_N] = _poly_add2(r[0:KYBER_N], b[0:KYBER_N]);
-  r[KYBER_N:KYBER_N] = _poly_add2(r[KYBER_N:KYBER_N], b[KYBER_N:KYBER_N]);
-  r[2*KYBER_N:KYBER_N] = _poly_add2(r[2*KYBER_N:KYBER_N], b[2*KYBER_N:KYBER_N]);
-
-  return r;
-}
-
-inline
-fn __polyvec_csubq(stack u16[KYBER_VECN] r) -> stack u16[KYBER_VECN]
-{
-  r[0:KYBER_N] = _poly_csubq(r[0:KYBER_N]);
-  r[KYBER_N:KYBER_N] = _poly_csubq(r[KYBER_N:KYBER_N]);
-  r[2*KYBER_N:KYBER_N] = _poly_csubq(r[2*KYBER_N:KYBER_N]);
-
-  return r;
-}
-
-inline
-fn __polyvec_compress(reg u64 rp, stack u16[KYBER_VECN] a)
-{
-  stack u16[KYBER_VECN] aa;
-  reg u16 c, b;
-  reg u16 d;
-  reg u64[4] t;
-  reg u64 i j;
-  inline int k;
-
-  i = 0;
-  j = 0;
-  
-  aa = __polyvec_csubq(a);
-
-  #bounded
-  while (i < KYBER_VECN)
-  {
-    for k = 0 to 4
-    {
-      t[k] = (64u)aa[(int) i];
-      i += 1;
-      t[k] <<= 10;
-      t[k] += 1665;
-      t[k] *= 1290167;
-      t[k] >>= 32;
-      t[k] &= 0x3ff;
-    }
-
-    c = t[0];
-    c &= 0xff;
-    (u8)[rp + j] = c;
-    j += 1;
-
-    b = t[0];
-    b >>= 8;
-    c = t[1];
-    c <<= 2;
-    c |= b;
-    (u8)[rp + j] = c;
-    j += 1;
-
-    b = t[1];
-    b >>= 6;
-    c = t[2];
-    c <<= 4;
-    c |= b;
-    (u8)[rp + j] = c;
-    j += 1;
-    
-    b = t[2];
-    b >>= 4;
-    c = t[3];
-    c <<= 6;
-    c |= b;
-    (u8)[rp + j] = c;
-    j += 1;
-
-    
-    t[3] >>= 2;
-    (u8)[rp + j] = t[3];
-    j += 1;
-  }
-}
-
-inline
-fn __i_polyvec_compress(reg ptr u8[KYBER_POLYVECCOMPRESSEDBYTES] rp, stack u16[KYBER_VECN] a) -> reg ptr u8[KYBER_POLYVECCOMPRESSEDBYTES]
-{
-  stack u16[KYBER_VECN] aa;
-  reg u16 c, b;
-  reg u16 d;
-  reg u64[4] t;
-  reg u64 i j;
-  inline int k;
-
-  i = 0;
-  j = 0;
-  
-  aa = __polyvec_csubq(a);
-
-  #bounded
-  while (i < KYBER_VECN)
-  {
-    for k = 0 to 4
-    {
-      t[k] = (64u)aa[(int) i];
-      i += 1;
-      t[k] <<= 10;
-      t[k] += 1665;
-      t[k] *= 1290167;
-      t[k] >>= 32;
-      t[k] &= 0x3ff;
-    }
-
-    c = t[0];
-    c &= 0xff;
-    rp[(int) j] = c;
-    j += 1;
-
-    b = t[0];
-    b >>= 8;
-    c = t[1];
-    c <<= 2;
-    c |= b;
-    rp[(int) j] = c;
-    j += 1;
-
-    b = t[1];
-    b >>= 6;
-    c = t[2];
-    c <<= 4;
-    c |= b;
-    rp[(int) j] = c;
-    j += 1;
-    
-    b = t[2];
-    b >>= 4;
-    c = t[3];
-    c <<= 6;
-    c |= b;
-    rp[(int) j] = c;
-    j += 1;
-
-    
-    t[3] >>= 2;
-    rp[(int) j] = t[3];
-    j += 1;
-  }
-
-  return rp;
-}
-
-inline
-fn __polyvec_decompress(reg u64 ap) -> stack u16[KYBER_VECN]
-{
-  stack u16[KYBER_VECN] r;
-  reg u32[5] t;
-  reg u32 d;
-  reg u64 i j;
-  inline int k;
-
-  i = 0;
-  j = 0;
-  
-  #bounded
-  while (i < KYBER_VECN)
-  {
-    for k = 0 to 5
-    {
-      t[k] = (32u)(u8)[ap + j];
-      j += 1;
-    }
-
-    d = t[1];
-    t[1] >>= 2;
-    d &= 0x3;
-    d <<= 8;
-    t[0] |= d;
-
-    d = t[2];
-    t[2] >>= 4;
-    d &= 0xf;
-    d <<= 6;
-    t[1] |= d;
-
-    d = t[3];
-    t[3] >>= 6;
-    d &= 0x3f;
-    d <<= 4;
-    t[2] |= d;
-
-    d = t[4];
-    d <<= 2;
-    t[3] |= d;
-    
-    for k = 0 to 4
-    {
-      t[k] *= KYBER_Q;
-      t[k] += 512;
-      t[k] >>= 10;
-      r[(int) i] = t[k];
-      i += 1;
-    }
-  }
-  return r;
-}
-
-inline
-fn __polyvec_frombytes(reg u64 ap) -> stack u16[KYBER_VECN]
-{
-  stack u16[KYBER_VECN] r;
-  reg u64 pp;
-
-  pp = ap;
-  r[0:KYBER_N] = _poly_frombytes(r[0:KYBER_N], pp);
-  pp += KYBER_POLYBYTES;
-  r[KYBER_N:KYBER_N] = _poly_frombytes(r[KYBER_N:KYBER_N], pp);
-  pp += KYBER_POLYBYTES;
-  r[2*KYBER_N:KYBER_N] = _poly_frombytes(r[2*KYBER_N:KYBER_N], pp);
-
-  return r;
-}
-
-inline
-fn __polyvec_invntt(stack u16[KYBER_VECN] r) -> stack u16[KYBER_VECN]
-{
-  r[0:KYBER_N] = _poly_invntt(r[0:KYBER_N]);
-  r[KYBER_N:KYBER_N] = _poly_invntt(r[KYBER_N:KYBER_N]);
-  r[2*KYBER_N:KYBER_N] = _poly_invntt(r[2*KYBER_N:KYBER_N]);
-
-  return r;
-}
-
-inline
-fn __polyvec_ntt(stack u16[KYBER_VECN] r) -> stack u16[KYBER_VECN]
-{
-  r[0:KYBER_N] = _poly_ntt(r[0:KYBER_N]);
-  r[KYBER_N:KYBER_N] = _poly_ntt(r[KYBER_N:KYBER_N]);
-  r[2*KYBER_N:KYBER_N] = _poly_ntt(r[2*KYBER_N:KYBER_N]);
-
-  return r;
-}
-
-
-inline
-fn __polyvec_pointwise_acc(stack u16[KYBER_VECN] a, stack u16[KYBER_VECN] b) -> stack u16[KYBER_N]
-{
-  stack u16[KYBER_N] t;
-  stack u16[KYBER_N] r;
-
-  r = _poly_basemul(r, a[0:KYBER_N], b[0:KYBER_N]);
-  t = _poly_basemul(t, a[KYBER_N:KYBER_N], b[KYBER_N:KYBER_N]);
-  r = _poly_add2(r, t);
-  t = _poly_basemul(t, a[2*KYBER_N:KYBER_N], b[2*KYBER_N:KYBER_N]);
-  r = _poly_add2(r, t);
-
-  r = __poly_reduce(r);
-
-  return r;
-}
-
-inline
-fn __polyvec_reduce(stack u16[KYBER_VECN] r) -> stack u16[KYBER_VECN]
-{
-  r[0:KYBER_N] = __poly_reduce(r[0:KYBER_N]);
-  r[KYBER_N:KYBER_N] = __poly_reduce(r[KYBER_N:KYBER_N]);
-  r[2*KYBER_N:KYBER_N] = __poly_reduce(r[2*KYBER_N:KYBER_N]);
-
-  return r;
-}
-
-inline
-fn __polyvec_tobytes(reg u64 rp, stack u16[KYBER_VECN] a)
-{
-  reg u64 pp;
-
-  pp = rp;
-  a[0:KYBER_N] = _poly_tobytes(pp, a[0:KYBER_N]);
-  pp += KYBER_POLYBYTES;
-  a[KYBER_N:KYBER_N] = _poly_tobytes(pp, a[KYBER_N:KYBER_N]);
-  pp += KYBER_POLYBYTES;
-  a[2*KYBER_N:KYBER_N] = _poly_tobytes(pp, a[2*KYBER_N:KYBER_N]);
-}
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/verify.jinc b/src/kem/kyber/libjade_kyber768_amd64_ref/verify.jinc
deleted file mode 100644
index 986916c88a..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_ref/verify.jinc
+++ /dev/null
@@ -1,49 +0,0 @@
-// Note1: KYBER_INDCPA_BYTES vs KYBER_CT_LEN
-
-// from Jade require "crypto_kem/kyber/kyber768/common/params.jinc" // TODO: when hakyber avx2
-from Jade require "crypto_kem/kyber/kyber768/amd64/ref/params.jinc"
-
-inline 
-fn __verify(reg u64 ctp, reg ptr u8[KYBER_CT_LEN] ctpc) -> reg u64
-{
-  reg u64 cnd t64;
-  reg u8 t1 t2;
-  inline int i;
-
-  cnd = 0;
-
-  for i=0 to KYBER_CT_LEN
-  {
-    t1 = ctpc.[i];
-    t2 = (u8)[ctp + i];
-    t1 ^= t2;
-    t64 = (64u)t1;
-    cnd |= t64;
-  }
-
-  cnd = -cnd;
-  cnd >>= 63;
-
-  return cnd;
-}
-
-inline
-fn __cmov(reg ptr u8[KYBER_SYMBYTES] dst, reg u64 src cnd) -> reg ptr u8[KYBER_SYMBYTES]
-{
-  reg u8 t1 t2 bcond;
-  inline int i;
-
-  cnd = -cnd;
-
-  for i=0 to KYBER_SYMBYTES
-  {
-    t1 = dst.[i];
-    t2 = (u8)[src + i];
-    t2 = t2 ^ t1;
-    t2 = t2 & cnd;
-    t1 ^= t2;
-    dst.[u8 i] = t1;
-  }
-
-  return dst;
-}

From 123d4c8a89d5b6966bb51cdf7bd33e8b1042f66e Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 4 Apr 2024 20:20:30 +0200
Subject: [PATCH 37/82] Remove redundant KEM templates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../src/kem/family/kem_scheme.c.libjade       | 46 -------------------
 .../kem/family/kem_scheme_decaps.c.libjade    | 42 -----------------
 .../kem/family/kem_scheme_encaps.c.libjade    | 42 -----------------
 .../kem/family/kem_scheme_keypair.c.libjade   | 33 -------------
 4 files changed, 163 deletions(-)
 delete mode 100644 scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade
 delete mode 100644 scripts/copy_from_upstream/src/kem/family/kem_scheme_decaps.c.libjade
 delete mode 100644 scripts/copy_from_upstream/src/kem/family/kem_scheme_encaps.c.libjade
 delete mode 100644 scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade

diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade
deleted file mode 100644
index 1d1c0f3109..0000000000
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c.libjade
+++ /dev/null
@@ -1,46 +0,0 @@
-
-{% for scheme in schemes -%}
-    {%- for impl in scheme['metadata']['implementations'] %}
-
-        {%- if impl['signature_keypair'] %}
-           {%- set cleankeypair = scheme['metadata'].update({'default_keypair_signature': impl['signature_keypair']}) -%}
-        {%- else %}
-           {%- set cleankeypair = scheme['metadata'].update({'default_keypair_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_keypair"}) -%}
-        {%- endif %}
-
-        {%- if impl['signature_enc'] %}
-           {%- set cleanenc = scheme['metadata'].update({'default_enc_signature': impl['signature_enc']}) -%}
-        {%- else %}
-           {%- set cleanenc = scheme['metadata'].update({'default_enc_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_enc"}) -%}
-        {%- endif %}
-
-        {%- if impl['signature_dec'] %}
-           {%- set cleandec = scheme['metadata'].update({'default_dec_signature': impl['signature_dec']}) -%}
-        {%- else %}
-           {%- set cleandec = scheme['metadata'].update({'default_dec_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_dec"}) -%}
-        {%- endif %}
-
-#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] != scheme['default_implementation'] %}_{{ impl['name'].replace('/', '_') }}{%- endif %}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
-        {%- if impl['signature_keypair'] %}
-extern int {{ impl['signature_keypair'] }}(uint8_t *pk, uint8_t *sk);
-        {%- else %}
-extern int libjade_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name'].replace('/', '_')|upper }}_crypto_kem_keypair(uint8_t *pk, uint8_t *sk);
-        {%- endif %}
-
-        {%- if impl['signature_enc'] %}
-extern int {{ impl['signature_enc'] }}(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
-        {%- else %}
-extern int libjade_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name'].replace('/', '_')|upper }}_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
-        {%- endif %}
-
-        {%- if impl['signature_dec'] %}
-extern int {{ impl['signature_dec'] }}(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
-        {%- else %}
-extern int libjade_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name'].replace('/', '_')|upper }}_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
-        {%- endif %}
-#endif
-    {%- endfor %}
-
-{% endfor -%}
-
-
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme_decaps.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme_decaps.c.libjade
deleted file mode 100644
index 8cd5b3e7fa..0000000000
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme_decaps.c.libjade
+++ /dev/null
@@ -1,42 +0,0 @@
-{% for scheme in schemes -%}
-    {%- for impl in scheme['metadata']['implementations'] if impl['name'] == scheme['default_implementation'] %}
-        {%- if impl['signature_dec'] %}
-           {%- set cleandec = scheme['metadata'].update({'default_dec_signature': impl['signature_dec']}) -%}
-        {%- else %}
-           {%- set cleandec = scheme['metadata'].update({'default_dec_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_dec"}) -%}
-        {%- endif %}
-    {%- endfor %}
-    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
-    {%- if loop.first %}
-    #if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
-    {%- else %}
-#elif defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
-    {%- endif %}
-    {%- if 'required_flags' in impl and impl['required_flags'] %}
-#if defined(OQS_DIST_BUILD)
-	if ({%- for flag in impl['required_flags'] -%}OQS_CPU_has_extension(OQS_CPU_EXT_{{ flag|upper }}){%- if not loop.last %} && {% endif -%}{%- endfor -%}) {
-#endif /* OQS_DIST_BUILD */
-    {%- endif -%}
-           {%- if impl['signature_dec'] %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) {{ impl['signature_dec'] }}(shared_secret, ciphertext, secret_key);
-           {%- else %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name'].replace('/', '_')|upper }}_crypto_kem_dec(shared_secret, ciphertext, secret_key);
-           {%- endif %}
-    {%- if 'required_flags' in impl and impl['required_flags'] %}
-#if defined(OQS_DIST_BUILD)
-	} else {
-		return (OQS_STATUS) {{ scheme['metadata']['default_dec_signature'] }}(shared_secret, ciphertext, secret_key);
-	}
-#endif /* OQS_DIST_BUILD */
-    {%- endif -%}
-    {%- endfor %}
-    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
-#else
-    {%- endif %}
-	return (OQS_STATUS) {{ scheme['metadata']['default_dec_signature'] }}(shared_secret, ciphertext, secret_key);
-    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
-#endif
-    {%- endif %}
-{% endfor -%}
-
-
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme_encaps.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme_encaps.c.libjade
deleted file mode 100644
index 4b2b63e3b6..0000000000
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme_encaps.c.libjade
+++ /dev/null
@@ -1,42 +0,0 @@
-{% for scheme in schemes -%}
-    {%- for impl in scheme['metadata']['implementations'] if impl['name'] == scheme['default_implementation'] %}
-        {%- if impl['signature_enc'] %}
-           {%- set cleanenc = scheme['metadata'].update({'default_enc_signature': impl['signature_enc']}) -%}
-        {%- else %}
-           {%- set cleanenc = scheme['metadata'].update({'default_enc_signature': "PQCLEAN_"+scheme['pqclean_scheme_c']|upper+"_"+scheme['default_implementation']|upper+"_crypto_kem_enc"}) -%}
-        {%- endif %}
-    {%- endfor %}
-    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
-    {%- if loop.first %}
-#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
-    {%- else %}
-#elif defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}){%- endif %}
-    {%- endif %}
-    {%- if 'required_flags' in impl and impl['required_flags'] %}
-#if defined(OQS_DIST_BUILD)
-	if ({%- for flag in impl['required_flags'] -%}OQS_CPU_has_extension(OQS_CPU_EXT_{{ flag|upper }}){%- if not loop.last %} && {% endif -%}{%- endfor -%}) {
-#endif /* OQS_DIST_BUILD */
-    {%- endif -%}
-           {%- if impl['signature_enc'] %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) {{ impl['signature_enc'] }}(ciphertext, shared_secret, public_key);
-           {%- else %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name'].replace('/', '_')|upper }}_crypto_kem_enc(ciphertext, shared_secret, public_key);
-           {%- endif %}
-    {%- if 'required_flags' in impl and impl['required_flags'] %}
-#if defined(OQS_DIST_BUILD)
-	} else {
-		return (OQS_STATUS) {{ scheme['metadata']['default_enc_signature'] }}(ciphertext, shared_secret, public_key);
-	}
-#endif /* OQS_DIST_BUILD */
-    {%- endif -%}
-    {%- endfor %}
-    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
-#else
-    {%- endif %}
-	return (OQS_STATUS) {{ scheme['metadata']['default_enc_signature'] }}(ciphertext, shared_secret, public_key);
-    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
-#endif
-    {%- endif %}
-{% endfor -%}
-
-
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade b/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
deleted file mode 100644
index f43e3897cd..0000000000
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme_keypair.c.libjade
+++ /dev/null
@@ -1,33 +0,0 @@
-{% for scheme in schemes -%}
-    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
-        {%- if loop.first %}
-#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
-        {%- else %}
-#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
-        {%- endif %}
-        {%- if 'required_flags' in impl and impl['required_flags'] %}
-#if defined(OQS_DIST_BUILD)
-	if ({%- for flag in impl['required_flags'] -%}OQS_CPU_has_extension(OQS_CPU_EXT_{{ flag|upper }}){%- if not loop.last %} && {% endif -%}{%- endfor -%}) {
-#endif /* OQS_DIST_BUILD */
-        {%- endif -%}
-        {%- if impl['name'] in scheme['libjade_implementations'] %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_enc(public_key, secret_key);
-        {%- else %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_enc(public_key, secret_key);
-        {%- endif %}
-        {%- if 'required_flags' in impl and impl['required_flags'] %}
-#if defined(OQS_DIST_BUILD)
-	} else {
-		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_enc(public_key, secret_key);
-	}
-#endif /* OQS_DIST_BUILD */
-        {%- endif -%}
-    {%- endfor %}
-    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
-#else
-    {%- endif %}
-    return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_enc(public_key, secret_key);
-    {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
-#endif
-    {%- endif %}
-{% endfor -%}
\ No newline at end of file

From 4e926676a263f6c6d4b514f6a0425c77dba8cdf7 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 4 Apr 2024 20:34:51 +0200
Subject: [PATCH 38/82] Update KEM template to accomodate new dir structure

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../src/kem/family/CMakeLists.txt.libjade                 | 2 +-
 src/kem/kyber/CMakeLists.txt                              | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
index c7eebc27d9..0afa4610a6 100644
--- a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
@@ -32,7 +32,7 @@ if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}{%- if 'alias_sch
 if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}_{{ impl['name'].replace('/', '_') }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}{%- endif %})
     add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} OBJECT {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
         {%- endif %}
-    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/include)
+    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }})
     target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
         {%- if impl['name'] != scheme['default_implementation'] and impl['required_flags'] -%}
            {%- set opts %}{% for flag in impl['required_flags'] %}{%- if flag != 'arm_neon' %} -m{%- if flag == 'bmi1' -%} bmi {% elif flag == 'sse4_1' -%} sse4.1 {% elif flag == 'pclmulqdq' -%} pclmul {% else -%}{{ flag }} {% endif %}{% endif -%}{% endfor %}{% endset %}
diff --git a/src/kem/kyber/CMakeLists.txt b/src/kem/kyber/CMakeLists.txt
index 2c3edafa0a..08444ec4ec 100644
--- a/src/kem/kyber/CMakeLists.txt
+++ b/src/kem/kyber/CMakeLists.txt
@@ -93,14 +93,14 @@ endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_512)
     add_library(kyber_512_amd64_ref OBJECT kem_kyber_512.c libjade_kyber512_amd64_ref/api.c libjade_kyber512_amd64_ref/kem.s)
-    target_include_directories(kyber_512_amd64_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_amd64_ref/include)
+    target_include_directories(kyber_512_amd64_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_amd64_ref)
     target_include_directories(kyber_512_amd64_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_amd64_ref>)
 endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
     add_library(kyber_512_amd64_avx2 OBJECT libjade_kyber512_amd64_avx2/api.c libjade_kyber512_amd64_avx2/kem.s)
-    target_include_directories(kyber_512_amd64_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_amd64_avx2/include)
+    target_include_directories(kyber_512_amd64_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_amd64_avx2)
     target_include_directories(kyber_512_amd64_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     target_compile_options(kyber_512_amd64_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_amd64_avx2>)
@@ -108,14 +108,14 @@ endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_768)
     add_library(kyber_768_amd64_ref OBJECT kem_kyber_768.c libjade_kyber768_amd64_ref/api.c libjade_kyber768_amd64_ref/kem.s)
-    target_include_directories(kyber_768_amd64_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_amd64_ref/include)
+    target_include_directories(kyber_768_amd64_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_amd64_ref)
     target_include_directories(kyber_768_amd64_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_amd64_ref>)
 endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
     add_library(kyber_768_amd64_avx2 OBJECT libjade_kyber768_amd64_avx2/api.c libjade_kyber768_amd64_avx2/kem.s)
-    target_include_directories(kyber_768_amd64_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_amd64_avx2/include)
+    target_include_directories(kyber_768_amd64_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_amd64_avx2)
     target_include_directories(kyber_768_amd64_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     target_compile_options(kyber_768_amd64_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_amd64_avx2>)

From d0e72a9564d2158976cc899d03b156ba6245ec2b Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 4 Apr 2024 20:47:56 +0200
Subject: [PATCH 39/82] Debug: tweak unix.yml

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/unix.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/unix.yml b/.github/workflows/unix.yml
index 0f52aa3afb..f6613ee6fc 100644
--- a/.github/workflows/unix.yml
+++ b/.github/workflows/unix.yml
@@ -50,7 +50,7 @@ jobs:
           cd scripts/copy_from_upstream && \
           ! pip3 install -r requirements.txt 2>&1 | grep ERROR && \
           python3 copy_from_upstream.py libjade && \
-          ! git status | grep modified
+          ! git diff
 
   buildcheck:
     name: Check that code passes a basic build before starting heavier tests

From 7f5ec38756c3938796c9c48be93cfbd4e23b6c5d Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 4 Apr 2024 22:05:11 +0200
Subject: [PATCH 40/82] Re-build libjade with jasmin version used in CI

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 src/kem/kyber/libjade_kyber512_amd64_avx2/kem.s | 16 ++++++++--------
 src/kem/kyber/libjade_kyber512_amd64_ref/kem.s  | 16 ++++++++--------
 src/kem/kyber/libjade_kyber768_amd64_avx2/kem.s | 16 ++++++++--------
 src/kem/kyber/libjade_kyber768_amd64_ref/kem.s  | 16 ++++++++--------
 4 files changed, 32 insertions(+), 32 deletions(-)

diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.s b/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.s
index 028d549e66..33a594071e 100644
--- a/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.s
+++ b/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.s
@@ -2676,8 +2676,8 @@ jade_kem_kyber_kyber512_amd64_avx2_keypair:
 	movq	%r12, 88(%rsp)
 	movq	%rbp, 96(%rsp)
 	movq	%rbx, 104(%rsp)
-	movq	%rdi, %rbx
-	movq	%rsi, %rbp
+	movq	%rdi, %rbp
+	movq	%rsi, %rbx
 	movq	%rsp, %rdi
 	movq	$64, %rsi
 	call	__jasmin_syscall_randombytes__
@@ -2707,8 +2707,8 @@ jade_kem_kyber_kyber512_amd64_avx2_keypair_derand:
 	movq	%r12, 88(%rsp)
 	movq	%rbp, 96(%rsp)
 	movq	%rbx, 104(%rsp)
-	movq	%rdi, %rbx
-	movq	%rsi, %rbp
+	movq	%rdi, %rbp
+	movq	%rsi, %rbx
 	movq	%rsp, %rax
 	movb	(%rdx), %cl
 	movb	%cl, (%rax)
@@ -4840,11 +4840,11 @@ L__crypto_kem_enc_derand_jazz$2:
 	ret
 L__crypto_kem_keypair_derand_jazz$1:
 	movq	%rax, 8576(%rsp)
-	movq	%rbx, 8584(%rsp)
-	movq	%rbp, 8592(%rsp)
+	movq	%rbp, 8584(%rsp)
+	movq	%rbx, 8592(%rsp)
 	movq	%rax, %rcx
-	movq	%rbx, 8600(%rsp)
-	movq	%rbp, 8608(%rsp)
+	movq	%rbp, 8600(%rsp)
+	movq	%rbx, 8608(%rsp)
 	leaq	8616(%rsp), %rax
 	leaq	-248(%rsp), %rsp
 	call	L_sha3_512_32$1
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/kem.s b/src/kem/kyber/libjade_kyber512_amd64_ref/kem.s
index 62cc5b987a..61f6b485f9 100644
--- a/src/kem/kyber/libjade_kyber512_amd64_ref/kem.s
+++ b/src/kem/kyber/libjade_kyber512_amd64_ref/kem.s
@@ -5066,8 +5066,8 @@ jade_kem_kyber_kyber512_amd64_ref_keypair:
 	movq	%r12, 80(%rsp)
 	movq	%rbp, 88(%rsp)
 	movq	%rbx, 96(%rsp)
-	movq	%rdi, %rbx
-	movq	%rsi, %rbp
+	movq	%rdi, %rbp
+	movq	%rsi, %rbx
 	movq	%rsp, %rdi
 	movq	$64, %rsi
 	call	__jasmin_syscall_randombytes__
@@ -5095,8 +5095,8 @@ jade_kem_kyber_kyber512_amd64_ref_keypair_derand:
 	movq	%r12, 80(%rsp)
 	movq	%rbp, 88(%rsp)
 	movq	%rbx, 96(%rsp)
-	movq	%rdi, %rbx
-	movq	%rsi, %rbp
+	movq	%rdi, %rbp
+	movq	%rsi, %rbx
 	movq	%rsp, %rax
 	movb	(%rdx), %cl
 	movb	%cl, (%rax)
@@ -5971,11 +5971,11 @@ L__crypto_kem_enc_derand_jazz$2:
 	ret
 L__crypto_kem_keypair_derand_jazz$1:
 	movq	%rax, 8(%rsp)
-	movq	%rbx, 16(%rsp)
-	movq	%rbp, 24(%rsp)
+	movq	%rbp, 16(%rsp)
+	movq	%rbx, 24(%rsp)
 	movq	%rax, %rcx
-	movq	%rbx, 32(%rsp)
-	movq	%rbp, 40(%rsp)
+	movq	%rbp, 32(%rsp)
+	movq	%rbx, 40(%rsp)
 	leaq	128(%rsp), %rax
 	leaq	-208(%rsp), %rsp
 	call	L_sha3_512_32$1
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.s b/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.s
index 2af9c26fb7..3eab5d3242 100644
--- a/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.s
+++ b/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.s
@@ -5060,8 +5060,8 @@ jade_kem_kyber_kyber768_amd64_avx2_keypair:
 	movq	%r12, 64(%rsp)
 	movq	%rbp, 72(%rsp)
 	movq	%rbx, 80(%rsp)
-	movq	%rdi, %rbx
-	movq	%rsi, %rbp
+	movq	%rdi, %rbp
+	movq	%rsi, %rbx
 	movq	%rsp, %rdi
 	movq	$64, %rsi
 	call	__jasmin_syscall_randombytes__
@@ -5085,8 +5085,8 @@ jade_kem_kyber_kyber768_amd64_avx2_keypair_derand:
 	movq	%r12, 64(%rsp)
 	movq	%rbp, 72(%rsp)
 	movq	%rbx, 80(%rsp)
-	movq	%rdi, %rbx
-	movq	%rsi, %rbp
+	movq	%rdi, %rbp
+	movq	%rsi, %rbx
 	movq	%rsp, %rax
 	movb	(%rdx), %cl
 	movb	%cl, (%rax)
@@ -9436,11 +9436,11 @@ L__crypto_kem_enc_derand_jazz$2:
 	ret
 L__crypto_kem_keypair_derand_jazz$1:
 	movq	%rax, 12928(%rsp)
-	movq	%rbx, 12936(%rsp)
-	movq	%rbp, 12944(%rsp)
+	movq	%rbp, 12936(%rsp)
+	movq	%rbx, 12944(%rsp)
 	movq	%rax, %rcx
-	movq	%rbx, 12952(%rsp)
-	movq	%rbp, 12960(%rsp)
+	movq	%rbp, 12952(%rsp)
+	movq	%rbx, 12960(%rsp)
 	leaq	12968(%rsp), %rax
 	leaq	-248(%rsp), %rsp
 	call	L_sha3_512_32$1
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/kem.s b/src/kem/kyber/libjade_kyber768_amd64_ref/kem.s
index 101b6399d6..8a646187c3 100644
--- a/src/kem/kyber/libjade_kyber768_amd64_ref/kem.s
+++ b/src/kem/kyber/libjade_kyber768_amd64_ref/kem.s
@@ -7206,8 +7206,8 @@ jade_kem_kyber_kyber768_amd64_ref_keypair:
 	movq	%r12, 88(%rsp)
 	movq	%rbp, 96(%rsp)
 	movq	%rbx, 104(%rsp)
-	movq	%rdi, %rbx
-	movq	%rsi, %rbp
+	movq	%rdi, %rbp
+	movq	%rsi, %rbx
 	movq	%rsp, %rdi
 	movq	$64, %rsi
 	call	__jasmin_syscall_randombytes__
@@ -7237,8 +7237,8 @@ jade_kem_kyber_kyber768_amd64_ref_keypair_derand:
 	movq	%r12, 88(%rsp)
 	movq	%rbp, 96(%rsp)
 	movq	%rbx, 104(%rsp)
-	movq	%rdi, %rbx
-	movq	%rsi, %rbp
+	movq	%rdi, %rbp
+	movq	%rsi, %rbx
 	movq	%rsp, %rax
 	movb	(%rdx), %cl
 	movb	%cl, (%rax)
@@ -8638,10 +8638,10 @@ L_crypto_kem_enc_derand_jazz$2:
 	ret
 L_crypto_kem_keypair_derand_jazz$1:
 	movq	%rax, 8(%rsp)
-	movq	%rbx, 16(%rsp)
-	movq	%rbp, 24(%rsp)
-	movq	%rbx, 32(%rsp)
-	movq	%rbp, 40(%rsp)
+	movq	%rbp, 16(%rsp)
+	movq	%rbx, 24(%rsp)
+	movq	%rbp, 32(%rsp)
+	movq	%rbx, 40(%rsp)
 	movq	(%rax), %rcx
 	movq	%rcx, 64(%rsp)
 	movq	8(%rax), %rcx

From d26f552d0f8e816907fdf7358838b25d38dea0b6 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 4 Apr 2024 22:19:31 +0200
Subject: [PATCH 41/82] Debug: undo unix.yml tweak

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/unix.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/unix.yml b/.github/workflows/unix.yml
index f6613ee6fc..0f52aa3afb 100644
--- a/.github/workflows/unix.yml
+++ b/.github/workflows/unix.yml
@@ -50,7 +50,7 @@ jobs:
           cd scripts/copy_from_upstream && \
           ! pip3 install -r requirements.txt 2>&1 | grep ERROR && \
           python3 copy_from_upstream.py libjade && \
-          ! git diff
+          ! git status | grep modified
 
   buildcheck:
     name: Check that code passes a basic build before starting heavier tests

From 88d1997875e00baa8085832232cc0ea5f69d4f3c Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Fri, 5 Apr 2024 00:01:07 +0200
Subject: [PATCH 42/82] Allow MSVC to ignore libjade_shims

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 src/common/libjade_shims/libjade_randombytes.c | 2 ++
 src/common/libjade_shims/libjade_randombytes.h | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/src/common/libjade_shims/libjade_randombytes.c b/src/common/libjade_shims/libjade_randombytes.c
index d2c9bb09b9..40e4ce9e74 100644
--- a/src/common/libjade_shims/libjade_randombytes.c
+++ b/src/common/libjade_shims/libjade_randombytes.c
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: MIT
 
+#if defined(__unix__) || defined(__APPLE__)
 #include <oqs/rand.h>
 #include "libjade_randombytes.h"
 
@@ -7,3 +8,4 @@ void __jasmin_syscall_randombytes__(uint8_t *_x, uint64_t xlen) {
 	OQS_randombytes(_x, xlen);
 	// return _x;
 }
+#endif
diff --git a/src/common/libjade_shims/libjade_randombytes.h b/src/common/libjade_shims/libjade_randombytes.h
index 45abb4ebf0..c177ef6933 100644
--- a/src/common/libjade_shims/libjade_randombytes.h
+++ b/src/common/libjade_shims/libjade_randombytes.h
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: MIT
 
+#if defined(__unix__) || defined(__APPLE__)
 #ifndef LIBJADE_RANDOMBYTES_H
 #define LIBJADE_RANDOMBYTES_H
 
@@ -9,3 +10,4 @@
 void __jasmin_syscall_randombytes__(uint8_t *_x, uint64_t xlen) __asm__("__jasmin_syscall_randombytes__");
 
 #endif // LIBJADE_RANDOMBYTES_H
+#endif

From c79a15aeccb965e3e13d778c318e800c2c708cce Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Mon, 8 Apr 2024 23:21:15 +0200
Subject: [PATCH 43/82] Simplify name scheme for libjade code

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .CMake/alg_support.cmake                      |  16 +-
 .../add_enable_by_alg_conditional.libjade     |  16 +-
 .../copy_from_upstream/copy_from_upstream.py  |  10 +-
 .../patches/libjade-kyber-api.patch           | 140 ++----------------
 .../patches/libjade-kyber-meta.patch          |  92 +++++++++---
 .../src/kem/family/CMakeLists.txt.libjade     |  30 ++--
 .../src/kem/family/kem_scheme.c               |  38 ++---
 .../add_alg_enable_defines.libjade            |   8 +-
 src/kem/kyber/CMakeLists.txt                  |  44 +++---
 .../kyber/libjade_kyber512_amd64_avx2/api.c   |  20 ---
 .../kyber/libjade_kyber512_amd64_ref/api.c    |  20 ---
 .../api.h                                     |   6 +-
 .../kem.s                                     |   0
 .../api.h                                     |   6 +-
 .../kem.s                                     |   0
 .../kyber/libjade_kyber768_amd64_avx2/api.c   |  20 ---
 .../kyber/libjade_kyber768_amd64_ref/api.c    |  20 ---
 .../api.h                                     |   6 +-
 .../kem.s                                     |   0
 .../api.h                                     |   6 +-
 .../kem.s                                     |   0
 src/oqsconfig.h.cmake                         |   6 +-
 22 files changed, 187 insertions(+), 317 deletions(-)
 delete mode 100644 src/kem/kyber/libjade_kyber512_amd64_avx2/api.c
 delete mode 100644 src/kem/kyber/libjade_kyber512_amd64_ref/api.c
 rename src/kem/kyber/{libjade_kyber512_amd64_avx2 => libjade_kyber512_avx2}/api.h (88%)
 rename src/kem/kyber/{libjade_kyber512_amd64_avx2 => libjade_kyber512_avx2}/kem.s (100%)
 rename src/kem/kyber/{libjade_kyber512_amd64_ref => libjade_kyber512_ref}/api.h (88%)
 rename src/kem/kyber/{libjade_kyber512_amd64_ref => libjade_kyber512_ref}/kem.s (100%)
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_avx2/api.c
 delete mode 100644 src/kem/kyber/libjade_kyber768_amd64_ref/api.c
 rename src/kem/kyber/{libjade_kyber768_amd64_avx2 => libjade_kyber768_avx2}/api.h (88%)
 rename src/kem/kyber/{libjade_kyber768_amd64_avx2 => libjade_kyber768_avx2}/kem.s (100%)
 rename src/kem/kyber/{libjade_kyber768_amd64_ref => libjade_kyber768_ref}/api.h (88%)
 rename src/kem/kyber/{libjade_kyber768_amd64_ref => libjade_kyber768_ref}/kem.s (100%)

diff --git a/.CMake/alg_support.cmake b/.CMake/alg_support.cmake
index 7c6dbf2ce0..f09ab5a13b 100644
--- a/.CMake/alg_support.cmake
+++ b/.CMake/alg_support.cmake
@@ -509,15 +509,27 @@ endif()
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_CONDITIONAL_START
 if(OQS_LIBJADE_BUILD)
 
+if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
+if(OQS_DIST_X86_64_BUILD OR ())
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_512_ref "" ON "OQS_ENABLE_LIBJADE_KEM_kyber_512" OFF)
+endif()
+endif()
+
 if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
 if(OQS_DIST_X86_64_BUILD OR (OQS_USE_AVX2_INSTRUCTIONS AND OQS_USE_BMI2_INSTRUCTIONS AND OQS_USE_POPCNT_INSTRUCTIONS))
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2 "" ON "OQS_ENABLE_LIBJADE_KEM_kyber_512" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2 "" ON "OQS_ENABLE_LIBJADE_KEM_kyber_512" OFF)
+endif()
+endif()
+
+if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
+if(OQS_DIST_X86_64_BUILD OR ())
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_768_ref "" ON "OQS_ENABLE_LIBJADE_KEM_kyber_768" OFF)
 endif()
 endif()
 
 if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
 if(OQS_DIST_X86_64_BUILD OR (OQS_USE_AVX2_INSTRUCTIONS AND OQS_USE_BMI2_INSTRUCTIONS AND OQS_USE_POPCNT_INSTRUCTIONS))
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2 "" ON "OQS_ENABLE_LIBJADE_KEM_kyber_768" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2 "" ON "OQS_ENABLE_LIBJADE_KEM_kyber_768" OFF)
 endif()
 endif()
 
diff --git a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
index 15da56eaf7..848e0ed1e9 100644
--- a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
+++ b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
@@ -7,9 +7,9 @@ if(OQS_LIBJADE_BUILD)
 {% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
 {% endif -%}
 if(OQS_DIST_X86_64_BUILD OR ({% for flag in platform['required_flags'] -%} OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- if not loop.last %} AND {% endif -%}{%- endfor -%}))
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name']  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
 {%- if 'alias_scheme' in scheme %}
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name']  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
 {%- endif %}
 endif()
 {% if platform['operating_systems'] %}endif()
@@ -22,9 +22,9 @@ if((OQS_DIST_ARM64_V8_BUILD OR (OQS_USE_ARM_NEON_INSTRUCTIONS{% for flag in plat
 {% if impl['upstream']['name'].endswith('pqclean') -%}
 if(((CMAKE_C_COMPILER_ID STREQUAL "GNU") AND (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "9.4.0")) OR ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "9.4.0")) OR ((NOT (CMAKE_C_COMPILER_ID STREQUAL "GNU")) AND (NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))))
 {%- endif %}
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name']  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
 {%- if 'alias_scheme' in scheme %}
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name']  }} "" ON "OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
 {%- endif %}
 {% if impl['upstream']['name'].endswith('pqclean') -%}
 else()
@@ -46,9 +46,9 @@ endif()
 {% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
 {% endif -%}
 if(OQS_DIST_X86_64_BUILD OR ({% for flag in platform['required_flags'] -%} OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- if not loop.last %} AND {% endif -%}{%- endfor -%}))
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name']  }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
 {%- if 'alias_scheme' in scheme %}
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name']  }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
 {%- endif %}
 endif()
 {% if platform['operating_systems'] %}endif()
@@ -58,9 +58,9 @@ endif()
 {% if platform['operating_systems'] %}if(CMAKE_SYSTEM_NAME MATCHES "{{ platform['operating_systems']|join('|') }}")
 {% endif -%}
 if(OQS_DIST_ARM64_V8_BUILD OR (OQS_USE_ARM_NEON_INSTRUCTIONS{% for flag in platform['required_flags'] -%} {%- if not loop.last or loop.first %} AND {% endif -%}OQS_USE_{{ flag|upper }}_INSTRUCTIONS {%- endfor -%}))
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name']  }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}" OFF)
 {%- if 'alias_scheme' in scheme %}
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_')  }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
+    cmake_dependent_option(OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name']  }} "" ON "OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}" OFF)
 {%- endif %}
 endif()
 {% if platform['operating_systems'] %}endif()
diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index 1331859113..984ce491fe 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -253,8 +253,8 @@ def load_instructions(file):
                                                                     upstreams[location]['kem_scheme_path'].format_map(scheme)))
             scheme['metadata']['ind_cca'] = 'true' if (
                     scheme['metadata']['claimed-security'] == "IND-CCA2") else 'false'
-            scheme['pqclean_scheme_c'] = scheme['pqclean_scheme'].replace('-', '')
-            scheme['scheme_c'] = scheme['scheme'].replace('-', '')
+            scheme['pqclean_scheme_c'] = scheme['pqclean_scheme']
+            scheme['scheme_c'] = scheme['scheme']
             scheme['default_implementation'] = family['default_implementation']
             for impl in scheme['metadata']['implementations']:
                 if 'common_dep' in impl:
@@ -352,8 +352,8 @@ def load_instructions(file):
                         scheme['scheme_paths'][arch] = (os.path.join('repos', location,
                                                                     upstreams[location]['sig_scheme_path'].format_map(scheme)))
             scheme['metadata']['euf_cma'] = 'true'
-            scheme['pqclean_scheme_c'] = scheme['pqclean_scheme'].replace('-', '')
-            scheme['scheme_c'] = scheme['scheme'].replace('-', '')
+            scheme['pqclean_scheme_c'] = scheme['pqclean_scheme']
+            scheme['scheme_c'] = scheme['scheme']
             scheme['default_implementation'] = family['default_implementation']
             for impl in scheme['metadata']['implementations']:
                 if 'common_dep' in impl:
@@ -453,7 +453,7 @@ def handle_implementation(impl, family, scheme, dst_basedir):
         origfolder = os.path.join(scheme['scheme_paths'][impl], of)
         upstream_location = i['upstream']['name']
         srcfolder = os.path.join(dst_basedir, 'src', family['type'], family['name'],
-                             '{}_{}_{}'.format(upstream_location, scheme['pqclean_scheme'], impl.replace('/', '_')))
+                             '{}_{}_{}'.format(upstream_location, scheme['pqclean_scheme'], impl))
         shutil.rmtree(srcfolder, ignore_errors=True)
         # Don't copy from PQClean straight but check for origfile list
         try:
diff --git a/scripts/copy_from_upstream/patches/libjade-kyber-api.patch b/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
index 5215a7bdee..f78241f283 100644
--- a/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
+++ b/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
@@ -1,32 +1,5 @@
-diff --git a/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c b/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c
-new file mode 100644
-index 0000000..0a84abf
---- /dev/null
-+++ b/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c
-@@ -0,0 +1,20 @@
-+#include <oqs/rand.h>
-+#include "libjade_randombytes.h"
-+#include "api.h"
-+
-+int libjade_kyber512_amd64_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
-+    uint8_t keypair_coins[JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES];
-+    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2);
-+    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2);
-+    return jade_kem_kyber_kyber512_amd64_avx2_keypair_derand(public_key, secret_key, keypair_coins);
-+}
-+
-+int libjade_kyber512_amd64_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
-+    uint8_t enc_coins[JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES];
-+    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES);
-+    return jade_kem_kyber_kyber512_amd64_avx2_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
-+}
-+
-+int libjade_kyber512_amd64_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
-+    return jade_kem_kyber_kyber512_amd64_avx2_dec( shared_secret, ciphertext, secret_key); 
-+}
-\ No newline at end of file
 diff --git a/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h b/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h
-index 5148fd5..0914217 100644
+index 5148fd5..419112e 100644
 --- a/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h
 +++ b/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h
 @@ -3,16 +3,8 @@
@@ -51,7 +24,7 @@ index 5148fd5..0914217 100644
  );
  
 -int jade_kem_kyber_kyber512_amd64_avx2_keypair(
-+int libjade_kyber512_amd64_avx2_keypair(
++int libjade_kyber512_avx2_keypair(
    uint8_t *public_key,
    uint8_t *secret_key
  );
@@ -60,7 +33,7 @@ index 5148fd5..0914217 100644
  );
  
 -int jade_kem_kyber_kyber512_amd64_avx2_enc(
-+int libjade_kyber512_amd64_avx2_enc(
++int libjade_kyber512_avx2_enc(
    uint8_t *ciphertext,
    uint8_t *shared_secret,
    const uint8_t *public_key
@@ -68,42 +41,15 @@ index 5148fd5..0914217 100644
    const uint8_t *secret_key
  );
  
-+int libjade_kyber512_amd64_avx2_dec(
++int libjade_kyber512_avx2_dec(
 +  uint8_t *shared_secret,
 +  const uint8_t *ciphertext,
 +  const uint8_t *secret_key
 +);
 +
  #endif
-diff --git a/src/crypto_kem/kyber/kyber512/amd64/ref/api.c b/src/crypto_kem/kyber/kyber512/amd64/ref/api.c
-new file mode 100644
-index 0000000..12836e0
---- /dev/null
-+++ b/src/crypto_kem/kyber/kyber512/amd64/ref/api.c
-@@ -0,0 +1,20 @@
-+#include <oqs/rand.h>
-+#include "libjade_randombytes.h"
-+#include "api.h"
-+
-+int libjade_kyber512_amd64_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
-+    uint8_t keypair_coins[JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES];
-+    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2);
-+    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2);
-+    return jade_kem_kyber_kyber512_amd64_ref_keypair_derand(public_key, secret_key, keypair_coins);
-+}
-+
-+int libjade_kyber512_amd64_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
-+    uint8_t enc_coins[JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES];
-+    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES);
-+    return jade_kem_kyber_kyber512_amd64_ref_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
-+}
-+
-+int libjade_kyber512_amd64_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
-+    return jade_kem_kyber_kyber512_amd64_ref_dec(shared_secret, ciphertext, secret_key);
-+}
-\ No newline at end of file
 diff --git a/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h b/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h
-index 38127cf..2332230 100644
+index 38127cf..fcce52b 100644
 --- a/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h
 +++ b/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h
 @@ -3,17 +3,8 @@
@@ -129,7 +75,7 @@ index 38127cf..2332230 100644
  );
  
 -int jade_kem_kyber_kyber512_amd64_ref_keypair(
-+int libjade_kyber512_amd64_ref_keypair(
++int libjade_kyber512_ref_keypair(
    uint8_t *public_key,
    uint8_t *secret_key
  );
@@ -138,7 +84,7 @@ index 38127cf..2332230 100644
  );
  
 -int jade_kem_kyber_kyber512_amd64_ref_enc(
-+int libjade_kyber512_amd64_ref_enc(
++int libjade_kyber512_ref_enc(
    uint8_t *ciphertext,
    uint8_t *shared_secret,
    const uint8_t *public_key
@@ -146,42 +92,15 @@ index 38127cf..2332230 100644
    const uint8_t *secret_key
  );
  
-+int libjade_kyber512_amd64_ref_dec(
++int libjade_kyber512_ref_dec(
 +  uint8_t *shared_secret,
 +  const uint8_t *ciphertext,
 +  const uint8_t *secret_key
 +);
 +
  #endif
-diff --git a/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c b/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c
-new file mode 100644
-index 0000000..15571bf
---- /dev/null
-+++ b/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c
-@@ -0,0 +1,20 @@
-+#include <oqs/rand.h>
-+#include "libjade_randombytes.h"
-+#include "api.h"
-+
-+int libjade_kyber768_amd64_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
-+    uint8_t keypair_coins[JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES];
-+    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2);
-+    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2);
-+    return jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(public_key, secret_key, keypair_coins);
-+}
-+
-+int libjade_kyber768_amd64_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
-+    uint8_t enc_coins[JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES];
-+    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES);
-+    return jade_kem_kyber_kyber768_amd64_avx2_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
-+}
-+
-+int libjade_kyber768_amd64_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
-+    return jade_kem_kyber_kyber768_amd64_avx2_dec(shared_secret, ciphertext, secret_key);
-+}
-\ No newline at end of file
 diff --git a/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h b/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h
-index d3b3500..be5f7db 100644
+index d3b3500..ac36577 100644
 --- a/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h
 +++ b/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h
 @@ -3,16 +3,8 @@
@@ -206,7 +125,7 @@ index d3b3500..be5f7db 100644
  );
  
 -int jade_kem_kyber_kyber768_amd64_avx2_keypair(
-+int libjade_kyber768_amd64_avx2_keypair(
++int libjade_kyber768_avx2_keypair(
    uint8_t *public_key,
    uint8_t *secret_key
  );
@@ -215,7 +134,7 @@ index d3b3500..be5f7db 100644
  );
  
 -int jade_kem_kyber_kyber768_amd64_avx2_enc(
-+int libjade_kyber768_amd64_avx2_enc(
++int libjade_kyber768_avx2_enc(
    uint8_t *ciphertext,
    uint8_t *shared_secret,
    const uint8_t *public_key
@@ -223,42 +142,15 @@ index d3b3500..be5f7db 100644
    const uint8_t *secret_key
  );
  
-+int libjade_kyber768_amd64_avx2_dec(
++int libjade_kyber768_avx2_dec(
 +  uint8_t *shared_secret,
 +  const uint8_t *ciphertext,
 +  const uint8_t *secret_key
 +);
 +
  #endif
-diff --git a/src/crypto_kem/kyber/kyber768/amd64/ref/api.c b/src/crypto_kem/kyber/kyber768/amd64/ref/api.c
-new file mode 100644
-index 0000000..6055d87
---- /dev/null
-+++ b/src/crypto_kem/kyber/kyber768/amd64/ref/api.c
-@@ -0,0 +1,20 @@
-+#include <oqs/rand.h>
-+#include "libjade_randombytes.h"
-+#include "api.h"
-+
-+int libjade_kyber768_amd64_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
-+    uint8_t keypair_coins[JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES];
-+    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2);
-+    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2);
-+    return jade_kem_kyber_kyber768_amd64_ref_keypair_derand(public_key, secret_key, keypair_coins);
-+}
-+
-+int libjade_kyber768_amd64_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
-+    uint8_t enc_coins[JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES];
-+    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES);
-+    return jade_kem_kyber_kyber768_amd64_ref_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
-+}
-+
-+int libjade_kyber768_amd64_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
-+    return jade_kem_kyber_kyber768_amd64_ref_dec(shared_secret, ciphertext, secret_key); 
-+}
-\ No newline at end of file
 diff --git a/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h b/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h
-index e23e1bf..b8f2fc3 100644
+index e23e1bf..0c453e0 100644
 --- a/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h
 +++ b/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h
 @@ -3,16 +3,8 @@
@@ -283,7 +175,7 @@ index e23e1bf..b8f2fc3 100644
  );
  
 -int jade_kem_kyber_kyber768_amd64_ref_keypair(
-+int libjade_kyber768_amd64_ref_keypair(
++int libjade_kyber768_ref_keypair(
    uint8_t *public_key,
    uint8_t *secret_key
  );
@@ -292,7 +184,7 @@ index e23e1bf..b8f2fc3 100644
  );
  
 -int jade_kem_kyber_kyber768_amd64_ref_enc(
-+int libjade_kyber768_amd64_ref_enc(
++int libjade_kyber768_ref_enc(
    uint8_t *ciphertext,
    uint8_t *shared_secret,
    const uint8_t *public_key
@@ -300,7 +192,7 @@ index e23e1bf..b8f2fc3 100644
    const uint8_t *secret_key
  );
  
-+int libjade_kyber768_amd64_ref_dec(
++int libjade_kyber768_ref_dec(
 +  uint8_t *shared_secret,
 +  const uint8_t *ciphertext,
 +  const uint8_t *secret_key
diff --git a/scripts/copy_from_upstream/patches/libjade-kyber-meta.patch b/scripts/copy_from_upstream/patches/libjade-kyber-meta.patch
index e3d110d0c4..d511c61c3a 100644
--- a/scripts/copy_from_upstream/patches/libjade-kyber-meta.patch
+++ b/scripts/copy_from_upstream/patches/libjade-kyber-meta.patch
@@ -1,5 +1,5 @@
 diff --git a/src/crypto_kem/kyber/kyber512/META.yml b/src/crypto_kem/kyber/kyber512/META.yml
-index 000ec75..797fca4 100644
+index 000ec75..8282075 100644
 --- a/src/crypto_kem/kyber/kyber512/META.yml
 +++ b/src/crypto_kem/kyber/kyber512/META.yml
 @@ -1,7 +1,6 @@
@@ -11,13 +11,32 @@ index 000ec75..797fca4 100644
  claimed-nist-level: 1
  claimed-security: IND-CCA2
  length-public-key: 800
-@@ -15,17 +14,20 @@ auxiliary-submitters:
+@@ -9,23 +8,36 @@ length-ciphertext: 768
+ length-secret-key: 1632
+ length-shared-secret: 32
+ principal-submitters:
+-  - TODO
++  - Peter Schwabe
+ auxiliary-submitters:
+-  - TODO
++  - Roberto Avanzi
++  - Joppe Bos
++  - Léo Ducas
++  - Eike Kiltz
++  - Tancrède Lepoint
++  - Vadim Lyubashevsky
++  - John M. Schanck
++  - Gregor Seiler
++  - Damien Stehlé
  implementations:
-     - name: amd64/ref
-       version: TODO
-+      signature_keypair: libjade_kyber512_amd64_ref_keypair
-+      signature_enc: libjade_kyber512_amd64_ref_enc
-+      signature_dec: libjade_kyber512_amd64_ref_dec
+-    - name: amd64/ref
+-      version: TODO
++    - name: ref
++      version: NIST Round 3 submission
++      folder_name: amd64/ref
++      signature_keypair: libjade_kyber512_ref_keypair
++      signature_enc: libjade_kyber512_ref_enc
++      signature_dec: libjade_kyber512_ref_dec
        supported_platforms:
          - architecture: x86_64
            operating_systems:
@@ -27,17 +46,20 @@ index 000ec75..797fca4 100644
 -              - avx2
 -              - bmi2
 -              - popcnt
+-    - name: amd64/avx2
+-      version: TODO
 +          required_flags: []
-     - name: amd64/avx2
-       version: TODO
-+      signature_keypair: libjade_kyber512_amd64_avx2_keypair
-+      signature_enc: libjade_kyber512_amd64_avx2_enc
-+      signature_dec: libjade_kyber512_amd64_avx2_dec
++    - name: avx2
++      version: NIST Round 3 submission
++      folder_name: amd64/avx2
++      signature_keypair: libjade_kyber512_avx2_keypair
++      signature_enc: libjade_kyber512_avx2_enc
++      signature_dec: libjade_kyber512_avx2_dec
        supported_platforms:
          - architecture: x86_64
            operating_systems:
 diff --git a/src/crypto_kem/kyber/kyber768/META.yml b/src/crypto_kem/kyber/kyber768/META.yml
-index d744938..0813fe2 100644
+index d744938..57cb0c7 100644
 --- a/src/crypto_kem/kyber/kyber768/META.yml
 +++ b/src/crypto_kem/kyber/kyber768/META.yml
 @@ -1,7 +1,6 @@
@@ -49,13 +71,32 @@ index d744938..0813fe2 100644
  claimed-nist-level: 3
  claimed-security: IND-CCA2
  length-public-key: 1184
-@@ -15,17 +14,20 @@ auxiliary-submitters:
+@@ -9,23 +8,36 @@ length-ciphertext: 1088
+ length-secret-key: 2400
+ length-shared-secret: 32
+ principal-submitters:
+-  - TODO
++  - Peter Schwabe
+ auxiliary-submitters:
+-  - TODO
++  - Roberto Avanzi
++  - Joppe Bos
++  - Léo Ducas
++  - Eike Kiltz
++  - Tancrède Lepoint
++  - Vadim Lyubashevsky
++  - John M. Schanck
++  - Gregor Seiler
++  - Damien Stehlé
  implementations:
-     - name: amd64/ref
-       version: TODO
-+      signature_keypair: libjade_kyber768_amd64_ref_keypair
-+      signature_enc: libjade_kyber768_amd64_ref_enc
-+      signature_dec: libjade_kyber768_amd64_ref_dec
+-    - name: amd64/ref
+-      version: TODO
++    - name: ref
++      version: NIST Round 3 submission
++      folder_name: amd64/ref
++      signature_keypair: libjade_kyber768_ref_keypair
++      signature_enc: libjade_kyber768_ref_enc
++      signature_dec: libjade_kyber768_ref_dec
        supported_platforms:
          - architecture: x86_64
            operating_systems:
@@ -65,12 +106,15 @@ index d744938..0813fe2 100644
 -              - avx2
 -              - bmi2
 -              - popcnt
+-    - name: amd64/avx2
+-      version: TODO
 +          required_flags: []
-     - name: amd64/avx2
-       version: TODO
-+      signature_keypair: libjade_kyber768_amd64_avx2_keypair
-+      signature_enc: libjade_kyber768_amd64_avx2_enc
-+      signature_dec: libjade_kyber768_amd64_avx2_dec
++    - name: avx2
++      version: NIST Round 3 submission
++      folder_name: amd64/avx2
++      signature_keypair: libjade_kyber768_avx2_keypair
++      signature_enc: libjade_kyber768_avx2_enc
++      signature_dec: libjade_kyber768_avx2_dec
        supported_platforms:
          - architecture: x86_64
            operating_systems:
diff --git a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
index 0afa4610a6..64bb4c14a2 100644
--- a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
@@ -3,7 +3,7 @@
     {%- for common_dep in common_deps %}
 
 if({% for used_by in common_deps_usedby[common_dep['name']] -%}OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ used_by['scheme_c'] }}{%- if used_by['impl_name'] != default_implementation %}_{{ used_by['impl_name'] }}{% endif -%}{%- if not loop.last %} OR {% endif -%}{%- endfor -%})
-    add_library({{ family }}_{{ common_dep['name'] }} OBJECT {% for source_file in common_dep['sources_addl']|sort -%}{{ upstream_location }}_{{ common_dep['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
+    add_library(jasmin_{{ family }}_{{ common_dep['name'] }} OBJECT {% for source_file in common_dep['sources_addl']|sort -%}{{ upstream_location }}_{{ common_dep['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
     target_include_directories({{ family }}_{{ common_dep['name'] }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ upstream_location }}_{{ common_dep['name'] }})
         {%- if common_dep['required_flags'] %}
     target_compile_options({{ family }}_{{ common_dep['name'] }} PRIVATE {%- for flag in common_dep['required_flags'] %}{%- if flag != 'arm_neon' %} -m{%- if flag == 'bmi1' -%} bmi {%- elif flag == 'sse4_1' -%} sse4.1 {%- elif flag == 'pclmulqdq' -%} pclmul {%- else -%}{{ flag }}{%- endif -%}{%- endif -%}{%- endfor -%})
@@ -22,39 +22,39 @@ endif()
         {%- if impl['name'] == scheme['default_implementation'] %}
 
 if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- endif %})
-    add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} OBJECT kem_{{ family }}_{{ scheme['scheme'] }}.c {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
+    add_library(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} OBJECT kem_{{ family }}_{{ scheme['scheme'] }}.c {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
            {%- if impl['compile_opts'] %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PUBLIC {{ impl['compile_opts'] }})
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PUBLIC {{ impl['compile_opts'] }})
            {%- endif -%}
 
         {%- else %}
 
-if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}_{{ impl['name'].replace('/', '_') }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }}{%- endif %})
-    add_library({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} OBJECT {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
+if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}_{{ impl['name'] }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}{%- endif %})
+    add_library(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} OBJECT {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
         {%- endif %}
-    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'].replace('/', '_') }})
-    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }})
+    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
         {%- if impl['name'] != scheme['default_implementation'] and impl['required_flags'] -%}
            {%- set opts %}{% for flag in impl['required_flags'] %}{%- if flag != 'arm_neon' %} -m{%- if flag == 'bmi1' -%} bmi {% elif flag == 'sse4_1' -%} sse4.1 {% elif flag == 'pclmulqdq' -%} pclmul {% else -%}{{ flag }} {% endif %}{% endif -%}{% endfor %}{% endset %}
            {%- if opts|length > 0 %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE {{ opts }})
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE {{ opts }})
            {%- endif -%}
         {%- endif %}
         {%- if impl['compile_opts'] %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PUBLIC {{ impl['compile_opts'] }})
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PUBLIC {{ impl['compile_opts'] }})
         {%- endif %}
-        {%- if family == 'classic_mceliece' and impl['name'].replace('/', '_') == 'avx2' %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE -Wno-language-extension-token -O1)
+        {%- if family == 'classic_mceliece' and impl['name'] == 'avx2' %}
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE -Wno-language-extension-token -O1)
         {%- endif %}
-        {%- if family == 'hqc' and impl['name'].replace('/', '_') == 'avx2' %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE -Wno-missing-braces)
+        {%- if family == 'hqc' and impl['name'] == 'avx2' %}
+    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE -Wno-missing-braces)
         {%- endif %}
         {%- if impl['upstream']['name'].endswith('pqclean') %}
     if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
-        target_compile_definitions({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} PRIVATE old_gas_syntax)
+        target_compile_definitions({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE old_gas_syntax)
     endif()
     	{%- endif %}
-    set(_{{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} $<TARGET_OBJECTS:{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }}>)
+    set(_{{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} $<TARGET_OBJECTS:{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}>)
 endif()
     {%- endfor -%}
 {%- endfor %}
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
index 7bf734678c..d7eba4da92 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
@@ -119,10 +119,10 @@ extern int PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper
 {% for scheme in schemes -%}
 
 {%- for impl in scheme['metadata']['implementations'] if impl['name'] in scheme['libjade_implementations'] %}
-#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] != scheme['default_implementation'] %}_{{ 'amd64_' + impl['name'] }}{%- endif %}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ 'amd64_' + impl['name'] }}){%- endif %}
-extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_keypair(uint8_t *pk, uint8_t *sk);
-extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
-extern int libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
+#if defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] != scheme['default_implementation'] %}_{{ impl['name'] }}{%- endif %}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
+extern int libjade_{{ scheme['pqclean_scheme_c'] }}_{{ impl['name'] }}_keypair(uint8_t *pk, uint8_t *sk);
+extern int libjade_{{ scheme['pqclean_scheme_c'] }}_{{ impl['name'] }}_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
+extern int libjade_{{ scheme['pqclean_scheme_c'] }}_{{ impl['name'] }}_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
 {% endfor -%}
 {% endfor -%}
@@ -134,9 +134,9 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
-#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- else %}
-#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
@@ -144,14 +144,14 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
         {%- if impl['name'] in scheme['libjade_implementations'] %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_keypair(public_key, secret_key);
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_{{ impl['name'] }}_keypair(public_key, secret_key);
         {%- else %}
 	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_keypair(public_key, secret_key);
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_keypair(public_key, secret_key);
+		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
@@ -159,7 +159,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #else
     {%- endif %}
-	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_keypair(public_key, secret_key);
+	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_keypair(public_key, secret_key);
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif
     {%- endif %}
@@ -208,9 +208,9 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
-#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- else %}
-#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
@@ -218,14 +218,14 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
         {%- if impl['name'] in scheme['libjade_implementations'] %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_enc(public_key, secret_key);
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_{{ impl['name'] }}_enc(public_key, secret_key);
         {%- else %}
 	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_enc(public_key, secret_key);
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_enc(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
@@ -233,7 +233,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #else
     {%- endif %}
-	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_enc(public_key, secret_key);
+	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_enc(public_key, secret_key);
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif 
     {%- endif %}
@@ -282,9 +282,9 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *s
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
-#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- else %}
-#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}amd64_{%- endif %}{{ impl['name'] }}){%- endif %}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
@@ -292,14 +292,14 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *s
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
         {%- if impl['name'] in scheme['libjade_implementations'] %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_{{ impl['name'] }}_dec(public_key, secret_key);
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_{{ impl['name'] }}_dec(public_key, secret_key);
         {%- else %}
 	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_dec(public_key, secret_key);
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_dec(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
@@ -307,7 +307,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *s
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #else
     {%- endif %}
-	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_amd64_ref_dec(public_key, secret_key);
+	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_dec(public_key, secret_key);
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif
     {%- endif %}
diff --git a/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade b/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade
index 0e19545a59..1cb476e315 100644
--- a/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade
+++ b/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade
@@ -7,9 +7,9 @@
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }} @OQS_LIBJADE_BUILD_BIN@
 {%- endif -%}
         {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] %}
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'] }} @OQS_LIBJADE_BUILD_BIN@
 {%- if 'alias_scheme' in scheme %}
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }} @OQS_LIBJADE_BUILD_BIN@
 {%- endif -%}
         {%- endfor -%}
     {%- endfor -%}
@@ -24,9 +24,9 @@
 #cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }} @OQS_LIBJADE_BUILD_BIN@
 {%- endif -%}
         {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] %}
-#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'].replace('/', '_') }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'] }} @OQS_LIBJADE_BUILD_BIN@
 {%- if 'alias_scheme' in scheme %}
-#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'].replace('/', '_') }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }} @OQS_LIBJADE_BUILD_BIN@
 {%- endif -%}
         {%- endfor -%}
     {%- endfor -%}
diff --git a/src/kem/kyber/CMakeLists.txt b/src/kem/kyber/CMakeLists.txt
index 08444ec4ec..90e04e0ef5 100644
--- a/src/kem/kyber/CMakeLists.txt
+++ b/src/kem/kyber/CMakeLists.txt
@@ -91,34 +91,34 @@ endif()
 
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_START
 
-if(OQS_ENABLE_LIBJADE_KEM_kyber_512)
-    add_library(kyber_512_amd64_ref OBJECT kem_kyber_512.c libjade_kyber512_amd64_ref/api.c libjade_kyber512_amd64_ref/kem.s)
-    target_include_directories(kyber_512_amd64_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_amd64_ref)
-    target_include_directories(kyber_512_amd64_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
-    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_amd64_ref>)
+if(OQS_ENABLE_LIBJADE_KEM_kyber_512_ref)
+    add_library(jasmin_kyber_512_ref OBJECT libjade_kyber512_ref/kem.s)
+    target_include_directories(kyber_512_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_ref)
+    target_include_directories(kyber_512_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_ref>)
 endif()
 
-if(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
-    add_library(kyber_512_amd64_avx2 OBJECT libjade_kyber512_amd64_avx2/api.c libjade_kyber512_amd64_avx2/kem.s)
-    target_include_directories(kyber_512_amd64_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_amd64_avx2)
-    target_include_directories(kyber_512_amd64_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
-    target_compile_options(kyber_512_amd64_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
-    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_amd64_avx2>)
+if(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
+    add_library(jasmin_kyber_512_avx2 OBJECT libjade_kyber512_avx2/kem.s)
+    target_include_directories(kyber_512_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_avx2)
+    target_include_directories(kyber_512_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    target_compile_options(kyber_512_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
+    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_avx2>)
 endif()
 
-if(OQS_ENABLE_LIBJADE_KEM_kyber_768)
-    add_library(kyber_768_amd64_ref OBJECT kem_kyber_768.c libjade_kyber768_amd64_ref/api.c libjade_kyber768_amd64_ref/kem.s)
-    target_include_directories(kyber_768_amd64_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_amd64_ref)
-    target_include_directories(kyber_768_amd64_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
-    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_amd64_ref>)
+if(OQS_ENABLE_LIBJADE_KEM_kyber_768_ref)
+    add_library(jasmin_kyber_768_ref OBJECT libjade_kyber768_ref/kem.s)
+    target_include_directories(kyber_768_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_ref)
+    target_include_directories(kyber_768_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_ref>)
 endif()
 
-if(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
-    add_library(kyber_768_amd64_avx2 OBJECT libjade_kyber768_amd64_avx2/api.c libjade_kyber768_amd64_avx2/kem.s)
-    target_include_directories(kyber_768_amd64_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_amd64_avx2)
-    target_include_directories(kyber_768_amd64_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
-    target_compile_options(kyber_768_amd64_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
-    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_amd64_avx2>)
+if(OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2)
+    add_library(jasmin_kyber_768_avx2 OBJECT libjade_kyber768_avx2/kem.s)
+    target_include_directories(kyber_768_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_avx2)
+    target_include_directories(kyber_768_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    target_compile_options(kyber_768_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
+    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_avx2>)
 endif()
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_END
 set(KYBER_OBJS ${_KYBER_OBJS} PARENT_SCOPE)
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/api.c b/src/kem/kyber/libjade_kyber512_amd64_avx2/api.c
deleted file mode 100644
index e5620ccfac..0000000000
--- a/src/kem/kyber/libjade_kyber512_amd64_avx2/api.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <oqs/rand.h>
-#include "libjade_randombytes.h"
-#include "api.h"
-
-int libjade_kyber512_amd64_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
-    uint8_t keypair_coins[JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES];
-    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2);
-    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2);
-    return jade_kem_kyber_kyber512_amd64_avx2_keypair_derand(public_key, secret_key, keypair_coins);
-}
-
-int libjade_kyber512_amd64_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
-    uint8_t enc_coins[JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES];
-    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES);
-    return jade_kem_kyber_kyber512_amd64_avx2_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
-}
-
-int libjade_kyber512_amd64_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
-    return jade_kem_kyber_kyber512_amd64_avx2_dec( shared_secret, ciphertext, secret_key);
-}
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/api.c b/src/kem/kyber/libjade_kyber512_amd64_ref/api.c
deleted file mode 100644
index 2a4298f01f..0000000000
--- a/src/kem/kyber/libjade_kyber512_amd64_ref/api.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <oqs/rand.h>
-#include "libjade_randombytes.h"
-#include "api.h"
-
-int libjade_kyber512_amd64_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
-    uint8_t keypair_coins[JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES];
-    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2);
-    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2);
-    return jade_kem_kyber_kyber512_amd64_ref_keypair_derand(public_key, secret_key, keypair_coins);
-}
-
-int libjade_kyber512_amd64_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
-    uint8_t enc_coins[JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES];
-    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES);
-    return jade_kem_kyber_kyber512_amd64_ref_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
-}
-
-int libjade_kyber512_amd64_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
-    return jade_kem_kyber_kyber512_amd64_ref_dec(shared_secret, ciphertext, secret_key);
-}
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/api.h b/src/kem/kyber/libjade_kyber512_avx2/api.h
similarity index 88%
rename from src/kem/kyber/libjade_kyber512_amd64_avx2/api.h
rename to src/kem/kyber/libjade_kyber512_avx2/api.h
index 0914217f40..419112eceb 100644
--- a/src/kem/kyber/libjade_kyber512_amd64_avx2/api.h
+++ b/src/kem/kyber/libjade_kyber512_avx2/api.h
@@ -12,7 +12,7 @@ int jade_kem_kyber_kyber512_amd64_avx2_keypair_derand(
   const uint8_t *coins
 );
 
-int libjade_kyber512_amd64_avx2_keypair(
+int libjade_kyber512_avx2_keypair(
   uint8_t *public_key,
   uint8_t *secret_key
 );
@@ -24,7 +24,7 @@ int jade_kem_kyber_kyber512_amd64_avx2_enc_derand(
   const uint8_t *coins
 );
 
-int libjade_kyber512_amd64_avx2_enc(
+int libjade_kyber512_avx2_enc(
   uint8_t *ciphertext,
   uint8_t *shared_secret,
   const uint8_t *public_key
@@ -36,7 +36,7 @@ int jade_kem_kyber_kyber512_amd64_avx2_dec(
   const uint8_t *secret_key
 );
 
-int libjade_kyber512_amd64_avx2_dec(
+int libjade_kyber512_avx2_dec(
   uint8_t *shared_secret,
   const uint8_t *ciphertext,
   const uint8_t *secret_key
diff --git a/src/kem/kyber/libjade_kyber512_amd64_avx2/kem.s b/src/kem/kyber/libjade_kyber512_avx2/kem.s
similarity index 100%
rename from src/kem/kyber/libjade_kyber512_amd64_avx2/kem.s
rename to src/kem/kyber/libjade_kyber512_avx2/kem.s
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/api.h b/src/kem/kyber/libjade_kyber512_ref/api.h
similarity index 88%
rename from src/kem/kyber/libjade_kyber512_amd64_ref/api.h
rename to src/kem/kyber/libjade_kyber512_ref/api.h
index 233223089c..fcce52b89a 100644
--- a/src/kem/kyber/libjade_kyber512_amd64_ref/api.h
+++ b/src/kem/kyber/libjade_kyber512_ref/api.h
@@ -12,7 +12,7 @@ int jade_kem_kyber_kyber512_amd64_ref_keypair_derand(
   const uint8_t *coins
 );
 
-int libjade_kyber512_amd64_ref_keypair(
+int libjade_kyber512_ref_keypair(
   uint8_t *public_key,
   uint8_t *secret_key
 );
@@ -24,7 +24,7 @@ int jade_kem_kyber_kyber512_amd64_ref_enc_derand(
   const uint8_t *coins
 );
 
-int libjade_kyber512_amd64_ref_enc(
+int libjade_kyber512_ref_enc(
   uint8_t *ciphertext,
   uint8_t *shared_secret,
   const uint8_t *public_key
@@ -36,7 +36,7 @@ int jade_kem_kyber_kyber512_amd64_ref_dec(
   const uint8_t *secret_key
 );
 
-int libjade_kyber512_amd64_ref_dec(
+int libjade_kyber512_ref_dec(
   uint8_t *shared_secret,
   const uint8_t *ciphertext,
   const uint8_t *secret_key
diff --git a/src/kem/kyber/libjade_kyber512_amd64_ref/kem.s b/src/kem/kyber/libjade_kyber512_ref/kem.s
similarity index 100%
rename from src/kem/kyber/libjade_kyber512_amd64_ref/kem.s
rename to src/kem/kyber/libjade_kyber512_ref/kem.s
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/api.c b/src/kem/kyber/libjade_kyber768_amd64_avx2/api.c
deleted file mode 100644
index 15571bf96a..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_avx2/api.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <oqs/rand.h>
-#include "libjade_randombytes.h"
-#include "api.h"
-
-int libjade_kyber768_amd64_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
-    uint8_t keypair_coins[JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES];
-    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2);
-    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2);
-    return jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(public_key, secret_key, keypair_coins);
-}
-
-int libjade_kyber768_amd64_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
-    uint8_t enc_coins[JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES];
-    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES);
-    return jade_kem_kyber_kyber768_amd64_avx2_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
-}
-
-int libjade_kyber768_amd64_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
-    return jade_kem_kyber_kyber768_amd64_avx2_dec(shared_secret, ciphertext, secret_key);
-}
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/api.c b/src/kem/kyber/libjade_kyber768_amd64_ref/api.c
deleted file mode 100644
index 656ae3eff1..0000000000
--- a/src/kem/kyber/libjade_kyber768_amd64_ref/api.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <oqs/rand.h>
-#include "libjade_randombytes.h"
-#include "api.h"
-
-int libjade_kyber768_amd64_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
-    uint8_t keypair_coins[JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES];
-    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2);
-    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2);
-    return jade_kem_kyber_kyber768_amd64_ref_keypair_derand(public_key, secret_key, keypair_coins);
-}
-
-int libjade_kyber768_amd64_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
-    uint8_t enc_coins[JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES];
-    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES);
-    return jade_kem_kyber_kyber768_amd64_ref_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
-}
-
-int libjade_kyber768_amd64_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
-    return jade_kem_kyber_kyber768_amd64_ref_dec(shared_secret, ciphertext, secret_key);
-}
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/api.h b/src/kem/kyber/libjade_kyber768_avx2/api.h
similarity index 88%
rename from src/kem/kyber/libjade_kyber768_amd64_avx2/api.h
rename to src/kem/kyber/libjade_kyber768_avx2/api.h
index be5f7dbf3a..ac365776f1 100644
--- a/src/kem/kyber/libjade_kyber768_amd64_avx2/api.h
+++ b/src/kem/kyber/libjade_kyber768_avx2/api.h
@@ -12,7 +12,7 @@ int jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(
   const uint8_t *coins
 );
 
-int libjade_kyber768_amd64_avx2_keypair(
+int libjade_kyber768_avx2_keypair(
   uint8_t *public_key,
   uint8_t *secret_key
 );
@@ -24,7 +24,7 @@ int jade_kem_kyber_kyber768_amd64_avx2_enc_derand(
   const uint8_t *coins
 );
 
-int libjade_kyber768_amd64_avx2_enc(
+int libjade_kyber768_avx2_enc(
   uint8_t *ciphertext,
   uint8_t *shared_secret,
   const uint8_t *public_key
@@ -36,7 +36,7 @@ int jade_kem_kyber_kyber768_amd64_avx2_dec(
   const uint8_t *secret_key
 );
 
-int libjade_kyber768_amd64_avx2_dec(
+int libjade_kyber768_avx2_dec(
   uint8_t *shared_secret,
   const uint8_t *ciphertext,
   const uint8_t *secret_key
diff --git a/src/kem/kyber/libjade_kyber768_amd64_avx2/kem.s b/src/kem/kyber/libjade_kyber768_avx2/kem.s
similarity index 100%
rename from src/kem/kyber/libjade_kyber768_amd64_avx2/kem.s
rename to src/kem/kyber/libjade_kyber768_avx2/kem.s
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/api.h b/src/kem/kyber/libjade_kyber768_ref/api.h
similarity index 88%
rename from src/kem/kyber/libjade_kyber768_amd64_ref/api.h
rename to src/kem/kyber/libjade_kyber768_ref/api.h
index b8f2fc3032..0c453e07ef 100644
--- a/src/kem/kyber/libjade_kyber768_amd64_ref/api.h
+++ b/src/kem/kyber/libjade_kyber768_ref/api.h
@@ -12,7 +12,7 @@ int jade_kem_kyber_kyber768_amd64_ref_keypair_derand(
   const uint8_t *coins
 );
 
-int libjade_kyber768_amd64_ref_keypair(
+int libjade_kyber768_ref_keypair(
   uint8_t *public_key,
   uint8_t *secret_key
 );
@@ -24,7 +24,7 @@ int jade_kem_kyber_kyber768_amd64_ref_enc_derand(
   const uint8_t *coins
 );
 
-int libjade_kyber768_amd64_ref_enc(
+int libjade_kyber768_ref_enc(
   uint8_t *ciphertext,
   uint8_t *shared_secret,
   const uint8_t *public_key
@@ -36,7 +36,7 @@ int jade_kem_kyber_kyber768_amd64_ref_dec(
   const uint8_t *secret_key
 );
 
-int libjade_kyber768_amd64_ref_dec(
+int libjade_kyber768_ref_dec(
   uint8_t *shared_secret,
   const uint8_t *ciphertext,
   const uint8_t *secret_key
diff --git a/src/kem/kyber/libjade_kyber768_amd64_ref/kem.s b/src/kem/kyber/libjade_kyber768_ref/kem.s
similarity index 100%
rename from src/kem/kyber/libjade_kyber768_amd64_ref/kem.s
rename to src/kem/kyber/libjade_kyber768_ref/kem.s
diff --git a/src/oqsconfig.h.cmake b/src/oqsconfig.h.cmake
index 02358b97f5..1343d9fa82 100644
--- a/src/oqsconfig.h.cmake
+++ b/src/oqsconfig.h.cmake
@@ -195,7 +195,9 @@
 
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_KYBER @OQS_LIBJADE_BUILD_BIN@
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512 @OQS_LIBJADE_BUILD_BIN@
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2 @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512_ref @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2 @OQS_LIBJADE_BUILD_BIN@
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768 @OQS_LIBJADE_BUILD_BIN@
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2 @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768_ref @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2 @OQS_LIBJADE_BUILD_BIN@
 ///// OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ALG_ENABLE_DEFINES_END

From 762ba8d12a416f7454b76d9baa2ea9425de61a11 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 9 Apr 2024 14:32:18 +0200
Subject: [PATCH 44/82] Update alg docs, libjade code name scheme, and license

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .CMake/alg_support.cmake                      | 12 ---
 docs/algorithms/kem/kyber.md                  |  4 +
 docs/algorithms/kem/kyber.yml                 | 45 +++++++++
 docs/cbom.json                                | 98 +++++++++++++++++--
 .../copy_from_upstream/copy_from_libjade.yml  |  4 +-
 .../copy_from_upstream/copy_from_upstream.py  | 11 +++
 .../update_upstream_alg_docs.py               | 80 ++++++++++++++-
 .../libjade_shims/libjade_randombytes.c       |  3 +-
 .../libjade_shims/libjade_randombytes.h       |  2 +-
 src/kem/kyber/CMakeLists.txt                  |  8 +-
 src/oqsconfig.h.cmake                         |  2 -
 11 files changed, 234 insertions(+), 35 deletions(-)

diff --git a/.CMake/alg_support.cmake b/.CMake/alg_support.cmake
index f09ab5a13b..b5e3bf9d41 100644
--- a/.CMake/alg_support.cmake
+++ b/.CMake/alg_support.cmake
@@ -509,24 +509,12 @@ endif()
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_CONDITIONAL_START
 if(OQS_LIBJADE_BUILD)
 
-if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
-if(OQS_DIST_X86_64_BUILD OR ())
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_512_ref "" ON "OQS_ENABLE_LIBJADE_KEM_kyber_512" OFF)
-endif()
-endif()
-
 if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
 if(OQS_DIST_X86_64_BUILD OR (OQS_USE_AVX2_INSTRUCTIONS AND OQS_USE_BMI2_INSTRUCTIONS AND OQS_USE_POPCNT_INSTRUCTIONS))
     cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2 "" ON "OQS_ENABLE_LIBJADE_KEM_kyber_512" OFF)
 endif()
 endif()
 
-if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
-if(OQS_DIST_X86_64_BUILD OR ())
-    cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_768_ref "" ON "OQS_ENABLE_LIBJADE_KEM_kyber_768" OFF)
-endif()
-endif()
-
 if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
 if(OQS_DIST_X86_64_BUILD OR (OQS_USE_AVX2_INSTRUCTIONS AND OQS_USE_BMI2_INSTRUCTIONS AND OQS_USE_POPCNT_INSTRUCTIONS))
     cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2 "" ON "OQS_ENABLE_LIBJADE_KEM_kyber_768" OFF)
diff --git a/docs/algorithms/kem/kyber.md b/docs/algorithms/kem/kyber.md
index a75c144a2d..d31e3bc739 100644
--- a/docs/algorithms/kem/kyber.md
+++ b/docs/algorithms/kem/kyber.md
@@ -30,6 +30,8 @@
 |     [Primary Source](#primary-source)     | ref                      | All                         | All                             | None                    | True                               | True                                           | False                 |
 |     [Primary Source](#primary-source)     | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                 |
 | [oldpqclean-aarch64](#oldpqclean-aarch64) | aarch64                  | ARM64\_V8                   | Linux,Darwin                    | None                    | True                               | False                                          | False                 |
+|            [libjade](#libjade)            | ref                      | x86\_64                     | Linux,Darwin                    | None                    | True                               | True                                           | False                 |
+|            [libjade](#libjade)            | avx2                     | x86\_64                     | Linux,Darwin                    | None                    | True                               | True                                           | False                 |
 
 Are implementations chosen based on runtime CPU feature detection? **Yes**.
 
@@ -42,6 +44,8 @@ Are implementations chosen based on runtime CPU feature detection? **Yes**.
 |     [Primary Source](#primary-source)     | ref                      | All                         | All                             | None                    | True                               | True                                           | False                |
 |     [Primary Source](#primary-source)     | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                |
 | [oldpqclean-aarch64](#oldpqclean-aarch64) | aarch64                  | ARM64\_V8                   | Linux,Darwin                    | None                    | True                               | False                                          | False                |
+|            [libjade](#libjade)            | ref                      | x86\_64                     | Linux,Darwin                    | None                    | True                               | True                                           | False                |
+|            [libjade](#libjade)            | avx2                     | x86\_64                     | Linux,Darwin                    | None                    | True                               | True                                           | False                |
 
 Are implementations chosen based on runtime CPU feature detection? **Yes**.
 
diff --git a/docs/algorithms/kem/kyber.yml b/docs/algorithms/kem/kyber.yml
index cde870c10b..d57b254e2a 100644
--- a/docs/algorithms/kem/kyber.yml
+++ b/docs/algorithms/kem/kyber.yml
@@ -26,6 +26,11 @@ optimized-upstreams:
       with copy_from_upstream patches
     spdx-license-identifier: CC0-1.0 and (CC0-1.0 or Apache-2.0) and (CC0-1.0 or MIT)
       and MIT
+formally-verified-upstreams:
+  libjade:
+    source: https://github.com/formosa-crypto/lib/commit/a6845a257a0ebbab4fd93c19423a62557c838a10
+      with copy_from_upstream patches
+    spdx-license-identifier: CC0-1.0
 parameter-sets:
 - name: Kyber512
   claimed-nist-level: 1
@@ -72,6 +77,26 @@ parameter-sets:
     no-secret-dependent-branching-claimed: true
     no-secret-dependent-branching-checked-by-valgrind: false
     large-stack-usage: false
+  - upstream: libjade
+    upstream-id: ref
+    supported-platforms:
+    - architecture: x86_64
+      operating_systems:
+      - Linux
+      - Darwin
+    no-secret-dependent-branching-claimed: true
+    no-secret-dependent-branching-checked-by-valgrind: true
+    large-stack-usage: false
+  - upstream: libjade
+    upstream-id: avx2
+    supported-platforms:
+    - architecture: x86_64
+      operating_systems:
+      - Linux
+      - Darwin
+    no-secret-dependent-branching-claimed: true
+    no-secret-dependent-branching-checked-by-valgrind: true
+    large-stack-usage: false
 - name: Kyber768
   claimed-nist-level: 3
   claimed-security: IND-CCA2
@@ -117,6 +142,26 @@ parameter-sets:
     no-secret-dependent-branching-claimed: true
     no-secret-dependent-branching-checked-by-valgrind: false
     large-stack-usage: false
+  - upstream: libjade
+    upstream-id: ref
+    supported-platforms:
+    - architecture: x86_64
+      operating_systems:
+      - Linux
+      - Darwin
+    no-secret-dependent-branching-claimed: true
+    no-secret-dependent-branching-checked-by-valgrind: true
+    large-stack-usage: false
+  - upstream: libjade
+    upstream-id: avx2
+    supported-platforms:
+    - architecture: x86_64
+      operating_systems:
+      - Linux
+      - Darwin
+    no-secret-dependent-branching-claimed: true
+    no-secret-dependent-branching-checked-by-valgrind: true
+    large-stack-usage: false
 - name: Kyber1024
   claimed-nist-level: 5
   claimed-security: IND-CCA2
diff --git a/docs/cbom.json b/docs/cbom.json
index 7dd47dc218..7d97543d71 100644
--- a/docs/cbom.json
+++ b/docs/cbom.json
@@ -1,23 +1,23 @@
 {
   "bomFormat": "CBOM",
   "specVersion": "1.4-cbom-1.0",
-  "serialNumber": "urn:uuid:b3ac0f3d-b320-4f0f-bbef-6c535c1e9874",
+  "serialNumber": "urn:uuid:9f4195fb-9a9f-4cf5-b2ee-e83a2a3a78a0",
   "version": 1,
   "metadata": {
-    "timestamp": "2024-03-05T11:49:42.428605",
+    "timestamp": "2024-04-09T02:01:13.001332",
     "component": {
       "type": "library",
-      "bom-ref": "pkg:github/open-quantum-safe/liboqs@1f393bfe3690c6ef1cac9070d166995ce4fb3e9d",
+      "bom-ref": "pkg:github/open-quantum-safe/liboqs@9df2fd7c44e593bca27e5bfd6a0b4c5207f89042",
       "name": "liboqs",
-      "version": "1f393bfe3690c6ef1cac9070d166995ce4fb3e9d"
+      "version": "9df2fd7c44e593bca27e5bfd6a0b4c5207f89042"
     }
   },
   "components": [
     {
       "type": "library",
-      "bom-ref": "pkg:github/open-quantum-safe/liboqs@1f393bfe3690c6ef1cac9070d166995ce4fb3e9d",
+      "bom-ref": "pkg:github/open-quantum-safe/liboqs@9df2fd7c44e593bca27e5bfd6a0b4c5207f89042",
       "name": "liboqs",
-      "version": "1f393bfe3690c6ef1cac9070d166995ce4fb3e9d"
+      "version": "9df2fd7c44e593bca27e5bfd6a0b4c5207f89042"
     },
     {
       "type": "crypto-asset",
@@ -839,6 +839,46 @@
         "nistQuantumSecurityLevel": 1
       }
     },
+    {
+      "type": "crypto-asset",
+      "bom-ref": "alg:Kyber512:x86_64",
+      "name": "Kyber",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "variant": "Kyber512",
+          "primitive": "kem",
+          "implementationLevel": "softwarePlainRam",
+          "cryptoFunctions": [
+            "keygen",
+            "encapsulate",
+            "decapsulate"
+          ],
+          "implementationPlatform": "x86_64"
+        },
+        "nistQuantumSecurityLevel": 1
+      }
+    },
+    {
+      "type": "crypto-asset",
+      "bom-ref": "alg:Kyber512:x86_64",
+      "name": "Kyber",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "variant": "Kyber512",
+          "primitive": "kem",
+          "implementationLevel": "softwarePlainRam",
+          "cryptoFunctions": [
+            "keygen",
+            "encapsulate",
+            "decapsulate"
+          ],
+          "implementationPlatform": "x86_64"
+        },
+        "nistQuantumSecurityLevel": 1
+      }
+    },
     {
       "type": "crypto-asset",
       "bom-ref": "alg:Kyber768:generic",
@@ -899,6 +939,46 @@
         "nistQuantumSecurityLevel": 3
       }
     },
+    {
+      "type": "crypto-asset",
+      "bom-ref": "alg:Kyber768:x86_64",
+      "name": "Kyber",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "variant": "Kyber768",
+          "primitive": "kem",
+          "implementationLevel": "softwarePlainRam",
+          "cryptoFunctions": [
+            "keygen",
+            "encapsulate",
+            "decapsulate"
+          ],
+          "implementationPlatform": "x86_64"
+        },
+        "nistQuantumSecurityLevel": 3
+      }
+    },
+    {
+      "type": "crypto-asset",
+      "bom-ref": "alg:Kyber768:x86_64",
+      "name": "Kyber",
+      "cryptoProperties": {
+        "assetType": "algorithm",
+        "algorithmProperties": {
+          "variant": "Kyber768",
+          "primitive": "kem",
+          "implementationLevel": "softwarePlainRam",
+          "cryptoFunctions": [
+            "keygen",
+            "encapsulate",
+            "decapsulate"
+          ],
+          "implementationPlatform": "x86_64"
+        },
+        "nistQuantumSecurityLevel": 3
+      }
+    },
     {
       "type": "crypto-asset",
       "bom-ref": "alg:Kyber1024:generic",
@@ -2168,7 +2248,7 @@
   ],
   "dependencies": [
     {
-      "ref": "pkg:github/open-quantum-safe/liboqs@1f393bfe3690c6ef1cac9070d166995ce4fb3e9d",
+      "ref": "pkg:github/open-quantum-safe/liboqs@9df2fd7c44e593bca27e5bfd6a0b4c5207f89042",
       "dependsOn": [
         "alg:BIKE-L1:x86_64",
         "alg:BIKE-L3:x86_64",
@@ -2211,9 +2291,13 @@
         "alg:Kyber512:generic",
         "alg:Kyber512:x86_64",
         "alg:Kyber512:armv8-a",
+        "alg:Kyber512:x86_64",
+        "alg:Kyber512:x86_64",
         "alg:Kyber768:generic",
         "alg:Kyber768:x86_64",
         "alg:Kyber768:armv8-a",
+        "alg:Kyber768:x86_64",
+        "alg:Kyber768:x86_64",
         "alg:Kyber1024:generic",
         "alg:Kyber1024:x86_64",
         "alg:Kyber1024:armv8-a",
diff --git a/scripts/copy_from_upstream/copy_from_libjade.yml b/scripts/copy_from_upstream/copy_from_libjade.yml
index d30cee5020..034747fca4 100644
--- a/scripts/copy_from_upstream/copy_from_libjade.yml
+++ b/scripts/copy_from_upstream/copy_from_libjade.yml
@@ -7,12 +7,10 @@ upstreams:
     kem_meta_path: 'src/crypto_kem/{family}/{pqclean_scheme}/META.yml'
     kem_scheme_path: 'src/crypto_kem/{family}/{pqclean_scheme}'
     patches: ['libjade-kyber-api.patch', 'libjade-kyber-meta.patch']
-templates:
-    kem_scheme.c: ['kem_scheme.c.libjade', 'kem_scheme_keypair.c.libjade', 'kem_scheme_encaps.c.libjade', 'kem_scheme_decaps.c.libjade']
 kems:
   -
     name: kyber
-    default_implementation: amd64/ref
+    default_implementation: ref
     upstream_location: libjade
     schemes:
       -
diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index 984ce491fe..7ef91e6dad 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -683,6 +683,17 @@ def copy_from_libjade():
     process_families(instructions, os.environ['LIBOQS_DIR'], True, False, True)
     replacer('.CMake/alg_support.cmake', instructions, '#####', libjade=True)
     replacer('src/oqsconfig.h.cmake', instructions, '/////', libjade=True)
+    for t in ["kem", "sig"]:
+        with open(os.path.join(os.environ['LIBOQS_DIR'], 'tests', 'KATs', t, 'kats.json'), "w") as f:
+            json.dump(kats[t], f, indent=2, sort_keys=True)
+
+    update_upstream_alg_docs.do_it(os.environ['LIBOQS_DIR'], upstream_location='libjade')
+
+    sys.path.insert(1, os.path.join(os.environ['LIBOQS_DIR'], 'scripts'))
+    import update_docs_from_yaml
+    import update_cbom
+    update_docs_from_yaml.do_it(os.environ['LIBOQS_DIR'])
+    update_cbom.update_cbom_if_algs_not_changed(os.environ['LIBOQS_DIR'], "git")
     if not keepdata:
         shutil.rmtree('repos')
 
diff --git a/scripts/copy_from_upstream/update_upstream_alg_docs.py b/scripts/copy_from_upstream/update_upstream_alg_docs.py
index 706c2ed7fd..55163fc9ea 100755
--- a/scripts/copy_from_upstream/update_upstream_alg_docs.py
+++ b/scripts/copy_from_upstream/update_upstream_alg_docs.py
@@ -217,6 +217,75 @@ def update_upstream_kem_alg_docs(liboqs_root, kems, upstream_info, write_changes
                 store_yaml(oqs_yaml_path, oqs_yaml)
 
 
+def update_libjade_kem_alg_docs(liboqs_root, kems, upstream_info, write_changes=False):
+    for kem in kems:
+        ui = get_upstream_info(upstream_info, kem['upstream_location'])
+        upstream_root = ui['upstream_root']
+        meta_yaml_path_template = ui['kem_meta_path']
+
+        oqs_yaml_path = os.path.join(liboqs_root, 'docs', 'algorithms', 'kem', '{}.yml'.format(kem['name']))
+        oqs_yaml = load_yaml(oqs_yaml_path)
+        # We cannot assume that the ordering of "parameter-sets"
+        # in the OQS YAML files matches that of copy_from_upstream.yml
+        # hence use helper function get_oqs_yaml(alg_name)
+        for scheme in kem['schemes']:
+            scheme['family'] = kem['name']
+            upstream_meta_path = os.path.join(upstream_root, meta_yaml_path_template.format_map(scheme))
+            upstream_yaml = load_yaml(upstream_meta_path)
+
+            oqs_yaml['type'] = rhs_if_not_equal(oqs_yaml['type'], upstream_yaml['type'], "type")
+
+            oqs_yaml['principal-submitters'] = rhs_if_not_equal(oqs_yaml['principal-submitters'], upstream_yaml['principal-submitters'], "principal-submitters")
+            if 'auxiliary-submitters' in upstream_yaml:
+                oqs_yaml['auxiliary-submitters'] = rhs_if_not_equal(oqs_yaml['auxiliary-submitters'] if 'auxiliary-submitters' in oqs_yaml else '', upstream_yaml['auxiliary-submitters'], "auxiliary-submitters")
+
+            for upstream in upstream_info:
+                verified_upstream_base_url = upstream['git_url'][:-len(".git")]
+                for patchfilename in upstream['patches']:
+                    if kem['name'] in patchfilename:
+                        patches_done=" with copy_from_upstream patches"
+                patches_done=""
+                if 'patches' in upstream:
+                    for patchfilename in upstream['patches']:
+                        if kem['name'] in patchfilename:
+                            patches_done=" with copy_from_upstream patches"
+                if 'formally-verified-upstreams' in oqs_yaml and upstream['name'] in oqs_yaml['formally-verified-upstreams']:
+                    
+                    lhs = oqs_yaml['formally-verified-upstreams'][upstream['name']]['source']
+                else:
+                    lhs = ''
+                git_commit = upstream['git_commit']
+                oqs_yaml['formally-verified-upstreams'][upstream['name']]['source'] = rhs_if_not_equal(lhs, ("{}/commit/{}"+patches_done).format(verified_upstream_base_url, git_commit), "formally-verified-upstreams")
+
+            index, oqs_scheme_yaml = get_oqs_yaml(oqs_yaml['parameter-sets'], scheme['pretty_name_full'])
+
+            oqs_scheme_yaml['claimed-nist-level'] = rhs_if_not_equal(oqs_scheme_yaml['claimed-nist-level'], upstream_yaml['claimed-nist-level'], "claimed-nist-level")
+            oqs_scheme_yaml['claimed-security'] = rhs_if_not_equal(oqs_scheme_yaml['claimed-security'], upstream_yaml['claimed-security'], "claimed-security")
+            oqs_scheme_yaml['length-public-key'] = rhs_if_not_equal(oqs_scheme_yaml['length-public-key'], upstream_yaml['length-public-key'], "length-public-key")
+            oqs_scheme_yaml['length-ciphertext'] = rhs_if_not_equal(oqs_scheme_yaml['length-ciphertext'], upstream_yaml['length-ciphertext'], "length-ciphertext")
+            oqs_scheme_yaml['length-secret-key'] = rhs_if_not_equal(oqs_scheme_yaml['length-secret-key'], upstream_yaml['length-secret-key'], "legnth-secret-key")
+            oqs_scheme_yaml['length-shared-secret'] = rhs_if_not_equal(oqs_scheme_yaml['length-shared-secret'], upstream_yaml['length-shared-secret'], "length-shared-secret")
+
+            for impl_index, impl in enumerate(oqs_scheme_yaml['implementations']):
+                if impl['upstream'] == kem['upstream_location']:
+                    for upstream_impl in upstream_yaml['implementations']:
+                        if impl['upstream-id'] == upstream_impl['name']:
+                            break
+                        if 'supported_platforms' in upstream_impl:
+                            for i in range(len(upstream_impl['supported_platforms'])):
+                                if not upstream_impl['supported_platforms'][i]['required_flags']:
+                                    del upstream_impl['supported_platforms'][i]['required_flags']
+
+                        impl['supported-platforms'] = rhs_if_not_equal(impl['supported-platforms'], upstream_impl['supported_platforms'], "supported-platforms")
+                    else:
+                        impl['supported-platforms'] = rhs_if_not_equal(impl['supported-platforms'], "all", "supported-platforms")
+                    oqs_scheme_yaml['implementations'][impl_index] = impl
+
+                oqs_yaml['parameter-sets'][index] = oqs_scheme_yaml
+        if write_changes:
+            store_yaml(oqs_yaml_path, oqs_yaml)
+            
+
 
 def update_upstream_sig_alg_docs(liboqs_root, sigs, upstream_info, write_changes=False):
     for sig in sigs:
@@ -368,7 +437,7 @@ def update_upstream_sig_alg_docs(liboqs_root, sigs, upstream_info, write_changes
                 store_yaml(oqs_yaml_path, oqs_yaml)
 
 
-def do_it(liboqs_root):
+def do_it(liboqs_root, upstream_location='upstream'):
    global DEBUG
    if liboqs_root == None:
       parser = argparse.ArgumentParser()
@@ -388,15 +457,18 @@ def do_it(liboqs_root):
    if not write_changes:
        print("--write-changes not set; changes will not be written out.")
    instructions = load_yaml(
-       os.path.join(liboqs_root, 'scripts', 'copy_from_upstream', 'copy_from_upstream.yml'),
+       os.path.join(liboqs_root, 'scripts', 'copy_from_upstream', 'copy_from_{}.yml'.format(upstream_location)),
        encoding='utf-8')
 
    for upstream in instructions['upstreams']:
      if 'git_url' in upstream.keys():
        upstream['upstream_root'] = fetch_upstream(liboqs_root, upstream)
 
-   update_upstream_kem_alg_docs(liboqs_root, instructions['kems'], instructions['upstreams'], write_changes)
-   update_upstream_sig_alg_docs(liboqs_root, instructions['sigs'], instructions['upstreams'], write_changes)
+   if upstream_location == 'libjade':
+     update_libjade_kem_alg_docs(liboqs_root, instructions['kems'], instructions['upstreams'], write_changes)
+   else:
+     update_upstream_kem_alg_docs(liboqs_root, instructions['kems'], instructions['upstreams'], write_changes)
+     update_upstream_sig_alg_docs(liboqs_root, instructions['sigs'], instructions['upstreams'], write_changes)
 
 if __name__ == "__main__":
    do_it(None)
diff --git a/src/common/libjade_shims/libjade_randombytes.c b/src/common/libjade_shims/libjade_randombytes.c
index 40e4ce9e74..c80e61a6b5 100644
--- a/src/common/libjade_shims/libjade_randombytes.c
+++ b/src/common/libjade_shims/libjade_randombytes.c
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: MIT
+// SPDX-License-Identifier: CC0-1.0
 
 #if defined(__unix__) || defined(__APPLE__)
 #include <oqs/rand.h>
@@ -6,6 +6,5 @@
 
 void __jasmin_syscall_randombytes__(uint8_t *_x, uint64_t xlen) {
 	OQS_randombytes(_x, xlen);
-	// return _x;
 }
 #endif
diff --git a/src/common/libjade_shims/libjade_randombytes.h b/src/common/libjade_shims/libjade_randombytes.h
index c177ef6933..591fbd893d 100644
--- a/src/common/libjade_shims/libjade_randombytes.h
+++ b/src/common/libjade_shims/libjade_randombytes.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: MIT
+// SPDX-License-Identifier: CC0-1.0
 
 #if defined(__unix__) || defined(__APPLE__)
 #ifndef LIBJADE_RANDOMBYTES_H
diff --git a/src/kem/kyber/CMakeLists.txt b/src/kem/kyber/CMakeLists.txt
index 90e04e0ef5..77a70b9953 100644
--- a/src/kem/kyber/CMakeLists.txt
+++ b/src/kem/kyber/CMakeLists.txt
@@ -91,8 +91,8 @@ endif()
 
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_START
 
-if(OQS_ENABLE_LIBJADE_KEM_kyber_512_ref)
-    add_library(jasmin_kyber_512_ref OBJECT libjade_kyber512_ref/kem.s)
+if(OQS_ENABLE_LIBJADE_KEM_kyber_512)
+    add_library(jasmin_kyber_512_ref OBJECT kem_kyber_512.c libjade_kyber512_ref/kem.s)
     target_include_directories(kyber_512_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_ref)
     target_include_directories(kyber_512_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_ref>)
@@ -106,8 +106,8 @@ if(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_avx2>)
 endif()
 
-if(OQS_ENABLE_LIBJADE_KEM_kyber_768_ref)
-    add_library(jasmin_kyber_768_ref OBJECT libjade_kyber768_ref/kem.s)
+if(OQS_ENABLE_LIBJADE_KEM_kyber_768)
+    add_library(jasmin_kyber_768_ref OBJECT kem_kyber_768.c libjade_kyber768_ref/kem.s)
     target_include_directories(kyber_768_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_ref)
     target_include_directories(kyber_768_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_ref>)
diff --git a/src/oqsconfig.h.cmake b/src/oqsconfig.h.cmake
index 1343d9fa82..141ac8f934 100644
--- a/src/oqsconfig.h.cmake
+++ b/src/oqsconfig.h.cmake
@@ -195,9 +195,7 @@
 
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_KYBER @OQS_LIBJADE_BUILD_BIN@
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512 @OQS_LIBJADE_BUILD_BIN@
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512_ref @OQS_LIBJADE_BUILD_BIN@
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2 @OQS_LIBJADE_BUILD_BIN@
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768 @OQS_LIBJADE_BUILD_BIN@
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768_ref @OQS_LIBJADE_BUILD_BIN@
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2 @OQS_LIBJADE_BUILD_BIN@
 ///// OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ALG_ENABLE_DEFINES_END

From 0f1d3bd14f6cf6db32cb29b26a3063081e76f9ad Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 9 Apr 2024 14:51:13 +0200
Subject: [PATCH 45/82] Update copy_from_upstream documentation

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/copy_from_libjade.yml       | 3 +++
 scripts/copy_from_upstream/copy_from_upstream.py       | 9 ++++++++-
 scripts/copy_from_upstream/update_upstream_alg_docs.py | 6 ++++++
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/scripts/copy_from_upstream/copy_from_libjade.yml b/scripts/copy_from_upstream/copy_from_libjade.yml
index 034747fca4..3912c6e273 100644
--- a/scripts/copy_from_upstream/copy_from_libjade.yml
+++ b/scripts/copy_from_upstream/copy_from_libjade.yml
@@ -1,3 +1,6 @@
+# When adding an algorithm to copy_from_libjade.yml, the boolean 
+# 'libjade_implementation' and list of implementation 'libjade_implementations' 
+# must updated for the relevant algorithm in copy_from_upstream.yml
 upstreams:
   -
     name: libjade
diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index 7ef91e6dad..d94dcdd3d5 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -65,6 +65,8 @@ def shell(command, expect=0):
     if ret.returncode != expect:
         raise Exception("'{}' failed with error {}. Expected {}.".format(" ".join(command), ret, expect))
 
+# Generate template from specified scheme to replace old file in 'copy' mode
+# but preserves additions made to file made in priour runs of 'libjade' mode 
 def generator(destination_file_path, template_filename, delimiter, family, scheme_desired):
     template = file_get_contents(
         os.path.join(os.environ['LIBOQS_DIR'], 'scripts', 'copy_from_upstream', template_filename))
@@ -673,7 +675,12 @@ def copy_from_upstream():
     if not keepdata:
         shutil.rmtree('repos')
 
-
+# Copy algorithms from libjade specified in copy_from_libjade.yml, apply 
+# patches and generate select templates
+# Can be run independant of 'copy' mode.
+# When adding an algorithm to copy_from_libjade.yml, the boolean 
+# 'libjade_implementation' and list of implementation 'libjade_implementations' 
+# must updated for the relevant algorithm in copy_from_upstream.yml
 def copy_from_libjade():
     for t in ["kem", "sig"]:
         with open(os.path.join(os.environ['LIBOQS_DIR'], 'tests', 'KATs', t, 'kats.json'), 'r') as fp:
diff --git a/scripts/copy_from_upstream/update_upstream_alg_docs.py b/scripts/copy_from_upstream/update_upstream_alg_docs.py
index 55163fc9ea..ce98cfe5d6 100755
--- a/scripts/copy_from_upstream/update_upstream_alg_docs.py
+++ b/scripts/copy_from_upstream/update_upstream_alg_docs.py
@@ -217,6 +217,12 @@ def update_upstream_kem_alg_docs(liboqs_root, kems, upstream_info, write_changes
                 store_yaml(oqs_yaml_path, oqs_yaml)
 
 
+# Merge documentation in liboqs_root/docs/algorithms/kem/kem['name'].yml with 
+# upstream information from libjade (patched with copy_from_upstream.py):
+# Args:
+# kems: List of kems in copy_from_libjade.yml
+# upstream_info: Hashtable of upstream information (keyed by upstream source)
+#  incl. entry: 'upstream_root' pointing to local folder containing source code
 def update_libjade_kem_alg_docs(liboqs_root, kems, upstream_info, write_changes=False):
     for kem in kems:
         ui = get_upstream_info(upstream_info, kem['upstream_location'])

From 92df906447bea50a684a6c0f6adada1316a6f399 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 9 Apr 2024 17:37:50 +0200
Subject: [PATCH 46/82] Fix copy_from_upstream.py and simply libjade code name
 scheme

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 docs/algorithms/kem/kyber.md                  |  8 ++--
 docs/algorithms/kem/kyber.yml                 | 20 ++++-----
 docs/cbom.json                                | 26 +++++------
 .../copy_from_upstream/copy_from_upstream.py  |  8 ++--
 src/kem/kyber/kem_kyber_512.c                 | 44 +++++++++----------
 src/kem/kyber/kem_kyber_768.c                 | 44 +++++++++----------
 6 files changed, 75 insertions(+), 75 deletions(-)

diff --git a/docs/algorithms/kem/kyber.md b/docs/algorithms/kem/kyber.md
index d31e3bc739..d36e5f53be 100644
--- a/docs/algorithms/kem/kyber.md
+++ b/docs/algorithms/kem/kyber.md
@@ -30,8 +30,8 @@
 |     [Primary Source](#primary-source)     | ref                      | All                         | All                             | None                    | True                               | True                                           | False                 |
 |     [Primary Source](#primary-source)     | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                 |
 | [oldpqclean-aarch64](#oldpqclean-aarch64) | aarch64                  | ARM64\_V8                   | Linux,Darwin                    | None                    | True                               | False                                          | False                 |
-|            [libjade](#libjade)            | ref                      | x86\_64                     | Linux,Darwin                    | None                    | True                               | True                                           | False                 |
-|            [libjade](#libjade)            | avx2                     | x86\_64                     | Linux,Darwin                    | None                    | True                               | True                                           | False                 |
+|     [Primary Source](#primary-source)     | ref                      | All                         | All                             | None                    | True                               | True                                           | False                 |
+|            [libjade](#libjade)            | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                 |
 
 Are implementations chosen based on runtime CPU feature detection? **Yes**.
 
@@ -44,8 +44,8 @@ Are implementations chosen based on runtime CPU feature detection? **Yes**.
 |     [Primary Source](#primary-source)     | ref                      | All                         | All                             | None                    | True                               | True                                           | False                |
 |     [Primary Source](#primary-source)     | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                |
 | [oldpqclean-aarch64](#oldpqclean-aarch64) | aarch64                  | ARM64\_V8                   | Linux,Darwin                    | None                    | True                               | False                                          | False                |
-|            [libjade](#libjade)            | ref                      | x86\_64                     | Linux,Darwin                    | None                    | True                               | True                                           | False                |
-|            [libjade](#libjade)            | avx2                     | x86\_64                     | Linux,Darwin                    | None                    | True                               | True                                           | False                |
+|     [Primary Source](#primary-source)     | ref                      | All                         | All                             | None                    | True                               | True                                           | False                |
+|            [libjade](#libjade)            | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                |
 
 Are implementations chosen based on runtime CPU feature detection? **Yes**.
 
diff --git a/docs/algorithms/kem/kyber.yml b/docs/algorithms/kem/kyber.yml
index d57b254e2a..9858055f6d 100644
--- a/docs/algorithms/kem/kyber.yml
+++ b/docs/algorithms/kem/kyber.yml
@@ -79,11 +79,7 @@ parameter-sets:
     large-stack-usage: false
   - upstream: libjade
     upstream-id: ref
-    supported-platforms:
-    - architecture: x86_64
-      operating_systems:
-      - Linux
-      - Darwin
+    supported-platforms: all
     no-secret-dependent-branching-claimed: true
     no-secret-dependent-branching-checked-by-valgrind: true
     large-stack-usage: false
@@ -94,6 +90,10 @@ parameter-sets:
       operating_systems:
       - Linux
       - Darwin
+      required_flags:
+      - avx2
+      - bmi2
+      - popcnt
     no-secret-dependent-branching-claimed: true
     no-secret-dependent-branching-checked-by-valgrind: true
     large-stack-usage: false
@@ -144,11 +144,7 @@ parameter-sets:
     large-stack-usage: false
   - upstream: libjade
     upstream-id: ref
-    supported-platforms:
-    - architecture: x86_64
-      operating_systems:
-      - Linux
-      - Darwin
+    supported-platforms: all
     no-secret-dependent-branching-claimed: true
     no-secret-dependent-branching-checked-by-valgrind: true
     large-stack-usage: false
@@ -159,6 +155,10 @@ parameter-sets:
       operating_systems:
       - Linux
       - Darwin
+      required_flags:
+      - avx2
+      - bmi2
+      - popcnt
     no-secret-dependent-branching-claimed: true
     no-secret-dependent-branching-checked-by-valgrind: true
     large-stack-usage: false
diff --git a/docs/cbom.json b/docs/cbom.json
index 7d97543d71..9c2bc3e9d8 100644
--- a/docs/cbom.json
+++ b/docs/cbom.json
@@ -1,23 +1,23 @@
 {
   "bomFormat": "CBOM",
   "specVersion": "1.4-cbom-1.0",
-  "serialNumber": "urn:uuid:9f4195fb-9a9f-4cf5-b2ee-e83a2a3a78a0",
+  "serialNumber": "urn:uuid:50fe9dad-cdcb-4309-8c2e-67b5953686c5",
   "version": 1,
   "metadata": {
-    "timestamp": "2024-04-09T02:01:13.001332",
+    "timestamp": "2024-04-09T17:32:27.545689",
     "component": {
       "type": "library",
-      "bom-ref": "pkg:github/open-quantum-safe/liboqs@9df2fd7c44e593bca27e5bfd6a0b4c5207f89042",
+      "bom-ref": "pkg:github/open-quantum-safe/liboqs@a4d556f71691c00d045bcdac50a2d60bbba2db19",
       "name": "liboqs",
-      "version": "9df2fd7c44e593bca27e5bfd6a0b4c5207f89042"
+      "version": "a4d556f71691c00d045bcdac50a2d60bbba2db19"
     }
   },
   "components": [
     {
       "type": "library",
-      "bom-ref": "pkg:github/open-quantum-safe/liboqs@9df2fd7c44e593bca27e5bfd6a0b4c5207f89042",
+      "bom-ref": "pkg:github/open-quantum-safe/liboqs@a4d556f71691c00d045bcdac50a2d60bbba2db19",
       "name": "liboqs",
-      "version": "9df2fd7c44e593bca27e5bfd6a0b4c5207f89042"
+      "version": "a4d556f71691c00d045bcdac50a2d60bbba2db19"
     },
     {
       "type": "crypto-asset",
@@ -841,7 +841,7 @@
     },
     {
       "type": "crypto-asset",
-      "bom-ref": "alg:Kyber512:x86_64",
+      "bom-ref": "alg:Kyber512:generic",
       "name": "Kyber",
       "cryptoProperties": {
         "assetType": "algorithm",
@@ -854,7 +854,7 @@
             "encapsulate",
             "decapsulate"
           ],
-          "implementationPlatform": "x86_64"
+          "implementationPlatform": "generic"
         },
         "nistQuantumSecurityLevel": 1
       }
@@ -941,7 +941,7 @@
     },
     {
       "type": "crypto-asset",
-      "bom-ref": "alg:Kyber768:x86_64",
+      "bom-ref": "alg:Kyber768:generic",
       "name": "Kyber",
       "cryptoProperties": {
         "assetType": "algorithm",
@@ -954,7 +954,7 @@
             "encapsulate",
             "decapsulate"
           ],
-          "implementationPlatform": "x86_64"
+          "implementationPlatform": "generic"
         },
         "nistQuantumSecurityLevel": 3
       }
@@ -2248,7 +2248,7 @@
   ],
   "dependencies": [
     {
-      "ref": "pkg:github/open-quantum-safe/liboqs@9df2fd7c44e593bca27e5bfd6a0b4c5207f89042",
+      "ref": "pkg:github/open-quantum-safe/liboqs@a4d556f71691c00d045bcdac50a2d60bbba2db19",
       "dependsOn": [
         "alg:BIKE-L1:x86_64",
         "alg:BIKE-L3:x86_64",
@@ -2291,12 +2291,12 @@
         "alg:Kyber512:generic",
         "alg:Kyber512:x86_64",
         "alg:Kyber512:armv8-a",
-        "alg:Kyber512:x86_64",
+        "alg:Kyber512:generic",
         "alg:Kyber512:x86_64",
         "alg:Kyber768:generic",
         "alg:Kyber768:x86_64",
         "alg:Kyber768:armv8-a",
-        "alg:Kyber768:x86_64",
+        "alg:Kyber768:generic",
         "alg:Kyber768:x86_64",
         "alg:Kyber1024:generic",
         "alg:Kyber1024:x86_64",
diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index d94dcdd3d5..5e669a517e 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -255,8 +255,8 @@ def load_instructions(file):
                                                                     upstreams[location]['kem_scheme_path'].format_map(scheme)))
             scheme['metadata']['ind_cca'] = 'true' if (
                     scheme['metadata']['claimed-security'] == "IND-CCA2") else 'false'
-            scheme['pqclean_scheme_c'] = scheme['pqclean_scheme']
-            scheme['scheme_c'] = scheme['scheme']
+            scheme['pqclean_scheme_c'] = scheme['pqclean_scheme'].replace('-', '')
+            scheme['scheme_c'] = scheme['scheme'].replace('-', '')
             scheme['default_implementation'] = family['default_implementation']
             for impl in scheme['metadata']['implementations']:
                 if 'common_dep' in impl:
@@ -354,8 +354,8 @@ def load_instructions(file):
                         scheme['scheme_paths'][arch] = (os.path.join('repos', location,
                                                                     upstreams[location]['sig_scheme_path'].format_map(scheme)))
             scheme['metadata']['euf_cma'] = 'true'
-            scheme['pqclean_scheme_c'] = scheme['pqclean_scheme']
-            scheme['scheme_c'] = scheme['scheme']
+            scheme['pqclean_scheme_c'] = scheme['pqclean_scheme'].replace('-', '')
+            scheme['scheme_c'] = scheme['scheme'].replace('-', '')
             scheme['default_implementation'] = family['default_implementation']
             for impl in scheme['metadata']['implementations']:
                 if 'common_dep' in impl:
diff --git a/src/kem/kyber/kem_kyber_512.c b/src/kem/kyber/kem_kyber_512.c
index 26dadaac38..d25f3d8f70 100644
--- a/src/kem/kyber/kem_kyber_512.c
+++ b/src/kem/kyber/kem_kyber_512.c
@@ -47,28 +47,28 @@ extern int PQCLEAN_KYBER512_AARCH64_crypto_kem_dec(uint8_t *ss, const uint8_t *c
 #endif
 
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512)
-extern int libjade_kyber512_amd64_ref_keypair(uint8_t *pk, uint8_t *sk);
-extern int libjade_kyber512_amd64_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
-extern int libjade_kyber512_amd64_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
+extern int libjade_kyber512_ref_keypair(uint8_t *pk, uint8_t *sk);
+extern int libjade_kyber512_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
+extern int libjade_kyber512_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
 
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
-extern int libjade_kyber512_amd64_avx2_keypair(uint8_t *pk, uint8_t *sk);
-extern int libjade_kyber512_amd64_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
-extern int libjade_kyber512_amd64_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
+extern int libjade_kyber512_avx2_keypair(uint8_t *pk, uint8_t *sk);
+extern int libjade_kyber512_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
+extern int libjade_kyber512_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
 
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512__avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) libjade_kyber512_amd64_avx2_keypair(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_avx2_keypair(public_key, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber512_amd64_ref_keypair(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
@@ -78,11 +78,11 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secre
 		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_keypair(public_key, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber512_amd64_ref_keypair(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-	return (OQS_STATUS) libjade_kyber512_amd64_ref_keypair(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber512_ref_keypair(public_key, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
@@ -113,14 +113,14 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secre
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
 #if OQS_LIBJADE_BUILD
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512__avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) libjade_kyber512_amd64_avx2_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_avx2_enc(public_key, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber512_amd64_ref_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_ref_enc(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
@@ -130,11 +130,11 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared
 		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_enc(public_key, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber512_amd64_ref_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_ref_enc(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-	return (OQS_STATUS) libjade_kyber512_amd64_ref_enc(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber512_ref_enc(public_key, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
@@ -165,14 +165,14 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_amd64_avx2)
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512__avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) libjade_kyber512_amd64_avx2_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_avx2_dec(public_key, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber512_amd64_ref_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_ref_dec(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
@@ -182,11 +182,11 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_decaps(uint8_t *shared_secret, const uint8_
 		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_dec(public_key, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber512_amd64_ref_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_ref_dec(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-	return (OQS_STATUS) libjade_kyber512_amd64_ref_dec(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber512_ref_dec(public_key, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
diff --git a/src/kem/kyber/kem_kyber_768.c b/src/kem/kyber/kem_kyber_768.c
index bf69a83d38..f087cce5e9 100644
--- a/src/kem/kyber/kem_kyber_768.c
+++ b/src/kem/kyber/kem_kyber_768.c
@@ -47,28 +47,28 @@ extern int PQCLEAN_KYBER768_AARCH64_crypto_kem_dec(uint8_t *ss, const uint8_t *c
 #endif
 
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768)
-extern int libjade_kyber768_amd64_ref_keypair(uint8_t *pk, uint8_t *sk);
-extern int libjade_kyber768_amd64_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
-extern int libjade_kyber768_amd64_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
+extern int libjade_kyber768_ref_keypair(uint8_t *pk, uint8_t *sk);
+extern int libjade_kyber768_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
+extern int libjade_kyber768_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
 
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
-extern int libjade_kyber768_amd64_avx2_keypair(uint8_t *pk, uint8_t *sk);
-extern int libjade_kyber768_amd64_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
-extern int libjade_kyber768_amd64_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2)
+extern int libjade_kyber768_avx2_keypair(uint8_t *pk, uint8_t *sk);
+extern int libjade_kyber768_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
+extern int libjade_kyber768_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
 #endif
 
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768__avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) libjade_kyber768_amd64_avx2_keypair(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_avx2_keypair(public_key, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber768_amd64_ref_keypair(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
@@ -78,11 +78,11 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secre
 		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_keypair(public_key, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber768_amd64_ref_keypair(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-	return (OQS_STATUS) libjade_kyber768_amd64_ref_keypair(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber768_ref_keypair(public_key, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
@@ -113,14 +113,14 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secre
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
 #if OQS_LIBJADE_BUILD
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768__avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) libjade_kyber768_amd64_avx2_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_avx2_enc(public_key, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber768_amd64_ref_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_ref_enc(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
@@ -130,11 +130,11 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared
 		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_enc(public_key, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber768_amd64_ref_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_ref_enc(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-	return (OQS_STATUS) libjade_kyber768_amd64_ref_enc(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber768_ref_enc(public_key, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
@@ -165,14 +165,14 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_amd64_avx2)
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768__avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) libjade_kyber768_amd64_avx2_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_avx2_dec(public_key, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber768_amd64_ref_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_ref_dec(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
@@ -182,11 +182,11 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_decaps(uint8_t *shared_secret, const uint8_
 		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_dec(public_key, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber768_amd64_ref_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_ref_dec(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-	return (OQS_STATUS) libjade_kyber768_amd64_ref_dec(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber768_ref_dec(public_key, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)

From ff7898542cb486ba41347e4a1c3c5572c2b39580 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 9 Apr 2024 19:44:33 +0200
Subject: [PATCH 47/82] Update alg docs and CBOM

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 docs/algorithms/kem/kyber.md  |  4 ++--
 docs/algorithms/kem/kyber.yml | 12 ++++++++++--
 docs/cbom.json                | 26 +++++++++++++-------------
 3 files changed, 25 insertions(+), 17 deletions(-)

diff --git a/docs/algorithms/kem/kyber.md b/docs/algorithms/kem/kyber.md
index d36e5f53be..ef38e3a49c 100644
--- a/docs/algorithms/kem/kyber.md
+++ b/docs/algorithms/kem/kyber.md
@@ -30,7 +30,7 @@
 |     [Primary Source](#primary-source)     | ref                      | All                         | All                             | None                    | True                               | True                                           | False                 |
 |     [Primary Source](#primary-source)     | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                 |
 | [oldpqclean-aarch64](#oldpqclean-aarch64) | aarch64                  | ARM64\_V8                   | Linux,Darwin                    | None                    | True                               | False                                          | False                 |
-|     [Primary Source](#primary-source)     | ref                      | All                         | All                             | None                    | True                               | True                                           | False                 |
+|            [libjade](#libjade)            | ref                      | x86\_64                     | Linux,Darwin                    | None                    | True                               | True                                           | False                 |
 |            [libjade](#libjade)            | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                 |
 
 Are implementations chosen based on runtime CPU feature detection? **Yes**.
@@ -44,7 +44,7 @@ Are implementations chosen based on runtime CPU feature detection? **Yes**.
 |     [Primary Source](#primary-source)     | ref                      | All                         | All                             | None                    | True                               | True                                           | False                |
 |     [Primary Source](#primary-source)     | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                |
 | [oldpqclean-aarch64](#oldpqclean-aarch64) | aarch64                  | ARM64\_V8                   | Linux,Darwin                    | None                    | True                               | False                                          | False                |
-|     [Primary Source](#primary-source)     | ref                      | All                         | All                             | None                    | True                               | True                                           | False                |
+|            [libjade](#libjade)            | ref                      | x86\_64                     | Linux,Darwin                    | None                    | True                               | True                                           | False                |
 |            [libjade](#libjade)            | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                |
 
 Are implementations chosen based on runtime CPU feature detection? **Yes**.
diff --git a/docs/algorithms/kem/kyber.yml b/docs/algorithms/kem/kyber.yml
index 9858055f6d..29a4aedd6c 100644
--- a/docs/algorithms/kem/kyber.yml
+++ b/docs/algorithms/kem/kyber.yml
@@ -79,7 +79,11 @@ parameter-sets:
     large-stack-usage: false
   - upstream: libjade
     upstream-id: ref
-    supported-platforms: all
+    supported-platforms:
+    - architecture: x86_64
+      operating_systems:
+      - Linux
+      - Darwin
     no-secret-dependent-branching-claimed: true
     no-secret-dependent-branching-checked-by-valgrind: true
     large-stack-usage: false
@@ -144,7 +148,11 @@ parameter-sets:
     large-stack-usage: false
   - upstream: libjade
     upstream-id: ref
-    supported-platforms: all
+    supported-platforms:
+    - architecture: x86_64
+      operating_systems:
+      - Linux
+      - Darwin
     no-secret-dependent-branching-claimed: true
     no-secret-dependent-branching-checked-by-valgrind: true
     large-stack-usage: false
diff --git a/docs/cbom.json b/docs/cbom.json
index 9c2bc3e9d8..91053f41d8 100644
--- a/docs/cbom.json
+++ b/docs/cbom.json
@@ -1,23 +1,23 @@
 {
   "bomFormat": "CBOM",
   "specVersion": "1.4-cbom-1.0",
-  "serialNumber": "urn:uuid:50fe9dad-cdcb-4309-8c2e-67b5953686c5",
+  "serialNumber": "urn:uuid:42e1aede-649a-4dec-b7d4-e78f71a822c8",
   "version": 1,
   "metadata": {
-    "timestamp": "2024-04-09T17:32:27.545689",
+    "timestamp": "2024-04-09T19:42:40.158663",
     "component": {
       "type": "library",
-      "bom-ref": "pkg:github/open-quantum-safe/liboqs@a4d556f71691c00d045bcdac50a2d60bbba2db19",
+      "bom-ref": "pkg:github/open-quantum-safe/liboqs@b7ef00469b3e7d26aafb7390fd73e3b15674ae22",
       "name": "liboqs",
-      "version": "a4d556f71691c00d045bcdac50a2d60bbba2db19"
+      "version": "b7ef00469b3e7d26aafb7390fd73e3b15674ae22"
     }
   },
   "components": [
     {
       "type": "library",
-      "bom-ref": "pkg:github/open-quantum-safe/liboqs@a4d556f71691c00d045bcdac50a2d60bbba2db19",
+      "bom-ref": "pkg:github/open-quantum-safe/liboqs@b7ef00469b3e7d26aafb7390fd73e3b15674ae22",
       "name": "liboqs",
-      "version": "a4d556f71691c00d045bcdac50a2d60bbba2db19"
+      "version": "b7ef00469b3e7d26aafb7390fd73e3b15674ae22"
     },
     {
       "type": "crypto-asset",
@@ -841,7 +841,7 @@
     },
     {
       "type": "crypto-asset",
-      "bom-ref": "alg:Kyber512:generic",
+      "bom-ref": "alg:Kyber512:x86_64",
       "name": "Kyber",
       "cryptoProperties": {
         "assetType": "algorithm",
@@ -854,7 +854,7 @@
             "encapsulate",
             "decapsulate"
           ],
-          "implementationPlatform": "generic"
+          "implementationPlatform": "x86_64"
         },
         "nistQuantumSecurityLevel": 1
       }
@@ -941,7 +941,7 @@
     },
     {
       "type": "crypto-asset",
-      "bom-ref": "alg:Kyber768:generic",
+      "bom-ref": "alg:Kyber768:x86_64",
       "name": "Kyber",
       "cryptoProperties": {
         "assetType": "algorithm",
@@ -954,7 +954,7 @@
             "encapsulate",
             "decapsulate"
           ],
-          "implementationPlatform": "generic"
+          "implementationPlatform": "x86_64"
         },
         "nistQuantumSecurityLevel": 3
       }
@@ -2248,7 +2248,7 @@
   ],
   "dependencies": [
     {
-      "ref": "pkg:github/open-quantum-safe/liboqs@a4d556f71691c00d045bcdac50a2d60bbba2db19",
+      "ref": "pkg:github/open-quantum-safe/liboqs@b7ef00469b3e7d26aafb7390fd73e3b15674ae22",
       "dependsOn": [
         "alg:BIKE-L1:x86_64",
         "alg:BIKE-L3:x86_64",
@@ -2291,12 +2291,12 @@
         "alg:Kyber512:generic",
         "alg:Kyber512:x86_64",
         "alg:Kyber512:armv8-a",
-        "alg:Kyber512:generic",
+        "alg:Kyber512:x86_64",
         "alg:Kyber512:x86_64",
         "alg:Kyber768:generic",
         "alg:Kyber768:x86_64",
         "alg:Kyber768:armv8-a",
-        "alg:Kyber768:generic",
+        "alg:Kyber768:x86_64",
         "alg:Kyber768:x86_64",
         "alg:Kyber1024:generic",
         "alg:Kyber1024:x86_64",

From e7410272f9362c85e01634f797ab1def98091152 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 9 Apr 2024 20:14:13 +0200
Subject: [PATCH 48/82] Correct alg doc generation

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../update_upstream_alg_docs.py               | 89 +++++++++----------
 1 file changed, 44 insertions(+), 45 deletions(-)

diff --git a/scripts/copy_from_upstream/update_upstream_alg_docs.py b/scripts/copy_from_upstream/update_upstream_alg_docs.py
index ce98cfe5d6..92121fe8f4 100755
--- a/scripts/copy_from_upstream/update_upstream_alg_docs.py
+++ b/scripts/copy_from_upstream/update_upstream_alg_docs.py
@@ -171,45 +171,46 @@ def update_upstream_kem_alg_docs(liboqs_root, kems, upstream_info, write_changes
 
                 _upstream_yaml = upstream_yaml
                 for impl_index, impl in enumerate(oqs_scheme_yaml['implementations']):
-                    upstream_yaml = _upstream_yaml
-                    if impl['upstream'] in ouis:
-                        upstream_name = impl['upstream']
-                        meta_yaml_path_template = ouis[upstream_name]['kem_meta_path']
-                        opt_upstream_root = ouis[upstream_name]['upstream_root']
-                        upstream_meta_path = os.path.join(opt_upstream_root, meta_yaml_path_template.format_map(scheme))
-                        upstream_yaml = load_yaml(upstream_meta_path)
-
-                    for upstream_impl in upstream_yaml['implementations']:
-                        if impl['upstream-id'] == upstream_impl['name']:
-                            break
-                    # Logic to add Common_META.yml components
-
-                    implementations = upstream_yaml['implementations']
-                    uir = get_upstream_info(implementations, impl['upstream-id'])
-                    if (uir != None) and ('common_dep' in uir):
-                        upstream_common_path = upstream_meta_path.replace(scheme['pretty_name_full'], "Common")
-                        upstream_common_yaml = load_yaml(upstream_common_path)
-                        for c in uir['common_dep'].split(' '):
-                            ur = get_upstream_info(upstream_common_yaml['commons'], c)
-                            if (ur != None) and ('supported_platforms' in ur):
-                                if 'required_flags' in ur['supported_platforms'][0] and not ur['supported_platforms'][0]['required_flags']:
-                                    del ur['supported_platforms'][0]['required_flags']
-                                if 'required_flags' in ur['supported_platforms'][0].keys():
-                                    upstream_impl['supported_platforms'][0]['required_flags']=list(set(upstream_impl['supported_platforms'][0]['required_flags']+ur['supported_platforms'][0]['required_flags']))
-                                    upstream_impl['supported_platforms'][0]['required_flags'].sort()
-                    if 'supported_platforms' in upstream_impl:
-                        for i in range(len(upstream_impl['supported_platforms'])):
-                            if upstream_impl['supported_platforms'][i]['architecture'] == 'arm_8':
-                                upstream_impl['supported_platforms'][i]['architecture'] = 'ARM64_V8'
-                                if 'asimd' in upstream_impl['supported_platforms'][i]['required_flags']:
-                                    upstream_impl['supported_platforms'][i]['required_flags'].remove('asimd')
-                            if not upstream_impl['supported_platforms'][i]['required_flags']:
-                                del upstream_impl['supported_platforms'][i]['required_flags']
+                    if impl['upstream'] != 'libjade':
+                        upstream_yaml = _upstream_yaml
+                        if impl['upstream'] in ouis:
+                            upstream_name = impl['upstream']
+                            meta_yaml_path_template = ouis[upstream_name]['kem_meta_path']
+                            opt_upstream_root = ouis[upstream_name]['upstream_root']
+                            upstream_meta_path = os.path.join(opt_upstream_root, meta_yaml_path_template.format_map(scheme))
+                            upstream_yaml = load_yaml(upstream_meta_path)
+
+                        for upstream_impl in upstream_yaml['implementations']:
+                            if impl['upstream-id'] == upstream_impl['name']:
+                                break
+                        # Logic to add Common_META.yml components
+
+                        implementations = upstream_yaml['implementations']
+                        uir = get_upstream_info(implementations, impl['upstream-id'])
+                        if (uir != None) and ('common_dep' in uir):
+                            upstream_common_path = upstream_meta_path.replace(scheme['pretty_name_full'], "Common")
+                            upstream_common_yaml = load_yaml(upstream_common_path)
+                            for c in uir['common_dep'].split(' '):
+                                ur = get_upstream_info(upstream_common_yaml['commons'], c)
+                                if (ur != None) and ('supported_platforms' in ur):
+                                    if 'required_flags' in ur['supported_platforms'][0] and not ur['supported_platforms'][0]['required_flags']:
+                                        del ur['supported_platforms'][0]['required_flags']
+                                    if 'required_flags' in ur['supported_platforms'][0].keys():
+                                        upstream_impl['supported_platforms'][0]['required_flags']=list(set(upstream_impl['supported_platforms'][0]['required_flags']+ur['supported_platforms'][0]['required_flags']))
+                                        upstream_impl['supported_platforms'][0]['required_flags'].sort()
+                        if 'supported_platforms' in upstream_impl:
+                            for i in range(len(upstream_impl['supported_platforms'])):
+                                if upstream_impl['supported_platforms'][i]['architecture'] == 'arm_8':
+                                    upstream_impl['supported_platforms'][i]['architecture'] = 'ARM64_V8'
+                                    if 'asimd' in upstream_impl['supported_platforms'][i]['required_flags']:
+                                        upstream_impl['supported_platforms'][i]['required_flags'].remove('asimd')
+                                if not upstream_impl['supported_platforms'][i]['required_flags']:
+                                    del upstream_impl['supported_platforms'][i]['required_flags']
 
-                        impl['supported-platforms'] = rhs_if_not_equal(impl['supported-platforms'], upstream_impl['supported_platforms'], "supported-platforms")
-                    else:
-                        impl['supported-platforms'] = rhs_if_not_equal(impl['supported-platforms'], "all", "supported-platforms")
-                    oqs_scheme_yaml['implementations'][impl_index] = impl
+                            impl['supported-platforms'] = rhs_if_not_equal(impl['supported-platforms'], upstream_impl['supported_platforms'], "supported-platforms")
+                        else:
+                            impl['supported-platforms'] = rhs_if_not_equal(impl['supported-platforms'], "all", "supported-platforms")
+                        oqs_scheme_yaml['implementations'][impl_index] = impl
 
                 oqs_yaml['parameter-sets'][index] = oqs_scheme_yaml
 
@@ -277,14 +278,12 @@ def update_libjade_kem_alg_docs(liboqs_root, kems, upstream_info, write_changes=
                     for upstream_impl in upstream_yaml['implementations']:
                         if impl['upstream-id'] == upstream_impl['name']:
                             break
-                        if 'supported_platforms' in upstream_impl:
-                            for i in range(len(upstream_impl['supported_platforms'])):
-                                if not upstream_impl['supported_platforms'][i]['required_flags']:
-                                    del upstream_impl['supported_platforms'][i]['required_flags']
-
+                    if 'supported_platforms' in upstream_impl:
                         impl['supported-platforms'] = rhs_if_not_equal(impl['supported-platforms'], upstream_impl['supported_platforms'], "supported-platforms")
-                    else:
-                        impl['supported-platforms'] = rhs_if_not_equal(impl['supported-platforms'], "all", "supported-platforms")
+                        for i in range(len(impl['supported-platforms'])):
+                            if not impl['supported-platforms'][i]['required_flags']:
+                                del impl['supported-platforms'][i]['required_flags']
+
                     oqs_scheme_yaml['implementations'][impl_index] = impl
 
                 oqs_yaml['parameter-sets'][index] = oqs_scheme_yaml

From 32de1d2cd4d1d9386e21ddc084c7a1c238d48467 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 9 Apr 2024 21:47:52 +0200
Subject: [PATCH 49/82] Generate CBOM with unique bom-ref

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 docs/cbom.json         | 30 +++++++++++++++---------------
 scripts/update_cbom.py |  8 +++++++-
 2 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/docs/cbom.json b/docs/cbom.json
index 91053f41d8..f79a804620 100644
--- a/docs/cbom.json
+++ b/docs/cbom.json
@@ -1,23 +1,23 @@
 {
   "bomFormat": "CBOM",
   "specVersion": "1.4-cbom-1.0",
-  "serialNumber": "urn:uuid:42e1aede-649a-4dec-b7d4-e78f71a822c8",
+  "serialNumber": "urn:uuid:58a975ac-ea6b-4ce9-a5ae-80d35105db30",
   "version": 1,
   "metadata": {
-    "timestamp": "2024-04-09T19:42:40.158663",
+    "timestamp": "2024-04-09T21:46:17.101849",
     "component": {
       "type": "library",
-      "bom-ref": "pkg:github/open-quantum-safe/liboqs@b7ef00469b3e7d26aafb7390fd73e3b15674ae22",
+      "bom-ref": "pkg:github/open-quantum-safe/liboqs@2fd65d9ec99a2608149713e5fcaeb9b6402e5872",
       "name": "liboqs",
-      "version": "b7ef00469b3e7d26aafb7390fd73e3b15674ae22"
+      "version": "2fd65d9ec99a2608149713e5fcaeb9b6402e5872"
     }
   },
   "components": [
     {
       "type": "library",
-      "bom-ref": "pkg:github/open-quantum-safe/liboqs@b7ef00469b3e7d26aafb7390fd73e3b15674ae22",
+      "bom-ref": "pkg:github/open-quantum-safe/liboqs@2fd65d9ec99a2608149713e5fcaeb9b6402e5872",
       "name": "liboqs",
-      "version": "b7ef00469b3e7d26aafb7390fd73e3b15674ae22"
+      "version": "2fd65d9ec99a2608149713e5fcaeb9b6402e5872"
     },
     {
       "type": "crypto-asset",
@@ -841,7 +841,7 @@
     },
     {
       "type": "crypto-asset",
-      "bom-ref": "alg:Kyber512:x86_64",
+      "bom-ref": "alg:Kyber512:jasmin:x86_64",
       "name": "Kyber",
       "cryptoProperties": {
         "assetType": "algorithm",
@@ -861,7 +861,7 @@
     },
     {
       "type": "crypto-asset",
-      "bom-ref": "alg:Kyber512:x86_64",
+      "bom-ref": "alg:Kyber512:jasmin:avx2:x86_64",
       "name": "Kyber",
       "cryptoProperties": {
         "assetType": "algorithm",
@@ -941,7 +941,7 @@
     },
     {
       "type": "crypto-asset",
-      "bom-ref": "alg:Kyber768:x86_64",
+      "bom-ref": "alg:Kyber768:jasmin:x86_64",
       "name": "Kyber",
       "cryptoProperties": {
         "assetType": "algorithm",
@@ -961,7 +961,7 @@
     },
     {
       "type": "crypto-asset",
-      "bom-ref": "alg:Kyber768:x86_64",
+      "bom-ref": "alg:Kyber768:jasmin:avx2:x86_64",
       "name": "Kyber",
       "cryptoProperties": {
         "assetType": "algorithm",
@@ -2248,7 +2248,7 @@
   ],
   "dependencies": [
     {
-      "ref": "pkg:github/open-quantum-safe/liboqs@b7ef00469b3e7d26aafb7390fd73e3b15674ae22",
+      "ref": "pkg:github/open-quantum-safe/liboqs@2fd65d9ec99a2608149713e5fcaeb9b6402e5872",
       "dependsOn": [
         "alg:BIKE-L1:x86_64",
         "alg:BIKE-L3:x86_64",
@@ -2291,13 +2291,13 @@
         "alg:Kyber512:generic",
         "alg:Kyber512:x86_64",
         "alg:Kyber512:armv8-a",
-        "alg:Kyber512:x86_64",
-        "alg:Kyber512:x86_64",
+        "alg:Kyber512:jasmin:x86_64",
+        "alg:Kyber512:jasmin:avx2:x86_64",
         "alg:Kyber768:generic",
         "alg:Kyber768:x86_64",
         "alg:Kyber768:armv8-a",
-        "alg:Kyber768:x86_64",
-        "alg:Kyber768:x86_64",
+        "alg:Kyber768:jasmin:x86_64",
+        "alg:Kyber768:jasmin:avx2:x86_64",
         "alg:Kyber1024:generic",
         "alg:Kyber1024:x86_64",
         "alg:Kyber1024:armv8-a",
diff --git a/scripts/update_cbom.py b/scripts/update_cbom.py
index e3375d7f93..c4fd197aea 100644
--- a/scripts/update_cbom.py
+++ b/scripts/update_cbom.py
@@ -118,7 +118,13 @@ def add_cbom_component(out, kem_yaml, parameter_set):
                 if plat['architecture'] in dic.keys():
                     algorithmProperties['implementationPlatform'] = dic[plat['architecture']]
                     component_cpy = copy.deepcopy(component)
-                    component_cpy['bom-ref'] += ":" + algorithmProperties['implementationPlatform'] 
+                    if 'upstream' in impl and impl['upstream'] == 'libjade':
+                        tag = ":jasmin:"
+                        if any('required_flags' in i for i in impl['supported-platforms']):
+                            tag += impl['upstream-id'] + ':'
+                        component_cpy['bom-ref'] += tag + algorithmProperties['implementationPlatform'] 
+                    else:
+                        component_cpy['bom-ref'] += ":" + algorithmProperties['implementationPlatform'] 
                     cbom_components.append(component_cpy)
                     bom_algs_bomrefs.append(component_cpy['bom-ref'])
                     if dep:

From 4213a660bf471df4187a1aa258768cf4c533c331 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 10 Apr 2024 17:58:46 +0200
Subject: [PATCH 50/82] Cleanup unix.yml

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/unix.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/unix.yml b/.github/workflows/unix.yml
index 0f52aa3afb..3d073f99b3 100644
--- a/.github/workflows/unix.yml
+++ b/.github/workflows/unix.yml
@@ -20,15 +20,15 @@ jobs:
 
   upstreamcheck:
     name: Check upstream code is properly integrated
-    container: praveksharma/ci-ubuntu-focal-x86_64:latest
+    container: openquantumsafe/ci-ubuntu-focal-x86_64:latest
     runs-on: ubuntu-latest
     steps:
       - name: Setup nix
         uses: cachix/install-nix-action@v26
-      - run: nix-channel --add https://nixos.org/channels/nixos-23.11 nixpkgs
-      - run: nix-channel --update
       - name: Setup jasmin-compiler
-        run: nix-env -iA nixpkgs.jasmin-compiler
+        run: |
+          nix-channel --add https://nixos.org/channels/nixos-23.11 nixpkgs && \
+          nix-channel --update && nix-env -iA nixpkgs.jasmin-compiler
       - name: Checkout code
         uses: actions/checkout@v4
       - name: Verify copy_from_upstream state after "copy"

From 2819622b2dea2ed9e0025d0348229b6c90730987 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Fri, 19 Apr 2024 21:18:26 +0200
Subject: [PATCH 51/82] fix patches to include api.c; fix kem templates

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../patches/libjade-kyber-api.patch           | 108 ++++++++++++++++++
 .../src/kem/family/CMakeLists.txt.libjade     |  24 ++--
 .../src/kem/family/kem_scheme.c               |  28 ++---
 .../add_alg_enable_defines.libjade            |   2 +
 src/kem/kyber/CMakeLists.txt                  |  36 +++---
 src/kem/kyber/kem_kyber_512.c                 |  32 +++---
 src/kem/kyber/kem_kyber_768.c                 |  32 +++---
 src/kem/kyber/libjade_kyber512_avx2/api.c     |  20 ++++
 src/kem/kyber/libjade_kyber512_ref/api.c      |  20 ++++
 src/kem/kyber/libjade_kyber768_avx2/api.c     |  20 ++++
 src/kem/kyber/libjade_kyber768_ref/api.c      |  20 ++++
 src/oqsconfig.h.cmake                         |   2 +
 12 files changed, 268 insertions(+), 76 deletions(-)
 create mode 100644 src/kem/kyber/libjade_kyber512_avx2/api.c
 create mode 100644 src/kem/kyber/libjade_kyber512_ref/api.c
 create mode 100644 src/kem/kyber/libjade_kyber768_avx2/api.c
 create mode 100644 src/kem/kyber/libjade_kyber768_ref/api.c

diff --git a/scripts/copy_from_upstream/patches/libjade-kyber-api.patch b/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
index f78241f283..f2303b5a49 100644
--- a/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
+++ b/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
@@ -1,3 +1,30 @@
+diff --git a/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c b/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c
+new file mode 100644
+index 0000000..d71f2df
+--- /dev/null
++++ b/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c
+@@ -0,0 +1,20 @@
++#include <oqs/rand.h>
++#include "libjade_shims.h"
++#include "api.h"
++
++int libjade_kyber512_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
++    uint8_t keypair_coins[JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES];
++    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2);
++    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2);
++    return jade_kem_kyber_kyber512_amd64_avx2_keypair_derand(public_key, secret_key, keypair_coins);
++}
++
++int libjade_kyber512_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
++    uint8_t enc_coins[JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES];
++    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES);
++    return jade_kem_kyber_kyber512_amd64_avx2_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
++}
++
++int libjade_kyber512_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
++    return jade_kem_kyber_kyber512_amd64_avx2_dec( shared_secret, ciphertext, secret_key);
++}
+\ No newline at end of file
 diff --git a/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h b/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h
 index 5148fd5..419112e 100644
 --- a/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h
@@ -48,6 +75,33 @@ index 5148fd5..419112e 100644
 +);
 +
  #endif
+diff --git a/src/crypto_kem/kyber/kyber512/amd64/ref/api.c b/src/crypto_kem/kyber/kyber512/amd64/ref/api.c
+new file mode 100644
+index 0000000..851a282
+--- /dev/null
++++ b/src/crypto_kem/kyber/kyber512/amd64/ref/api.c
+@@ -0,0 +1,20 @@
++#include <oqs/rand.h>
++#include "libjade_shims.h"
++#include "api.h"
++
++int libjade_kyber512_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
++    uint8_t keypair_coins[JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES];
++    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2);
++    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2);
++    return jade_kem_kyber_kyber512_amd64_ref_keypair_derand(public_key, secret_key, keypair_coins);
++}
++
++int libjade_kyber512_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
++    uint8_t enc_coins[JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES];
++    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES);
++    return jade_kem_kyber_kyber512_amd64_ref_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
++}
++
++int libjade_kyber512_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
++    return jade_kem_kyber_kyber512_amd64_ref_dec(shared_secret, ciphertext, secret_key);
++}
+\ No newline at end of file
 diff --git a/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h b/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h
 index 38127cf..fcce52b 100644
 --- a/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h
@@ -99,6 +153,33 @@ index 38127cf..fcce52b 100644
 +);
 +
  #endif
+diff --git a/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c b/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c
+new file mode 100644
+index 0000000..b90330b
+--- /dev/null
++++ b/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c
+@@ -0,0 +1,20 @@
++#include <oqs/rand.h>
++#include "libjade_shims.h"
++#include "api.h"
++
++int libjade_kyber768_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
++    uint8_t keypair_coins[JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES];
++    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2);
++    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2);
++    return jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(public_key, secret_key, keypair_coins);
++}
++
++int libjade_kyber768_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
++    uint8_t enc_coins[JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES];
++    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES);
++    return jade_kem_kyber_kyber768_amd64_avx2_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
++}
++
++int libjade_kyber768_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
++    return jade_kem_kyber_kyber768_amd64_avx2_dec(shared_secret, ciphertext, secret_key);
++}
+\ No newline at end of file
 diff --git a/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h b/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h
 index d3b3500..ac36577 100644
 --- a/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h
@@ -149,6 +230,33 @@ index d3b3500..ac36577 100644
 +);
 +
  #endif
+diff --git a/src/crypto_kem/kyber/kyber768/amd64/ref/api.c b/src/crypto_kem/kyber/kyber768/amd64/ref/api.c
+new file mode 100644
+index 0000000..5d178f5
+--- /dev/null
++++ b/src/crypto_kem/kyber/kyber768/amd64/ref/api.c
+@@ -0,0 +1,20 @@
++#include <oqs/rand.h>
++#include "libjade_shims.h"
++#include "api.h"
++
++int libjade_kyber768_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
++    uint8_t keypair_coins[JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES];
++    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2);
++    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2);
++    return jade_kem_kyber_kyber768_amd64_ref_keypair_derand(public_key, secret_key, keypair_coins);
++}
++
++int libjade_kyber768_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
++    uint8_t enc_coins[JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES];
++    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES);
++    return jade_kem_kyber_kyber768_amd64_ref_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
++}
++
++int libjade_kyber768_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
++    return jade_kem_kyber_kyber768_amd64_ref_dec(shared_secret, ciphertext, secret_key);
++}
+\ No newline at end of file
 diff --git a/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h b/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h
 index e23e1bf..0c453e0 100644
 --- a/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h
diff --git a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
index 64bb4c14a2..c90b2431e3 100644
--- a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
@@ -4,14 +4,14 @@
 
 if({% for used_by in common_deps_usedby[common_dep['name']] -%}OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ used_by['scheme_c'] }}{%- if used_by['impl_name'] != default_implementation %}_{{ used_by['impl_name'] }}{% endif -%}{%- if not loop.last %} OR {% endif -%}{%- endfor -%})
     add_library(jasmin_{{ family }}_{{ common_dep['name'] }} OBJECT {% for source_file in common_dep['sources_addl']|sort -%}{{ upstream_location }}_{{ common_dep['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
-    target_include_directories({{ family }}_{{ common_dep['name'] }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ upstream_location }}_{{ common_dep['name'] }})
+    target_include_directories(jasmin_{{ family }}_{{ common_dep['name'] }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ upstream_location }}_{{ common_dep['name'] }})
         {%- if common_dep['required_flags'] %}
-    target_compile_options({{ family }}_{{ common_dep['name'] }} PRIVATE {%- for flag in common_dep['required_flags'] %}{%- if flag != 'arm_neon' %} -m{%- if flag == 'bmi1' -%} bmi {%- elif flag == 'sse4_1' -%} sse4.1 {%- elif flag == 'pclmulqdq' -%} pclmul {%- else -%}{{ flag }}{%- endif -%}{%- endif -%}{%- endfor -%})
+    target_compile_options(jasmin_{{ family }}_{{ common_dep['name'] }} PRIVATE {%- for flag in common_dep['required_flags'] %}{%- if flag != 'arm_neon' %} -m{%- if flag == 'bmi1' -%} bmi {%- elif flag == 'sse4_1' -%} sse4.1 {%- elif flag == 'pclmulqdq' -%} pclmul {%- else -%}{{ flag }}{%- endif -%}{%- endif -%}{%- endfor -%})
         {%- endif %}
         {%- if common_dep['compile_opts'] %}
-    target_compile_options({{ family }}_{{ common_dep['name'] }} PUBLIC {{ common_dep['compile_opts'] }})
+    target_compile_options(jasmin_{{ family }}_{{ common_dep['name'] }} PUBLIC {{ common_dep['compile_opts'] }})
         {%- endif %}
-    set(_{{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} $<TARGET_OBJECTS:{{ family }}_{{ common_dep['name'] }}>)
+    set(_{{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} $<TARGET_OBJECTS:jasmin_{{ family }}_{{ common_dep['name'] }}>)
 endif()
 
     {%- endfor %}
@@ -24,7 +24,7 @@ endif()
 if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- endif %})
     add_library(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} OBJECT kem_{{ family }}_{{ scheme['scheme'] }}.c {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
            {%- if impl['compile_opts'] %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PUBLIC {{ impl['compile_opts'] }})
+    target_compile_options(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PUBLIC {{ impl['compile_opts'] }})
            {%- endif -%}
 
         {%- else %}
@@ -32,29 +32,29 @@ if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}{%- if 'alias_sch
 if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}_{{ impl['name'] }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}{%- endif %})
     add_library(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} OBJECT {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
         {%- endif %}
-    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }})
-    target_include_directories({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    target_include_directories(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }})
+    target_include_directories(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
         {%- if impl['name'] != scheme['default_implementation'] and impl['required_flags'] -%}
            {%- set opts %}{% for flag in impl['required_flags'] %}{%- if flag != 'arm_neon' %} -m{%- if flag == 'bmi1' -%} bmi {% elif flag == 'sse4_1' -%} sse4.1 {% elif flag == 'pclmulqdq' -%} pclmul {% else -%}{{ flag }} {% endif %}{% endif -%}{% endfor %}{% endset %}
            {%- if opts|length > 0 %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE {{ opts }})
+    target_compile_options(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE {{ opts }})
            {%- endif -%}
         {%- endif %}
         {%- if impl['compile_opts'] %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PUBLIC {{ impl['compile_opts'] }})
+    target_compile_options(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PUBLIC {{ impl['compile_opts'] }})
         {%- endif %}
         {%- if family == 'classic_mceliece' and impl['name'] == 'avx2' %}
-    target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE -Wno-language-extension-token -O1)
+    target_compile_options(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE -Wno-language-extension-token -O1)
         {%- endif %}
         {%- if family == 'hqc' and impl['name'] == 'avx2' %}
     target_compile_options({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE -Wno-missing-braces)
         {%- endif %}
         {%- if impl['upstream']['name'].endswith('pqclean') %}
     if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
-        target_compile_definitions({{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE old_gas_syntax)
+        target_compile_definitions(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PRIVATE old_gas_syntax)
     endif()
     	{%- endif %}
-    set(_{{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} $<TARGET_OBJECTS:{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}>)
+    set(_{{ family|upper }}_OBJS ${_{{ family|upper }}_OBJS} $<TARGET_OBJECTS:jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}>)
 endif()
     {%- endfor -%}
 {%- endfor %}
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
index d7eba4da92..e82e328902 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
@@ -134,9 +134,9 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
-#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- else %}
-#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
@@ -208,9 +208,9 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
-#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- else %}
-#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
@@ -218,14 +218,14 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
         {%- if impl['name'] in scheme['libjade_implementations'] %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_{{ impl['name'] }}_enc(public_key, secret_key);
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_{{ impl['name'] }}_enc(ciphertext, shared_secret, public_key);
         {%- else %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_enc(public_key, secret_key);
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_enc(ciphertext, shared_secret, public_key);
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_enc(ciphertext, shared_secret, public_key);
 	}
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
@@ -233,7 +233,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #else
     {%- endif %}
-	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_enc(public_key, secret_key);
+	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_enc(ciphertext, shared_secret, public_key);
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif 
     {%- endif %}
@@ -282,9 +282,9 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *s
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
-#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- else %}
-#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
@@ -292,14 +292,14 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *s
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
         {%- if impl['name'] in scheme['libjade_implementations'] %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_{{ impl['name'] }}_dec(public_key, secret_key);
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_{{ impl['name'] }}_dec(shared_secret, ciphertext, secret_key);
         {%- else %}
-	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_dec(public_key, secret_key);
+	{% if 'required_flags' in impl and impl['required_flags'] %}	{% endif -%}return (OQS_STATUS) PQCLEAN_{{ scheme['pqclean_scheme_c']|upper }}_{{ impl['name']|upper }}_crypto_kem_dec(shared_secret, ciphertext, secret_key);
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_dec(shared_secret, ciphertext, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
         {%- endif -%}
@@ -307,7 +307,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *s
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #else
     {%- endif %}
-	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_dec(public_key, secret_key);
+	return (OQS_STATUS) libjade_{{ scheme['pqclean_scheme_c'] }}_ref_dec(shared_secret, ciphertext, secret_key);
     {%- if scheme['metadata']['implementations']|rejectattr('name', 'equalto', scheme['default_implementation'])|list %}
 #endif
     {%- endif %}
diff --git a/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade b/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade
index 1cb476e315..cf99b16f23 100644
--- a/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade
+++ b/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade
@@ -1,5 +1,7 @@
 {% for family in instructions['kems'] %}
 
+#cmakedefine OQS_LIBJADE_BUILD @OQS_LIBJADE_BUILD_BIN@
+
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name']|upper }} @OQS_LIBJADE_BUILD_BIN@
     {%- for scheme in family['schemes'] %}
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }} @OQS_LIBJADE_BUILD_BIN@
diff --git a/src/kem/kyber/CMakeLists.txt b/src/kem/kyber/CMakeLists.txt
index 77a70b9953..4aabeeddb4 100644
--- a/src/kem/kyber/CMakeLists.txt
+++ b/src/kem/kyber/CMakeLists.txt
@@ -92,33 +92,33 @@ endif()
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_START
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_512)
-    add_library(jasmin_kyber_512_ref OBJECT kem_kyber_512.c libjade_kyber512_ref/kem.s)
-    target_include_directories(kyber_512_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_ref)
-    target_include_directories(kyber_512_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
-    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_ref>)
+    add_library(jasmin_kyber_512_ref OBJECT kem_kyber_512.c libjade_kyber512_ref/api.c libjade_kyber512_ref/kem.s)
+    target_include_directories(jasmin_kyber_512_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_ref)
+    target_include_directories(jasmin_kyber_512_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:jasmin_kyber_512_ref>)
 endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
-    add_library(jasmin_kyber_512_avx2 OBJECT libjade_kyber512_avx2/kem.s)
-    target_include_directories(kyber_512_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_avx2)
-    target_include_directories(kyber_512_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
-    target_compile_options(kyber_512_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
-    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_512_avx2>)
+    add_library(jasmin_kyber_512_avx2 OBJECT libjade_kyber512_avx2/api.c libjade_kyber512_avx2/kem.s)
+    target_include_directories(jasmin_kyber_512_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_avx2)
+    target_include_directories(jasmin_kyber_512_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    target_compile_options(jasmin_kyber_512_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
+    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:jasmin_kyber_512_avx2>)
 endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_768)
-    add_library(jasmin_kyber_768_ref OBJECT kem_kyber_768.c libjade_kyber768_ref/kem.s)
-    target_include_directories(kyber_768_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_ref)
-    target_include_directories(kyber_768_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
-    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_ref>)
+    add_library(jasmin_kyber_768_ref OBJECT kem_kyber_768.c libjade_kyber768_ref/api.c libjade_kyber768_ref/kem.s)
+    target_include_directories(jasmin_kyber_768_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_ref)
+    target_include_directories(jasmin_kyber_768_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:jasmin_kyber_768_ref>)
 endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2)
-    add_library(jasmin_kyber_768_avx2 OBJECT libjade_kyber768_avx2/kem.s)
-    target_include_directories(kyber_768_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_avx2)
-    target_include_directories(kyber_768_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
-    target_compile_options(kyber_768_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
-    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:kyber_768_avx2>)
+    add_library(jasmin_kyber_768_avx2 OBJECT libjade_kyber768_avx2/api.c libjade_kyber768_avx2/kem.s)
+    target_include_directories(jasmin_kyber_768_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_avx2)
+    target_include_directories(jasmin_kyber_768_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
+    target_compile_options(jasmin_kyber_768_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
+    set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:jasmin_kyber_768_avx2>)
 endif()
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_END
 set(KYBER_OBJS ${_KYBER_OBJS} PARENT_SCOPE)
diff --git a/src/kem/kyber/kem_kyber_512.c b/src/kem/kyber/kem_kyber_512.c
index d25f3d8f70..589e7634c8 100644
--- a/src/kem/kyber/kem_kyber_512.c
+++ b/src/kem/kyber/kem_kyber_512.c
@@ -61,7 +61,7 @@ extern int libjade_kyber512_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512__avx2)
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
 #endif /* OQS_DIST_BUILD */
@@ -71,7 +71,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secre
 		return (OQS_STATUS) libjade_kyber512_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
+#elif defined(OQS_ENABLE_KEM_kyber_512aarch64)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
 #endif /* OQS_DIST_BUILD */
@@ -113,28 +113,28 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secre
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
 #if OQS_LIBJADE_BUILD
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512__avx2)
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) libjade_kyber512_avx2_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_avx2_enc(ciphertext, shared_secret, public_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber512_ref_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_ref_enc(ciphertext, shared_secret, public_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
+#elif defined(OQS_ENABLE_KEM_kyber_512aarch64)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_enc(public_key, secret_key);
+		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_enc(ciphertext, shared_secret, public_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber512_ref_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_ref_enc(ciphertext, shared_secret, public_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-	return (OQS_STATUS) libjade_kyber512_ref_enc(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber512_ref_enc(ciphertext, shared_secret, public_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
@@ -165,28 +165,28 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512__avx2)
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) libjade_kyber512_avx2_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_avx2_dec(shared_secret, ciphertext, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber512_ref_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_ref_dec(shared_secret, ciphertext, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
+#elif defined(OQS_ENABLE_KEM_kyber_512aarch64)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_dec(public_key, secret_key);
+		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_dec(shared_secret, ciphertext, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber512_ref_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber512_ref_dec(shared_secret, ciphertext, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-	return (OQS_STATUS) libjade_kyber512_ref_dec(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber512_ref_dec(shared_secret, ciphertext, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
diff --git a/src/kem/kyber/kem_kyber_768.c b/src/kem/kyber/kem_kyber_768.c
index f087cce5e9..5801f34a68 100644
--- a/src/kem/kyber/kem_kyber_768.c
+++ b/src/kem/kyber/kem_kyber_768.c
@@ -61,7 +61,7 @@ extern int libjade_kyber768_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768__avx2)
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
 #endif /* OQS_DIST_BUILD */
@@ -71,7 +71,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secre
 		return (OQS_STATUS) libjade_kyber768_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
+#elif defined(OQS_ENABLE_KEM_kyber_768aarch64)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
 #endif /* OQS_DIST_BUILD */
@@ -113,28 +113,28 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secre
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
 #if OQS_LIBJADE_BUILD
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768__avx2)
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) libjade_kyber768_avx2_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_avx2_enc(ciphertext, shared_secret, public_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber768_ref_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_ref_enc(ciphertext, shared_secret, public_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
+#elif defined(OQS_ENABLE_KEM_kyber_768aarch64)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_enc(public_key, secret_key);
+		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_enc(ciphertext, shared_secret, public_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber768_ref_enc(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_ref_enc(ciphertext, shared_secret, public_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-	return (OQS_STATUS) libjade_kyber768_ref_enc(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber768_ref_enc(ciphertext, shared_secret, public_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
@@ -165,28 +165,28 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
 #if OQS_LIBJADE_BUILD
-#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768__avx2)
+#if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) libjade_kyber768_avx2_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_avx2_dec(shared_secret, ciphertext, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber768_ref_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_ref_dec(shared_secret, ciphertext, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
+#elif defined(OQS_ENABLE_KEM_kyber_768aarch64)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
 #endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_dec(public_key, secret_key);
+		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_dec(shared_secret, ciphertext, secret_key);
 #if defined(OQS_DIST_BUILD)
 	} else {
-		return (OQS_STATUS) libjade_kyber768_ref_dec(public_key, secret_key);
+		return (OQS_STATUS) libjade_kyber768_ref_dec(shared_secret, ciphertext, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
 #else
-	return (OQS_STATUS) libjade_kyber768_ref_dec(public_key, secret_key);
+	return (OQS_STATUS) libjade_kyber768_ref_dec(shared_secret, ciphertext, secret_key);
 #endif
 #else /*OQS_LIBJADE_BUILD*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
diff --git a/src/kem/kyber/libjade_kyber512_avx2/api.c b/src/kem/kyber/libjade_kyber512_avx2/api.c
new file mode 100644
index 0000000000..37deb5cc35
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_avx2/api.c
@@ -0,0 +1,20 @@
+#include <oqs/rand.h>
+// #include <libjade_shims/libjade_randombytes.h>
+#include "api.h"
+
+int libjade_kyber512_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
+    uint8_t keypair_coins[JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES];
+    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2);
+    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber512_amd64_avx2_KEYPAIRCOINBYTES/2);
+    return jade_kem_kyber_kyber512_amd64_avx2_keypair_derand(public_key, secret_key, keypair_coins);
+}
+
+int libjade_kyber512_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
+    uint8_t enc_coins[JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES];
+    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber512_amd64_avx2_ENCCOINBYTES);
+    return jade_kem_kyber_kyber512_amd64_avx2_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
+}
+
+int libjade_kyber512_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
+    return jade_kem_kyber_kyber512_amd64_avx2_dec( shared_secret, ciphertext, secret_key);
+}
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber512_ref/api.c b/src/kem/kyber/libjade_kyber512_ref/api.c
new file mode 100644
index 0000000000..1bc6bc15ee
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber512_ref/api.c
@@ -0,0 +1,20 @@
+#include <oqs/rand.h>
+// #include <libjade_shims/libjade_randombytes.h>
+#include "api.h"
+
+int libjade_kyber512_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
+    uint8_t keypair_coins[JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES];
+    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2);
+    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber512_amd64_ref_KEYPAIRCOINBYTES/2);
+    return jade_kem_kyber_kyber512_amd64_ref_keypair_derand(public_key, secret_key, keypair_coins);
+}
+
+int libjade_kyber512_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
+    uint8_t enc_coins[JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES];
+    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber512_amd64_ref_ENCCOINBYTES);
+    return jade_kem_kyber_kyber512_amd64_ref_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
+}
+
+int libjade_kyber512_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
+    return jade_kem_kyber_kyber512_amd64_ref_dec(shared_secret, ciphertext, secret_key);
+}
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber768_avx2/api.c b/src/kem/kyber/libjade_kyber768_avx2/api.c
new file mode 100644
index 0000000000..20506015af
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_avx2/api.c
@@ -0,0 +1,20 @@
+#include <oqs/rand.h>
+// #include <libjade_shims/libjade_randombytes.h>
+#include "api.h"
+
+int libjade_kyber768_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
+    uint8_t keypair_coins[JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES];
+    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2);
+    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber768_amd64_avx2_KEYPAIRCOINBYTES/2);
+    return jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(public_key, secret_key, keypair_coins);
+}
+
+int libjade_kyber768_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
+    uint8_t enc_coins[JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES];
+    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber768_amd64_avx2_ENCCOINBYTES);
+    return jade_kem_kyber_kyber768_amd64_avx2_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
+}
+
+int libjade_kyber768_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
+    return jade_kem_kyber_kyber768_amd64_avx2_dec(shared_secret, ciphertext, secret_key);
+}
\ No newline at end of file
diff --git a/src/kem/kyber/libjade_kyber768_ref/api.c b/src/kem/kyber/libjade_kyber768_ref/api.c
new file mode 100644
index 0000000000..4870ef89af
--- /dev/null
+++ b/src/kem/kyber/libjade_kyber768_ref/api.c
@@ -0,0 +1,20 @@
+#include <oqs/rand.h>
+// #include <libjade_shims/libjade_randombytes.h>
+#include "api.h"
+
+int libjade_kyber768_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
+    uint8_t keypair_coins[JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES];
+    OQS_randombytes(keypair_coins, JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2);
+    OQS_randombytes((uint8_t *)(keypair_coins + (JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2)), JADE_KEM_kyber_kyber768_amd64_ref_KEYPAIRCOINBYTES/2);
+    return jade_kem_kyber_kyber768_amd64_ref_keypair_derand(public_key, secret_key, keypair_coins);
+}
+
+int libjade_kyber768_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
+    uint8_t enc_coins[JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES];
+    OQS_randombytes(enc_coins, JADE_KEM_kyber_kyber768_amd64_ref_ENCCOINBYTES);
+    return jade_kem_kyber_kyber768_amd64_ref_enc_derand(ciphertext, shared_secret, public_key, enc_coins);
+}
+
+int libjade_kyber768_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
+    return jade_kem_kyber_kyber768_amd64_ref_dec(shared_secret, ciphertext, secret_key);
+}
\ No newline at end of file
diff --git a/src/oqsconfig.h.cmake b/src/oqsconfig.h.cmake
index 141ac8f934..0ed3a2741b 100644
--- a/src/oqsconfig.h.cmake
+++ b/src/oqsconfig.h.cmake
@@ -193,6 +193,8 @@
 
 ///// OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ALG_ENABLE_DEFINES_START
 
+#cmakedefine OQS_LIBJADE_BUILD @OQS_LIBJADE_BUILD_BIN@
+
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_KYBER @OQS_LIBJADE_BUILD_BIN@
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512 @OQS_LIBJADE_BUILD_BIN@
 #cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2 @OQS_LIBJADE_BUILD_BIN@

From 7f4604753aa097e3bc0837d7f8320fa40e6bac29 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Fri, 19 Apr 2024 22:15:50 +0200
Subject: [PATCH 52/82] fix kyber patch

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../patches/libjade-kyber-api.patch           | 20 ++++++++-----------
 src/kem/kyber/libjade_kyber512_avx2/api.c     |  1 -
 src/kem/kyber/libjade_kyber512_ref/api.c      |  1 -
 src/kem/kyber/libjade_kyber768_avx2/api.c     |  1 -
 src/kem/kyber/libjade_kyber768_ref/api.c      |  1 -
 5 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/scripts/copy_from_upstream/patches/libjade-kyber-api.patch b/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
index f2303b5a49..1797a08dc1 100644
--- a/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
+++ b/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
@@ -1,11 +1,10 @@
 diff --git a/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c b/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c
 new file mode 100644
-index 0000000..d71f2df
+index 0000000..028d5ef
 --- /dev/null
 +++ b/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c
-@@ -0,0 +1,20 @@
+@@ -0,0 +1,19 @@
 +#include <oqs/rand.h>
-+#include "libjade_shims.h"
 +#include "api.h"
 +
 +int libjade_kyber512_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
@@ -77,12 +76,11 @@ index 5148fd5..419112e 100644
  #endif
 diff --git a/src/crypto_kem/kyber/kyber512/amd64/ref/api.c b/src/crypto_kem/kyber/kyber512/amd64/ref/api.c
 new file mode 100644
-index 0000000..851a282
+index 0000000..97a698d
 --- /dev/null
 +++ b/src/crypto_kem/kyber/kyber512/amd64/ref/api.c
-@@ -0,0 +1,20 @@
+@@ -0,0 +1,19 @@
 +#include <oqs/rand.h>
-+#include "libjade_shims.h"
 +#include "api.h"
 +
 +int libjade_kyber512_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
@@ -155,12 +153,11 @@ index 38127cf..fcce52b 100644
  #endif
 diff --git a/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c b/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c
 new file mode 100644
-index 0000000..b90330b
+index 0000000..130027f
 --- /dev/null
 +++ b/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c
-@@ -0,0 +1,20 @@
+@@ -0,0 +1,19 @@
 +#include <oqs/rand.h>
-+#include "libjade_shims.h"
 +#include "api.h"
 +
 +int libjade_kyber768_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
@@ -232,12 +229,11 @@ index d3b3500..ac36577 100644
  #endif
 diff --git a/src/crypto_kem/kyber/kyber768/amd64/ref/api.c b/src/crypto_kem/kyber/kyber768/amd64/ref/api.c
 new file mode 100644
-index 0000000..5d178f5
+index 0000000..c2473e8
 --- /dev/null
 +++ b/src/crypto_kem/kyber/kyber768/amd64/ref/api.c
-@@ -0,0 +1,20 @@
+@@ -0,0 +1,19 @@
 +#include <oqs/rand.h>
-+#include "libjade_shims.h"
 +#include "api.h"
 +
 +int libjade_kyber768_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
diff --git a/src/kem/kyber/libjade_kyber512_avx2/api.c b/src/kem/kyber/libjade_kyber512_avx2/api.c
index 37deb5cc35..028d5efb82 100644
--- a/src/kem/kyber/libjade_kyber512_avx2/api.c
+++ b/src/kem/kyber/libjade_kyber512_avx2/api.c
@@ -1,5 +1,4 @@
 #include <oqs/rand.h>
-// #include <libjade_shims/libjade_randombytes.h>
 #include "api.h"
 
 int libjade_kyber512_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
diff --git a/src/kem/kyber/libjade_kyber512_ref/api.c b/src/kem/kyber/libjade_kyber512_ref/api.c
index 1bc6bc15ee..97a698d3e0 100644
--- a/src/kem/kyber/libjade_kyber512_ref/api.c
+++ b/src/kem/kyber/libjade_kyber512_ref/api.c
@@ -1,5 +1,4 @@
 #include <oqs/rand.h>
-// #include <libjade_shims/libjade_randombytes.h>
 #include "api.h"
 
 int libjade_kyber512_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {
diff --git a/src/kem/kyber/libjade_kyber768_avx2/api.c b/src/kem/kyber/libjade_kyber768_avx2/api.c
index 20506015af..130027fe0f 100644
--- a/src/kem/kyber/libjade_kyber768_avx2/api.c
+++ b/src/kem/kyber/libjade_kyber768_avx2/api.c
@@ -1,5 +1,4 @@
 #include <oqs/rand.h>
-// #include <libjade_shims/libjade_randombytes.h>
 #include "api.h"
 
 int libjade_kyber768_avx2_keypair(uint8_t *public_key, uint8_t *secret_key) {
diff --git a/src/kem/kyber/libjade_kyber768_ref/api.c b/src/kem/kyber/libjade_kyber768_ref/api.c
index 4870ef89af..c2473e83ac 100644
--- a/src/kem/kyber/libjade_kyber768_ref/api.c
+++ b/src/kem/kyber/libjade_kyber768_ref/api.c
@@ -1,5 +1,4 @@
 #include <oqs/rand.h>
-// #include <libjade_shims/libjade_randombytes.h>
 #include "api.h"
 
 int libjade_kyber768_ref_keypair(uint8_t *public_key, uint8_t *secret_key) {

From ba7bedf32e5ac143ede733bcd71de91e3c9cef8c Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Fri, 19 Apr 2024 22:18:49 +0200
Subject: [PATCH 53/82] turn off weekly constant time tests for libjade
 implementations

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/weekly.yml | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/.github/workflows/weekly.yml b/.github/workflows/weekly.yml
index 917d0b3bb7..cc111878fc 100644
--- a/.github/workflows/weekly.yml
+++ b/.github/workflows/weekly.yml
@@ -23,16 +23,6 @@ jobs:
             CMAKE_ARGS: -DOQS_DIST_BUILD=OFF -DOQS_OPT_TARGET=haswell -DCMAKE_BUILD_TYPE=Debug -DOQS_ENABLE_TEST_CONSTANT_TIME=ON
             PYTEST_ARGS: --numprocesses=auto -k 'test_constant_time'
             SKIP_ALGS: 'SPHINCS\+-SHA(.)*s-simple,SPHINCS\+-SHAKE-(.)*,Classic-McEliece-[^3](.)*'
-          - name: verified_generic
-            container: openquantumsafe/ci-ubuntu-focal-x86_64:latest
-            CMAKE_ARGS: -DOQS_DIST_BUILD=OFF -DOQS_OPT_TARGET=generic -DCMAKE_BUILD_TYPE=Debug -DOQS_LIBJADE_BUILD=ON -DOQS_ENABLE_TEST_CONSTANT_TIME=ON
-            PYTEST_ARGS: --numprocesses=auto -k 'test_constant_time'
-            SKIP_ALGS: 'SPHINCS\+-SHA(.)*s-simple,SPHINCS\+-SHAKE-(.)*,Classic-McEliece-[^3](.)*'
-          - name: verified_extensions
-            container: openquantumsafe/ci-ubuntu-focal-x86_64:latest
-            CMAKE_ARGS: -DOQS_DIST_BUILD=OFF -DOQS_OPT_TARGET=haswell -DCMAKE_BUILD_TYPE=Debug -DOQS_LIBJADE_BUILD=ON -DOQS_ENABLE_TEST_CONSTANT_TIME=ON
-            PYTEST_ARGS: --numprocesses=auto -k 'test_constant_time'
-            SKIP_ALGS: 'SPHINCS\+-SHA(.)*s-simple,SPHINCS\+-SHAKE-(.)*,Classic-McEliece-[^3](.)*'
     container:
       image: ${{ matrix.container }}
     steps:

From a53ce69532c1ba9fcc9a0f0567348890ddf2384b Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Fri, 19 Apr 2024 22:37:07 +0200
Subject: [PATCH 54/82] update documentation

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 CONFIGURE.md                                     | 8 ++++++++
 scripts/copy_from_upstream/copy_from_upstream.py | 2 +-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/CONFIGURE.md b/CONFIGURE.md
index 6605c7f3c5..d3f1610799 100644
--- a/CONFIGURE.md
+++ b/CONFIGURE.md
@@ -19,6 +19,7 @@ The following options can be passed to CMake before the build file generation pr
 - [OQS_ENABLE_TEST_CONSTANT_TIME](#OQS_ENABLE_TEST_CONSTANT_TIME)
 - [OQS_STRICT_WARNINGS](#OQS_STRICT_WARNINGS)
 - [OQS_EMBEDDED_BUILD](#OQS_EMBEDDED_BUILD)
+- [OQS_LIBJADE_BUILD](#OQS_LIBJADE_BUILD)
 
 ## BUILD_SHARED_LIBS
 
@@ -175,3 +176,10 @@ At the moment, this is **only** considered for random number generation, as both
 **Attention**: When this option is enabled, you have to supply a custom callback for obtaining random numbers using the `OQS_randombytes_custom_algorithm()` API before accessing the cryptographic API. Otherwise, all key generation and signing operations will fail. 
 
 **Default**: `OFF`.
+
+## OQS_LIBJADE_BUILD
+Can be `ON` or `OFF`. When `ON` liboqs is built to use high assurance implementations of cryptographic algorithms from [Libjade](https://github.com/formosa-crypto/libjade). The cryptographic primitives in Libjade are written using [Jasmin](https://github.com/jasmin-lang/jasmin) and built using the Jasmin compiler. The Jasmin compiler is proven (in Coq) to preserve semantic correctness of a program, maintain secret-independence of control flow, and maintain secret independence of locations of memory access through compilation. Additionaly, the Jasmin compiler guarantees thread safety because Jasmin doesn't support global variables (with the caveat that the caller respects the function's contract). 
+
+At the moment, Libjade only provides Kyber512 and Kyber768 KEMs. 
+
+**Default** `OFF`.
\ No newline at end of file
diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index 5e669a517e..75b89cb094 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -66,7 +66,7 @@ def shell(command, expect=0):
         raise Exception("'{}' failed with error {}. Expected {}.".format(" ".join(command), ret, expect))
 
 # Generate template from specified scheme to replace old file in 'copy' mode
-# but preserves additions made to file made in priour runs of 'libjade' mode 
+# but preserves additions made to file made in prior runs of 'libjade' mode 
 def generator(destination_file_path, template_filename, delimiter, family, scheme_desired):
     template = file_get_contents(
         os.path.join(os.environ['LIBOQS_DIR'], 'scripts', 'copy_from_upstream', template_filename))

From 35e34b0317e4d606d59954eb0d9a42a8e51fe5fc Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Fri, 19 Apr 2024 23:27:39 +0200
Subject: [PATCH 55/82] change upstream to stable libjade release

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 docs/algorithms/kem/kyber.yml                 |   2 +-
 .../copy_from_upstream/copy_from_libjade.yml  |   4 +-
 src/kem/kyber/libjade_kyber512_avx2/kem.s     |  48 ++
 src/kem/kyber/libjade_kyber512_ref/kem.s      | 650 +++++++++---------
 src/kem/kyber/libjade_kyber768_avx2/kem.s     |  48 ++
 src/kem/kyber/libjade_kyber768_ref/kem.s      | 628 ++++++++---------
 6 files changed, 740 insertions(+), 640 deletions(-)

diff --git a/docs/algorithms/kem/kyber.yml b/docs/algorithms/kem/kyber.yml
index 29a4aedd6c..583430cfb6 100644
--- a/docs/algorithms/kem/kyber.yml
+++ b/docs/algorithms/kem/kyber.yml
@@ -28,7 +28,7 @@ optimized-upstreams:
       and MIT
 formally-verified-upstreams:
   libjade:
-    source: https://github.com/formosa-crypto/lib/commit/a6845a257a0ebbab4fd93c19423a62557c838a10
+    source: https://github.com/formosa-crypto/lib/commit/555e23342471bea8544c356bdae230baf064ed56
       with copy_from_upstream patches
     spdx-license-identifier: CC0-1.0
 parameter-sets:
diff --git a/scripts/copy_from_upstream/copy_from_libjade.yml b/scripts/copy_from_upstream/copy_from_libjade.yml
index 3912c6e273..532bc1feee 100644
--- a/scripts/copy_from_upstream/copy_from_libjade.yml
+++ b/scripts/copy_from_upstream/copy_from_libjade.yml
@@ -5,8 +5,8 @@ upstreams:
   -
     name: libjade
     git_url: https://github.com/formosa-crypto/libjade
-    git_branch: main
-    git_commit: a6845a257a0ebbab4fd93c19423a62557c838a10
+    git_branch: release/2023.05-1
+    git_commit: 555e23342471bea8544c356bdae230baf064ed56
     kem_meta_path: 'src/crypto_kem/{family}/{pqclean_scheme}/META.yml'
     kem_scheme_path: 'src/crypto_kem/{family}/{pqclean_scheme}'
     patches: ['libjade-kyber-api.patch', 'libjade-kyber-meta.patch']
diff --git a/src/kem/kyber/libjade_kyber512_avx2/kem.s b/src/kem/kyber/libjade_kyber512_avx2/kem.s
index 33a594071e..173086f8da 100644
--- a/src/kem/kyber/libjade_kyber512_avx2/kem.s
+++ b/src/kem/kyber/libjade_kyber512_avx2/kem.s
@@ -12172,29 +12172,53 @@ L_nttunpack$1:
 L_shake256_absorb4x_33$1:
 	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, (%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 32(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 64(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 96(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 128(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 160(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 192(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 224(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 256(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 288(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 320(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 352(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 384(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 416(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 448(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 480(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 512(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 544(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 576(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 608(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 640(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 672(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 704(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 736(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 768(%rax)
 	movq	(%rdx), %r11
 	xorq	%r11, (%rax)
@@ -12248,29 +12272,53 @@ L_shake256_absorb4x_33$1:
 L_shake128_absorb4x_34$1:
 	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, (%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 32(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 64(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 96(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 128(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 160(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 192(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 224(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 256(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 288(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 320(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 352(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 384(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 416(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 448(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 480(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 512(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 544(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 576(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 608(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 640(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 672(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 704(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 736(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 768(%rax)
 	movq	(%rcx), %r8
 	xorq	%r8, (%rax)
diff --git a/src/kem/kyber/libjade_kyber512_ref/kem.s b/src/kem/kyber/libjade_kyber512_ref/kem.s
index 61f6b485f9..ba95209c61 100644
--- a/src/kem/kyber/libjade_kyber512_ref/kem.s
+++ b/src/kem/kyber/libjade_kyber512_ref/kem.s
@@ -13318,10 +13318,10 @@ L_shake256_64$1:
 	xorq	%rcx, 56(%rax)
 	xorb	$31, 64(%rax)
 	xorb	$-128, 135(%rax)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_shake256_64$9:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	16(%rsp), %rcx
 	movq	8(%rsp), %rdx
 	jmp 	L_shake256_64$6
@@ -13364,10 +13364,10 @@ L_shake256_64$7:
 	addq	$-136, %rcx
 	movq	%rdx, 8(%rsp)
 	movq	%rcx, 16(%rsp)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_shake256_64$8:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	16(%rsp), %rcx
 	movq	8(%rsp), %rdx
 L_shake256_64$6:
@@ -13442,10 +13442,10 @@ L_sha3_512_64$1:
 	xorq	%rcx, 56(%rax)
 	xorb	$6, 64(%rax)
 	xorb	$-128, 71(%rax)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_sha3_512_64$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rcx
 	movq	(%rax), %rdx
 	movq	%rdx, (%rcx)
@@ -13503,10 +13503,10 @@ L_sha3_256_32$1:
 	movq	%rcx, 24(%rax)
 	xorb	$6, 32(%rax)
 	movb	$-128, 135(%rax)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_sha3_256_32$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rcx
 	movq	(%rax), %rdx
 	movq	%rdx, (%rcx)
@@ -13565,10 +13565,10 @@ L_sha3_256$10:
 	movq	%rsi, 16(%rsp)
 	movq	%rcx, 24(%rsp)
 	movq	%rdx, 32(%rsp)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_sha3_256$9:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	16(%rsp), %rsi
 	movq	24(%rsp), %rcx
 	movq	32(%rsp), %rdx
@@ -13599,10 +13599,10 @@ L_sha3_256$3:
 	xorb	%dil, (%rax,%r9)
 	addq	$-1, %rdx
 	xorb	$-128, (%rax,%rdx)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_sha3_256$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rcx
 	movq	(%rax), %rdx
 	movq	%rdx, (%rcx)
@@ -13615,10 +13615,10 @@ L_sha3_256$2:
 	ret
 L_shake128_squeezeblock$1:
 	movq	%rcx, 8(%rsp)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_shake128_squeezeblock$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rcx
 	movb	(%rax), %dl
 	movb	%dl, (%rcx)
@@ -14150,10 +14150,10 @@ L_sha3_512_32$1:
 	xorb	%cl, 31(%rax)
 	xorb	$6, 32(%rax)
 	xorb	$-128, 71(%rax)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_sha3_512_32$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rcx
 	movb	(%rax), %dl
 	movb	%dl, (%rcx)
@@ -14381,10 +14381,10 @@ L_shake256_192_33$1:
 	xorb	%cl, 32(%rax)
 	xorb	$31, 33(%rax)
 	xorb	$-128, 135(%rax)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_shake256_192_33$3:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rcx
 	movb	(%rax), %dl
 	movb	%dl, (%rcx)
@@ -14659,10 +14659,10 @@ L_shake256_192_33$3:
 	movb	135(%rax), %dl
 	movb	%dl, 135(%rcx)
 	movq	%rcx, 8(%rsp)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_shake256_192_33$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rcx
 	movb	(%rax), %dl
 	movb	%dl, 136(%rcx)
@@ -14874,10 +14874,10 @@ L_shake256_128_33$1:
 	xorb	%cl, 32(%rax)
 	xorb	$31, 33(%rax)
 	xorb	$-128, 135(%rax)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_shake256_128_33$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rcx
 	movb	(%rax), %dl
 	movb	%dl, (%rcx)
@@ -15139,71 +15139,72 @@ L_shake256_128_33$2:
 L_keccakf1600_ref1$1:
 	leaq	glob_data + 0(%rip), %rcx
 	movq	%rcx, 8(%rsp)
-	leaq	24(%rsp), %rcx
-	movq	$0, %rdx
+	leaq	32(%rsp), %rcx
+	movq	$0, %r10
 	jmp 	L_keccakf1600_ref1$2
 L_keccakf1600_ref1$3:
-	movq	8(%rsp), %rsi
-	movq	(%rsi,%rdx,8), %rsi
-	movq	%rsi, 16(%rsp)
-	movq	(%rax), %r10
-	movq	8(%rax), %r9
+	movq	%r10, 16(%rsp)
+	movq	8(%rsp), %rdx
+	movq	(%rdx,%r10,8), %rdx
+	movq	%rdx, 24(%rsp)
+	movq	(%rax), %r9
+	movq	8(%rax), %r8
 	movq	16(%rax), %r11
 	movq	24(%rax), %rbx
 	movq	32(%rax), %rbp
-	xorq	40(%rax), %r10
-	xorq	48(%rax), %r9
+	xorq	40(%rax), %r9
+	xorq	48(%rax), %r8
 	xorq	56(%rax), %r11
 	xorq	64(%rax), %rbx
 	xorq	72(%rax), %rbp
-	xorq	80(%rax), %r10
-	xorq	88(%rax), %r9
+	xorq	80(%rax), %r9
+	xorq	88(%rax), %r8
 	xorq	96(%rax), %r11
 	xorq	104(%rax), %rbx
 	xorq	112(%rax), %rbp
-	xorq	120(%rax), %r10
-	xorq	128(%rax), %r9
+	xorq	120(%rax), %r9
+	xorq	128(%rax), %r8
 	xorq	136(%rax), %r11
 	xorq	144(%rax), %rbx
 	xorq	152(%rax), %rbp
-	xorq	160(%rax), %r10
-	xorq	168(%rax), %r9
+	xorq	160(%rax), %r9
+	xorq	168(%rax), %r8
 	xorq	176(%rax), %r11
 	xorq	184(%rax), %rbx
 	xorq	192(%rax), %rbp
-	movq	%r9, %rsi
+	movq	%r8, %rdx
+	rolq	$1, %rdx
+	xorq	%rbp, %rdx
+	movq	%r11, %rsi
 	rolq	$1, %rsi
-	xorq	%rbp, %rsi
-	movq	%r11, %rdi
+	xorq	%r9, %rsi
+	movq	%rbx, %rdi
 	rolq	$1, %rdi
-	xorq	%r10, %rdi
-	movq	%rbx, %r8
+	xorq	%r8, %rdi
+	movq	%rbp, %r8
 	rolq	$1, %r8
-	xorq	%r9, %r8
-	movq	%rbp, %r9
+	xorq	%r11, %r8
 	rolq	$1, %r9
-	xorq	%r11, %r9
-	rolq	$1, %r10
-	xorq	%rbx, %r10
+	xorq	%rbx, %r9
 	movq	(%rax), %r11
-	xorq	%rsi, %r11
+	xorq	%rdx, %r11
 	movq	48(%rax), %rbx
-	xorq	%rdi, %rbx
+	xorq	%rsi, %rbx
 	rolq	$44, %rbx
 	movq	96(%rax), %rbp
-	xorq	%r8, %rbp
+	xorq	%rdi, %rbp
 	rolq	$43, %rbp
 	movq	144(%rax), %r12
-	xorq	%r9, %r12
+	xorq	%r8, %r12
 	rolq	$21, %r12
 	movq	192(%rax), %r13
-	xorq	%r10, %r13
+	xorq	%r9, %r13
 	rolq	$14, %r13
 	movq	%rbx, %r14
 	notq	%r14
 	andq	%rbp, %r14
 	xorq	%r11, %r14
-	xorq	16(%rsp), %r14
+	xorq	24(%rsp), %r14
 	movq	%r14, (%rcx)
 	movq	%rbp, %r14
 	notq	%r14
@@ -15225,19 +15226,19 @@ L_keccakf1600_ref1$3:
 	xorq	%r13, %r11
 	movq	%r11, 32(%rcx)
 	movq	24(%rax), %r11
-	xorq	%r9, %r11
+	xorq	%r8, %r11
 	rolq	$28, %r11
 	movq	72(%rax), %rbx
-	xorq	%r10, %rbx
+	xorq	%r9, %rbx
 	rolq	$20, %rbx
 	movq	80(%rax), %rbp
-	xorq	%rsi, %rbp
+	xorq	%rdx, %rbp
 	rolq	$3, %rbp
 	movq	128(%rax), %r12
-	xorq	%rdi, %r12
+	xorq	%rsi, %r12
 	rolq	$45, %r12
 	movq	176(%rax), %r13
-	xorq	%r8, %r13
+	xorq	%rdi, %r13
 	rolq	$61, %r13
 	movq	%rbx, %r14
 	notq	%r14
@@ -15264,19 +15265,19 @@ L_keccakf1600_ref1$3:
 	xorq	%r13, %r11
 	movq	%r11, 72(%rcx)
 	movq	8(%rax), %r11
-	xorq	%rdi, %r11
+	xorq	%rsi, %r11
 	rolq	$1, %r11
 	movq	56(%rax), %rbx
-	xorq	%r8, %rbx
+	xorq	%rdi, %rbx
 	rolq	$6, %rbx
 	movq	104(%rax), %rbp
-	xorq	%r9, %rbp
+	xorq	%r8, %rbp
 	rolq	$25, %rbp
 	movq	152(%rax), %r12
-	xorq	%r10, %r12
+	xorq	%r9, %r12
 	rolq	$8, %r12
 	movq	160(%rax), %r13
-	xorq	%rsi, %r13
+	xorq	%rdx, %r13
 	rolq	$18, %r13
 	movq	%rbx, %r14
 	notq	%r14
@@ -15303,19 +15304,19 @@ L_keccakf1600_ref1$3:
 	xorq	%r13, %r11
 	movq	%r11, 112(%rcx)
 	movq	32(%rax), %r11
-	xorq	%r10, %r11
+	xorq	%r9, %r11
 	rolq	$27, %r11
 	movq	40(%rax), %rbx
-	xorq	%rsi, %rbx
+	xorq	%rdx, %rbx
 	rolq	$36, %rbx
 	movq	88(%rax), %rbp
-	xorq	%rdi, %rbp
+	xorq	%rsi, %rbp
 	rolq	$10, %rbp
 	movq	136(%rax), %r12
-	xorq	%r8, %r12
+	xorq	%rdi, %r12
 	rolq	$15, %r12
 	movq	184(%rax), %r13
-	xorq	%r9, %r13
+	xorq	%r8, %r13
 	rolq	$56, %r13
 	movq	%rbx, %r14
 	notq	%r14
@@ -15342,284 +15343,285 @@ L_keccakf1600_ref1$3:
 	xorq	%r13, %r11
 	movq	%r11, 152(%rcx)
 	movq	16(%rax), %r11
-	xorq	%r8, %r11
+	xorq	%rdi, %r11
 	rolq	$62, %r11
-	movq	64(%rax), %r8
+	movq	64(%rax), %rdi
+	xorq	%r8, %rdi
+	rolq	$55, %rdi
+	movq	112(%rax), %r8
 	xorq	%r9, %r8
-	rolq	$55, %r8
-	movq	112(%rax), %r9
-	xorq	%r10, %r9
-	rolq	$39, %r9
-	movq	120(%rax), %r10
-	xorq	%rsi, %r10
-	rolq	$41, %r10
-	movq	168(%rax), %rsi
+	rolq	$39, %r8
+	movq	120(%rax), %r9
+	xorq	%rdx, %r9
+	rolq	$41, %r9
+	movq	168(%rax), %rdx
+	xorq	%rsi, %rdx
+	rolq	$2, %rdx
+	movq	%rdi, %rsi
+	notq	%rsi
+	andq	%r8, %rsi
+	xorq	%r11, %rsi
+	movq	%rsi, 160(%rcx)
+	movq	%r8, %rsi
+	notq	%rsi
+	andq	%r9, %rsi
 	xorq	%rdi, %rsi
-	rolq	$2, %rsi
-	movq	%r8, %rdi
-	notq	%rdi
-	andq	%r9, %rdi
-	xorq	%r11, %rdi
-	movq	%rdi, 160(%rcx)
-	movq	%r9, %rdi
-	notq	%rdi
-	andq	%r10, %rdi
-	xorq	%r8, %rdi
-	movq	%rdi, 168(%rcx)
-	movq	%r10, %rdi
-	notq	%rdi
-	andq	%rsi, %rdi
-	xorq	%r9, %rdi
-	movq	%rdi, 176(%rcx)
-	movq	%rsi, %rdi
-	notq	%rdi
-	andq	%r11, %rdi
-	xorq	%r10, %rdi
-	movq	%rdi, 184(%rcx)
+	movq	%rsi, 168(%rcx)
+	movq	%r9, %rsi
+	notq	%rsi
+	andq	%rdx, %rsi
+	xorq	%r8, %rsi
+	movq	%rsi, 176(%rcx)
+	movq	%rdx, %rsi
+	notq	%rsi
+	andq	%r11, %rsi
+	xorq	%r9, %rsi
+	movq	%rsi, 184(%rcx)
 	notq	%r11
-	andq	%r8, %r11
-	xorq	%rsi, %r11
+	andq	%rdi, %r11
+	xorq	%rdx, %r11
 	movq	%r11, 192(%rcx)
-	movq	8(%rsp), %rsi
-	movq	8(%rsi,%rdx,8), %rsi
-	movq	%rsi, 16(%rsp)
-	movq	(%rcx), %r10
-	movq	8(%rcx), %r9
-	movq	16(%rcx), %r11
-	movq	24(%rcx), %rbx
-	movq	32(%rcx), %rbp
-	xorq	40(%rcx), %r10
-	xorq	48(%rcx), %r9
-	xorq	56(%rcx), %r11
-	xorq	64(%rcx), %rbx
-	xorq	72(%rcx), %rbp
-	xorq	80(%rcx), %r10
-	xorq	88(%rcx), %r9
-	xorq	96(%rcx), %r11
-	xorq	104(%rcx), %rbx
-	xorq	112(%rcx), %rbp
-	xorq	120(%rcx), %r10
-	xorq	128(%rcx), %r9
-	xorq	136(%rcx), %r11
-	xorq	144(%rcx), %rbx
-	xorq	152(%rcx), %rbp
-	xorq	160(%rcx), %r10
-	xorq	168(%rcx), %r9
-	xorq	176(%rcx), %r11
-	xorq	184(%rcx), %rbx
-	xorq	192(%rcx), %rbp
-	movq	%r9, %rsi
+	movq	8(%rsp), %rdx
+	movq	8(%rdx,%r10,8), %rdx
+	movq	%rdx, 24(%rsp)
+	movq	(%rcx), %r9
+	movq	8(%rcx), %r8
+	movq	16(%rcx), %r10
+	movq	24(%rcx), %r11
+	movq	32(%rcx), %rbx
+	xorq	40(%rcx), %r9
+	xorq	48(%rcx), %r8
+	xorq	56(%rcx), %r10
+	xorq	64(%rcx), %r11
+	xorq	72(%rcx), %rbx
+	xorq	80(%rcx), %r9
+	xorq	88(%rcx), %r8
+	xorq	96(%rcx), %r10
+	xorq	104(%rcx), %r11
+	xorq	112(%rcx), %rbx
+	xorq	120(%rcx), %r9
+	xorq	128(%rcx), %r8
+	xorq	136(%rcx), %r10
+	xorq	144(%rcx), %r11
+	xorq	152(%rcx), %rbx
+	xorq	160(%rcx), %r9
+	xorq	168(%rcx), %r8
+	xorq	176(%rcx), %r10
+	xorq	184(%rcx), %r11
+	xorq	192(%rcx), %rbx
+	movq	%r8, %rdx
+	rolq	$1, %rdx
+	xorq	%rbx, %rdx
+	movq	%r10, %rsi
 	rolq	$1, %rsi
-	xorq	%rbp, %rsi
+	xorq	%r9, %rsi
 	movq	%r11, %rdi
 	rolq	$1, %rdi
-	xorq	%r10, %rdi
+	xorq	%r8, %rdi
 	movq	%rbx, %r8
 	rolq	$1, %r8
-	xorq	%r9, %r8
-	movq	%rbp, %r9
+	xorq	%r10, %r8
 	rolq	$1, %r9
 	xorq	%r11, %r9
-	rolq	$1, %r10
-	xorq	%rbx, %r10
-	movq	(%rcx), %r11
+	movq	(%rcx), %r10
+	xorq	%rdx, %r10
+	movq	48(%rcx), %r11
 	xorq	%rsi, %r11
-	movq	48(%rcx), %rbx
-	xorq	%rdi, %rbx
-	rolq	$44, %rbx
-	movq	96(%rcx), %rbp
-	xorq	%r8, %rbp
-	rolq	$43, %rbp
-	movq	144(%rcx), %r12
-	xorq	%r9, %r12
-	rolq	$21, %r12
-	movq	192(%rcx), %r13
-	xorq	%r10, %r13
-	rolq	$14, %r13
-	movq	%rbx, %r14
-	notq	%r14
-	andq	%rbp, %r14
-	xorq	%r11, %r14
-	xorq	16(%rsp), %r14
-	movq	%r14, (%rax)
-	movq	%rbp, %r14
-	notq	%r14
-	andq	%r12, %r14
-	xorq	%rbx, %r14
-	movq	%r14, 8(%rax)
-	movq	%r12, %r14
-	notq	%r14
-	andq	%r13, %r14
-	xorq	%rbp, %r14
-	movq	%r14, 16(%rax)
-	movq	%r13, %rbp
-	notq	%rbp
-	andq	%r11, %rbp
-	xorq	%r12, %rbp
-	movq	%rbp, 24(%rax)
-	notq	%r11
-	andq	%rbx, %r11
-	xorq	%r13, %r11
-	movq	%r11, 32(%rax)
-	movq	24(%rcx), %r11
-	xorq	%r9, %r11
-	rolq	$28, %r11
-	movq	72(%rcx), %rbx
-	xorq	%r10, %rbx
-	rolq	$20, %rbx
-	movq	80(%rcx), %rbp
-	xorq	%rsi, %rbp
-	rolq	$3, %rbp
-	movq	128(%rcx), %r12
+	rolq	$44, %r11
+	movq	96(%rcx), %r12
 	xorq	%rdi, %r12
-	rolq	$45, %r12
-	movq	176(%rcx), %r13
-	xorq	%r8, %r13
-	rolq	$61, %r13
-	movq	%rbx, %r14
-	notq	%r14
-	andq	%rbp, %r14
-	xorq	%r11, %r14
-	movq	%r14, 40(%rax)
-	movq	%rbp, %r14
-	notq	%r14
-	andq	%r12, %r14
-	xorq	%rbx, %r14
-	movq	%r14, 48(%rax)
-	movq	%r12, %r14
-	notq	%r14
-	andq	%r13, %r14
-	xorq	%rbp, %r14
-	movq	%r14, 56(%rax)
-	movq	%r13, %rbp
-	notq	%rbp
-	andq	%r11, %rbp
-	xorq	%r12, %rbp
-	movq	%rbp, 64(%rax)
-	notq	%r11
-	andq	%rbx, %r11
-	xorq	%r13, %r11
-	movq	%r11, 72(%rax)
-	movq	8(%rcx), %r11
-	xorq	%rdi, %r11
-	rolq	$1, %r11
-	movq	56(%rcx), %rbx
+	rolq	$43, %r12
+	movq	144(%rcx), %rbx
 	xorq	%r8, %rbx
-	rolq	$6, %rbx
-	movq	104(%rcx), %rbp
+	rolq	$21, %rbx
+	movq	192(%rcx), %rbp
 	xorq	%r9, %rbp
-	rolq	$25, %rbp
-	movq	152(%rcx), %r12
-	xorq	%r10, %r12
-	rolq	$8, %r12
-	movq	160(%rcx), %r13
-	xorq	%rsi, %r13
-	rolq	$18, %r13
-	movq	%rbx, %r14
-	notq	%r14
-	andq	%rbp, %r14
-	xorq	%r11, %r14
-	movq	%r14, 80(%rax)
-	movq	%rbp, %r14
-	notq	%r14
-	andq	%r12, %r14
-	xorq	%rbx, %r14
-	movq	%r14, 88(%rax)
-	movq	%r12, %r14
-	notq	%r14
-	andq	%r13, %r14
-	xorq	%rbp, %r14
-	movq	%r14, 96(%rax)
-	movq	%r13, %rbp
-	notq	%rbp
-	andq	%r11, %rbp
-	xorq	%r12, %rbp
-	movq	%rbp, 104(%rax)
-	notq	%r11
-	andq	%rbx, %r11
-	xorq	%r13, %r11
-	movq	%r11, 112(%rax)
-	movq	32(%rcx), %r11
-	xorq	%r10, %r11
-	rolq	$27, %r11
-	movq	40(%rcx), %rbx
+	rolq	$14, %rbp
+	movq	%r11, %r13
+	notq	%r13
+	andq	%r12, %r13
+	xorq	%r10, %r13
+	xorq	24(%rsp), %r13
+	movq	%r13, (%rax)
+	movq	%r12, %r13
+	notq	%r13
+	andq	%rbx, %r13
+	xorq	%r11, %r13
+	movq	%r13, 8(%rax)
+	movq	%rbx, %r13
+	notq	%r13
+	andq	%rbp, %r13
+	xorq	%r12, %r13
+	movq	%r13, 16(%rax)
+	movq	%rbp, %r12
+	notq	%r12
+	andq	%r10, %r12
+	xorq	%rbx, %r12
+	movq	%r12, 24(%rax)
+	notq	%r10
+	andq	%r11, %r10
+	xorq	%rbp, %r10
+	movq	%r10, 32(%rax)
+	movq	24(%rcx), %r10
+	xorq	%r8, %r10
+	rolq	$28, %r10
+	movq	72(%rcx), %r11
+	xorq	%r9, %r11
+	rolq	$20, %r11
+	movq	80(%rcx), %r12
+	xorq	%rdx, %r12
+	rolq	$3, %r12
+	movq	128(%rcx), %rbx
 	xorq	%rsi, %rbx
-	rolq	$36, %rbx
-	movq	88(%rcx), %rbp
+	rolq	$45, %rbx
+	movq	176(%rcx), %rbp
 	xorq	%rdi, %rbp
-	rolq	$10, %rbp
-	movq	136(%rcx), %r12
+	rolq	$61, %rbp
+	movq	%r11, %r13
+	notq	%r13
+	andq	%r12, %r13
+	xorq	%r10, %r13
+	movq	%r13, 40(%rax)
+	movq	%r12, %r13
+	notq	%r13
+	andq	%rbx, %r13
+	xorq	%r11, %r13
+	movq	%r13, 48(%rax)
+	movq	%rbx, %r13
+	notq	%r13
+	andq	%rbp, %r13
+	xorq	%r12, %r13
+	movq	%r13, 56(%rax)
+	movq	%rbp, %r12
+	notq	%r12
+	andq	%r10, %r12
+	xorq	%rbx, %r12
+	movq	%r12, 64(%rax)
+	notq	%r10
+	andq	%r11, %r10
+	xorq	%rbp, %r10
+	movq	%r10, 72(%rax)
+	movq	8(%rcx), %r10
+	xorq	%rsi, %r10
+	rolq	$1, %r10
+	movq	56(%rcx), %r11
+	xorq	%rdi, %r11
+	rolq	$6, %r11
+	movq	104(%rcx), %r12
 	xorq	%r8, %r12
-	rolq	$15, %r12
-	movq	184(%rcx), %r13
-	xorq	%r9, %r13
-	rolq	$56, %r13
-	movq	%rbx, %r14
-	notq	%r14
-	andq	%rbp, %r14
-	xorq	%r11, %r14
-	movq	%r14, 120(%rax)
-	movq	%rbp, %r14
-	notq	%r14
-	andq	%r12, %r14
-	xorq	%rbx, %r14
-	movq	%r14, 128(%rax)
-	movq	%r12, %r14
-	notq	%r14
-	andq	%r13, %r14
-	xorq	%rbp, %r14
-	movq	%r14, 136(%rax)
-	movq	%r13, %rbp
-	notq	%rbp
-	andq	%r11, %rbp
-	xorq	%r12, %rbp
-	movq	%rbp, 144(%rax)
-	notq	%r11
-	andq	%rbx, %r11
-	xorq	%r13, %r11
-	movq	%r11, 152(%rax)
-	movq	16(%rcx), %r11
-	xorq	%r8, %r11
-	rolq	$62, %r11
-	movq	64(%rcx), %r8
+	rolq	$25, %r12
+	movq	152(%rcx), %rbx
+	xorq	%r9, %rbx
+	rolq	$8, %rbx
+	movq	160(%rcx), %rbp
+	xorq	%rdx, %rbp
+	rolq	$18, %rbp
+	movq	%r11, %r13
+	notq	%r13
+	andq	%r12, %r13
+	xorq	%r10, %r13
+	movq	%r13, 80(%rax)
+	movq	%r12, %r13
+	notq	%r13
+	andq	%rbx, %r13
+	xorq	%r11, %r13
+	movq	%r13, 88(%rax)
+	movq	%rbx, %r13
+	notq	%r13
+	andq	%rbp, %r13
+	xorq	%r12, %r13
+	movq	%r13, 96(%rax)
+	movq	%rbp, %r12
+	notq	%r12
+	andq	%r10, %r12
+	xorq	%rbx, %r12
+	movq	%r12, 104(%rax)
+	notq	%r10
+	andq	%r11, %r10
+	xorq	%rbp, %r10
+	movq	%r10, 112(%rax)
+	movq	32(%rcx), %r10
+	xorq	%r9, %r10
+	rolq	$27, %r10
+	movq	40(%rcx), %r11
+	xorq	%rdx, %r11
+	rolq	$36, %r11
+	movq	88(%rcx), %r12
+	xorq	%rsi, %r12
+	rolq	$10, %r12
+	movq	136(%rcx), %rbx
+	xorq	%rdi, %rbx
+	rolq	$15, %rbx
+	movq	184(%rcx), %rbp
+	xorq	%r8, %rbp
+	rolq	$56, %rbp
+	movq	%r11, %r13
+	notq	%r13
+	andq	%r12, %r13
+	xorq	%r10, %r13
+	movq	%r13, 120(%rax)
+	movq	%r12, %r13
+	notq	%r13
+	andq	%rbx, %r13
+	xorq	%r11, %r13
+	movq	%r13, 128(%rax)
+	movq	%rbx, %r13
+	notq	%r13
+	andq	%rbp, %r13
+	xorq	%r12, %r13
+	movq	%r13, 136(%rax)
+	movq	%rbp, %r12
+	notq	%r12
+	andq	%r10, %r12
+	xorq	%rbx, %r12
+	movq	%r12, 144(%rax)
+	notq	%r10
+	andq	%r11, %r10
+	xorq	%rbp, %r10
+	movq	%r10, 152(%rax)
+	movq	16(%rcx), %r10
+	xorq	%rdi, %r10
+	rolq	$62, %r10
+	movq	64(%rcx), %rdi
+	xorq	%r8, %rdi
+	rolq	$55, %rdi
+	movq	112(%rcx), %r8
 	xorq	%r9, %r8
-	rolq	$55, %r8
-	movq	112(%rcx), %r9
-	xorq	%r10, %r9
-	rolq	$39, %r9
-	movq	120(%rcx), %r10
-	xorq	%rsi, %r10
-	rolq	$41, %r10
-	movq	168(%rcx), %rsi
+	rolq	$39, %r8
+	movq	120(%rcx), %r9
+	xorq	%rdx, %r9
+	rolq	$41, %r9
+	movq	168(%rcx), %rdx
+	xorq	%rsi, %rdx
+	rolq	$2, %rdx
+	movq	%rdi, %rsi
+	notq	%rsi
+	andq	%r8, %rsi
+	xorq	%r10, %rsi
+	movq	%rsi, 160(%rax)
+	movq	%r8, %rsi
+	notq	%rsi
+	andq	%r9, %rsi
 	xorq	%rdi, %rsi
-	rolq	$2, %rsi
-	movq	%r8, %rdi
-	notq	%rdi
-	andq	%r9, %rdi
-	xorq	%r11, %rdi
-	movq	%rdi, 160(%rax)
-	movq	%r9, %rdi
-	notq	%rdi
-	andq	%r10, %rdi
-	xorq	%r8, %rdi
-	movq	%rdi, 168(%rax)
-	movq	%r10, %rdi
-	notq	%rdi
-	andq	%rsi, %rdi
-	xorq	%r9, %rdi
-	movq	%rdi, 176(%rax)
-	movq	%rsi, %rdi
-	notq	%rdi
-	andq	%r11, %rdi
-	xorq	%r10, %rdi
-	movq	%rdi, 184(%rax)
-	notq	%r11
-	andq	%r8, %r11
-	xorq	%rsi, %r11
-	movq	%r11, 192(%rax)
-	addq	$2, %rdx
+	movq	%rsi, 168(%rax)
+	movq	%r9, %rsi
+	notq	%rsi
+	andq	%rdx, %rsi
+	xorq	%r8, %rsi
+	movq	%rsi, 176(%rax)
+	movq	%rdx, %rsi
+	notq	%rsi
+	andq	%r10, %rsi
+	xorq	%r9, %rsi
+	movq	%rsi, 184(%rax)
+	notq	%r10
+	andq	%rdi, %r10
+	xorq	%rdx, %r10
+	movq	%r10, 192(%rax)
+	movq	16(%rsp), %r10
+	addq	$2, %r10
 L_keccakf1600_ref1$2:
-	cmpq	$23, %rdx
+	cmpq	$23, %r10
 	jb  	L_keccakf1600_ref1$3
 	ret
 	.data
diff --git a/src/kem/kyber/libjade_kyber768_avx2/kem.s b/src/kem/kyber/libjade_kyber768_avx2/kem.s
index 3eab5d3242..29d39b0426 100644
--- a/src/kem/kyber/libjade_kyber768_avx2/kem.s
+++ b/src/kem/kyber/libjade_kyber768_avx2/kem.s
@@ -17001,29 +17001,53 @@ L_nttunpack$1:
 L_shake256_absorb4x_33$1:
 	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, (%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 32(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 64(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 96(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 128(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 160(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 192(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 224(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 256(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 288(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 320(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 352(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 384(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 416(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 448(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 480(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 512(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 544(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 576(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 608(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 640(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 672(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 704(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 736(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 768(%rax)
 	movq	(%rcx), %rbx
 	xorq	%rbx, (%rax)
@@ -17077,29 +17101,53 @@ L_shake256_absorb4x_33$1:
 L_shake128_absorb4x_34$1:
 	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, (%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 32(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 64(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 96(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 128(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 160(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 192(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 224(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 256(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 288(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 320(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 352(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 384(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 416(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 448(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 480(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 512(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 544(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 576(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 608(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 640(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 672(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 704(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 736(%rax)
+	vpxor	%ymm0, %ymm0, %ymm0
 	vmovdqu	%ymm0, 768(%rax)
 	movq	(%rcx), %r8
 	xorq	%r8, (%rax)
diff --git a/src/kem/kyber/libjade_kyber768_ref/kem.s b/src/kem/kyber/libjade_kyber768_ref/kem.s
index 8a646187c3..e898b68b8a 100644
--- a/src/kem/kyber/libjade_kyber768_ref/kem.s
+++ b/src/kem/kyber/libjade_kyber768_ref/kem.s
@@ -16406,10 +16406,10 @@ L_shake256_64$1:
 	xorq	%rax, 56(%rcx)
 	xorb	$31, 64(%rcx)
 	xorb	$-128, 135(%rcx)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_shake256_64$9:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	16(%rsp), %rax
 	movq	8(%rsp), %rdx
 	jmp 	L_shake256_64$6
@@ -16452,10 +16452,10 @@ L_shake256_64$7:
 	addq	$-136, %rax
 	movq	%rdx, 8(%rsp)
 	movq	%rax, 16(%rsp)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_shake256_64$8:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	16(%rsp), %rax
 	movq	8(%rsp), %rdx
 L_shake256_64$6:
@@ -16530,10 +16530,10 @@ L_sha3_512_64$1:
 	xorq	%rax, 56(%rcx)
 	xorb	$6, 64(%rcx)
 	xorb	$-128, 71(%rcx)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_sha3_512_64$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rax
 	movq	(%rcx), %rdx
 	movq	%rdx, (%rax)
@@ -16591,10 +16591,10 @@ L_sha3_256_32$1:
 	movq	%rax, 24(%rcx)
 	xorb	$6, 32(%rcx)
 	movb	$-128, 135(%rcx)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_sha3_256_32$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rax
 	movq	(%rcx), %rdx
 	movq	%rdx, (%rax)
@@ -16653,10 +16653,10 @@ L_sha3_256$10:
 	movq	%rsi, 16(%rsp)
 	movq	%rax, 24(%rsp)
 	movq	%rdx, 32(%rsp)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_sha3_256$9:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	16(%rsp), %rsi
 	movq	24(%rsp), %rax
 	movq	32(%rsp), %rdx
@@ -16687,10 +16687,10 @@ L_sha3_256$3:
 	xorb	%dil, (%rcx,%r9)
 	addq	$-1, %rdx
 	xorb	$-128, (%rcx,%rdx)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_sha3_256$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rax
 	movq	(%rcx), %rdx
 	movq	%rdx, (%rax)
@@ -16703,10 +16703,10 @@ L_sha3_256$2:
 	ret
 L_shake128_squeezeblock$1:
 	movq	%rdx, 8(%rsp)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_shake128_squeezeblock$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rdx
 	movb	(%rcx), %sil
 	movb	%sil, (%rdx)
@@ -17238,10 +17238,10 @@ L_sha3_512_32$1:
 	xorb	%al, 31(%rcx)
 	xorb	$6, 32(%rcx)
 	xorb	$-128, 71(%rcx)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_sha3_512_32$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rax
 	movb	(%rcx), %dl
 	movb	%dl, (%rax)
@@ -17469,10 +17469,10 @@ L_shake256_128_33$1:
 	xorb	%dl, 32(%rcx)
 	xorb	$31, 33(%rcx)
 	xorb	$-128, 135(%rcx)
-	leaq	-216(%rsp), %rsp
+	leaq	-224(%rsp), %rsp
 	call	L_keccakf1600_ref1$1
 L_shake256_128_33$2:
-	leaq	216(%rsp), %rsp
+	leaq	224(%rsp), %rsp
 	movq	8(%rsp), %rdx
 	movb	(%rcx), %sil
 	movb	%sil, (%rdx)
@@ -17734,71 +17734,72 @@ L_shake256_128_33$2:
 L_keccakf1600_ref1$1:
 	leaq	glob_data + 0(%rip), %rdx
 	movq	%rdx, 8(%rsp)
-	leaq	24(%rsp), %rdx
-	movq	$0, %rsi
+	leaq	32(%rsp), %rdx
+	movq	$0, %r11
 	jmp 	L_keccakf1600_ref1$2
 L_keccakf1600_ref1$3:
-	movq	8(%rsp), %rdi
-	movq	(%rdi,%rsi,8), %rdi
-	movq	%rdi, 16(%rsp)
-	movq	(%rcx), %r11
-	movq	8(%rcx), %r10
+	movq	%r11, 16(%rsp)
+	movq	8(%rsp), %rsi
+	movq	(%rsi,%r11,8), %rsi
+	movq	%rsi, 24(%rsp)
+	movq	(%rcx), %r10
+	movq	8(%rcx), %r9
 	movq	16(%rcx), %rbx
 	movq	24(%rcx), %rbp
 	movq	32(%rcx), %r12
-	xorq	40(%rcx), %r11
-	xorq	48(%rcx), %r10
+	xorq	40(%rcx), %r10
+	xorq	48(%rcx), %r9
 	xorq	56(%rcx), %rbx
 	xorq	64(%rcx), %rbp
 	xorq	72(%rcx), %r12
-	xorq	80(%rcx), %r11
-	xorq	88(%rcx), %r10
+	xorq	80(%rcx), %r10
+	xorq	88(%rcx), %r9
 	xorq	96(%rcx), %rbx
 	xorq	104(%rcx), %rbp
 	xorq	112(%rcx), %r12
-	xorq	120(%rcx), %r11
-	xorq	128(%rcx), %r10
+	xorq	120(%rcx), %r10
+	xorq	128(%rcx), %r9
 	xorq	136(%rcx), %rbx
 	xorq	144(%rcx), %rbp
 	xorq	152(%rcx), %r12
-	xorq	160(%rcx), %r11
-	xorq	168(%rcx), %r10
+	xorq	160(%rcx), %r10
+	xorq	168(%rcx), %r9
 	xorq	176(%rcx), %rbx
 	xorq	184(%rcx), %rbp
 	xorq	192(%rcx), %r12
-	movq	%r10, %rdi
+	movq	%r9, %rsi
+	rolq	$1, %rsi
+	xorq	%r12, %rsi
+	movq	%rbx, %rdi
 	rolq	$1, %rdi
-	xorq	%r12, %rdi
-	movq	%rbx, %r8
+	xorq	%r10, %rdi
+	movq	%rbp, %r8
 	rolq	$1, %r8
-	xorq	%r11, %r8
-	movq	%rbp, %r9
+	xorq	%r9, %r8
+	movq	%r12, %r9
 	rolq	$1, %r9
-	xorq	%r10, %r9
-	movq	%r12, %r10
+	xorq	%rbx, %r9
 	rolq	$1, %r10
-	xorq	%rbx, %r10
-	rolq	$1, %r11
-	xorq	%rbp, %r11
+	xorq	%rbp, %r10
 	movq	(%rcx), %rbx
-	xorq	%rdi, %rbx
+	xorq	%rsi, %rbx
 	movq	48(%rcx), %rbp
-	xorq	%r8, %rbp
+	xorq	%rdi, %rbp
 	rolq	$44, %rbp
 	movq	96(%rcx), %r12
-	xorq	%r9, %r12
+	xorq	%r8, %r12
 	rolq	$43, %r12
 	movq	144(%rcx), %r13
-	xorq	%r10, %r13
+	xorq	%r9, %r13
 	rolq	$21, %r13
 	movq	192(%rcx), %r14
-	xorq	%r11, %r14
+	xorq	%r10, %r14
 	rolq	$14, %r14
 	movq	%rbp, %r15
 	notq	%r15
 	andq	%r12, %r15
 	xorq	%rbx, %r15
-	xorq	16(%rsp), %r15
+	xorq	24(%rsp), %r15
 	movq	%r15, (%rdx)
 	movq	%r12, %r15
 	notq	%r15
@@ -17820,19 +17821,19 @@ L_keccakf1600_ref1$3:
 	xorq	%r14, %rbx
 	movq	%rbx, 32(%rdx)
 	movq	24(%rcx), %rbx
-	xorq	%r10, %rbx
+	xorq	%r9, %rbx
 	rolq	$28, %rbx
 	movq	72(%rcx), %rbp
-	xorq	%r11, %rbp
+	xorq	%r10, %rbp
 	rolq	$20, %rbp
 	movq	80(%rcx), %r12
-	xorq	%rdi, %r12
+	xorq	%rsi, %r12
 	rolq	$3, %r12
 	movq	128(%rcx), %r13
-	xorq	%r8, %r13
+	xorq	%rdi, %r13
 	rolq	$45, %r13
 	movq	176(%rcx), %r14
-	xorq	%r9, %r14
+	xorq	%r8, %r14
 	rolq	$61, %r14
 	movq	%rbp, %r15
 	notq	%r15
@@ -17859,19 +17860,19 @@ L_keccakf1600_ref1$3:
 	xorq	%r14, %rbx
 	movq	%rbx, 72(%rdx)
 	movq	8(%rcx), %rbx
-	xorq	%r8, %rbx
+	xorq	%rdi, %rbx
 	rolq	$1, %rbx
 	movq	56(%rcx), %rbp
-	xorq	%r9, %rbp
+	xorq	%r8, %rbp
 	rolq	$6, %rbp
 	movq	104(%rcx), %r12
-	xorq	%r10, %r12
+	xorq	%r9, %r12
 	rolq	$25, %r12
 	movq	152(%rcx), %r13
-	xorq	%r11, %r13
+	xorq	%r10, %r13
 	rolq	$8, %r13
 	movq	160(%rcx), %r14
-	xorq	%rdi, %r14
+	xorq	%rsi, %r14
 	rolq	$18, %r14
 	movq	%rbp, %r15
 	notq	%r15
@@ -17898,19 +17899,19 @@ L_keccakf1600_ref1$3:
 	xorq	%r14, %rbx
 	movq	%rbx, 112(%rdx)
 	movq	32(%rcx), %rbx
-	xorq	%r11, %rbx
+	xorq	%r10, %rbx
 	rolq	$27, %rbx
 	movq	40(%rcx), %rbp
-	xorq	%rdi, %rbp
+	xorq	%rsi, %rbp
 	rolq	$36, %rbp
 	movq	88(%rcx), %r12
-	xorq	%r8, %r12
+	xorq	%rdi, %r12
 	rolq	$10, %r12
 	movq	136(%rcx), %r13
-	xorq	%r9, %r13
+	xorq	%r8, %r13
 	rolq	$15, %r13
 	movq	184(%rcx), %r14
-	xorq	%r10, %r14
+	xorq	%r9, %r14
 	rolq	$56, %r14
 	movq	%rbp, %r15
 	notq	%r15
@@ -17937,284 +17938,285 @@ L_keccakf1600_ref1$3:
 	xorq	%r14, %rbx
 	movq	%rbx, 152(%rdx)
 	movq	16(%rcx), %rbx
-	xorq	%r9, %rbx
+	xorq	%r8, %rbx
 	rolq	$62, %rbx
-	movq	64(%rcx), %r9
+	movq	64(%rcx), %r8
+	xorq	%r9, %r8
+	rolq	$55, %r8
+	movq	112(%rcx), %r9
 	xorq	%r10, %r9
-	rolq	$55, %r9
-	movq	112(%rcx), %r10
-	xorq	%r11, %r10
-	rolq	$39, %r10
-	movq	120(%rcx), %r11
-	xorq	%rdi, %r11
-	rolq	$41, %r11
-	movq	168(%rcx), %rdi
+	rolq	$39, %r9
+	movq	120(%rcx), %r10
+	xorq	%rsi, %r10
+	rolq	$41, %r10
+	movq	168(%rcx), %rsi
+	xorq	%rdi, %rsi
+	rolq	$2, %rsi
+	movq	%r8, %rdi
+	notq	%rdi
+	andq	%r9, %rdi
+	xorq	%rbx, %rdi
+	movq	%rdi, 160(%rdx)
+	movq	%r9, %rdi
+	notq	%rdi
+	andq	%r10, %rdi
 	xorq	%r8, %rdi
-	rolq	$2, %rdi
-	movq	%r9, %r8
-	notq	%r8
-	andq	%r10, %r8
-	xorq	%rbx, %r8
-	movq	%r8, 160(%rdx)
-	movq	%r10, %r8
-	notq	%r8
-	andq	%r11, %r8
-	xorq	%r9, %r8
-	movq	%r8, 168(%rdx)
-	movq	%r11, %r8
-	notq	%r8
-	andq	%rdi, %r8
-	xorq	%r10, %r8
-	movq	%r8, 176(%rdx)
-	movq	%rdi, %r8
-	notq	%r8
-	andq	%rbx, %r8
-	xorq	%r11, %r8
-	movq	%r8, 184(%rdx)
+	movq	%rdi, 168(%rdx)
+	movq	%r10, %rdi
+	notq	%rdi
+	andq	%rsi, %rdi
+	xorq	%r9, %rdi
+	movq	%rdi, 176(%rdx)
+	movq	%rsi, %rdi
+	notq	%rdi
+	andq	%rbx, %rdi
+	xorq	%r10, %rdi
+	movq	%rdi, 184(%rdx)
 	notq	%rbx
-	andq	%r9, %rbx
-	xorq	%rdi, %rbx
+	andq	%r8, %rbx
+	xorq	%rsi, %rbx
 	movq	%rbx, 192(%rdx)
-	movq	8(%rsp), %rdi
-	movq	8(%rdi,%rsi,8), %rdi
-	movq	%rdi, 16(%rsp)
-	movq	(%rdx), %r11
-	movq	8(%rdx), %r10
-	movq	16(%rdx), %rbx
-	movq	24(%rdx), %rbp
-	movq	32(%rdx), %r12
-	xorq	40(%rdx), %r11
-	xorq	48(%rdx), %r10
-	xorq	56(%rdx), %rbx
-	xorq	64(%rdx), %rbp
-	xorq	72(%rdx), %r12
-	xorq	80(%rdx), %r11
-	xorq	88(%rdx), %r10
-	xorq	96(%rdx), %rbx
-	xorq	104(%rdx), %rbp
-	xorq	112(%rdx), %r12
-	xorq	120(%rdx), %r11
-	xorq	128(%rdx), %r10
-	xorq	136(%rdx), %rbx
-	xorq	144(%rdx), %rbp
-	xorq	152(%rdx), %r12
-	xorq	160(%rdx), %r11
-	xorq	168(%rdx), %r10
-	xorq	176(%rdx), %rbx
-	xorq	184(%rdx), %rbp
-	xorq	192(%rdx), %r12
-	movq	%r10, %rdi
+	movq	8(%rsp), %rsi
+	movq	8(%rsi,%r11,8), %rsi
+	movq	%rsi, 24(%rsp)
+	movq	(%rdx), %r10
+	movq	8(%rdx), %r9
+	movq	16(%rdx), %r11
+	movq	24(%rdx), %rbx
+	movq	32(%rdx), %rbp
+	xorq	40(%rdx), %r10
+	xorq	48(%rdx), %r9
+	xorq	56(%rdx), %r11
+	xorq	64(%rdx), %rbx
+	xorq	72(%rdx), %rbp
+	xorq	80(%rdx), %r10
+	xorq	88(%rdx), %r9
+	xorq	96(%rdx), %r11
+	xorq	104(%rdx), %rbx
+	xorq	112(%rdx), %rbp
+	xorq	120(%rdx), %r10
+	xorq	128(%rdx), %r9
+	xorq	136(%rdx), %r11
+	xorq	144(%rdx), %rbx
+	xorq	152(%rdx), %rbp
+	xorq	160(%rdx), %r10
+	xorq	168(%rdx), %r9
+	xorq	176(%rdx), %r11
+	xorq	184(%rdx), %rbx
+	xorq	192(%rdx), %rbp
+	movq	%r9, %rsi
+	rolq	$1, %rsi
+	xorq	%rbp, %rsi
+	movq	%r11, %rdi
 	rolq	$1, %rdi
-	xorq	%r12, %rdi
+	xorq	%r10, %rdi
 	movq	%rbx, %r8
 	rolq	$1, %r8
-	xorq	%r11, %r8
+	xorq	%r9, %r8
 	movq	%rbp, %r9
 	rolq	$1, %r9
-	xorq	%r10, %r9
-	movq	%r12, %r10
+	xorq	%r11, %r9
 	rolq	$1, %r10
 	xorq	%rbx, %r10
-	rolq	$1, %r11
-	xorq	%rbp, %r11
-	movq	(%rdx), %rbx
+	movq	(%rdx), %r11
+	xorq	%rsi, %r11
+	movq	48(%rdx), %rbx
 	xorq	%rdi, %rbx
-	movq	48(%rdx), %rbp
+	rolq	$44, %rbx
+	movq	96(%rdx), %rbp
 	xorq	%r8, %rbp
-	rolq	$44, %rbp
-	movq	96(%rdx), %r12
+	rolq	$43, %rbp
+	movq	144(%rdx), %r12
 	xorq	%r9, %r12
-	rolq	$43, %r12
-	movq	144(%rdx), %r13
+	rolq	$21, %r12
+	movq	192(%rdx), %r13
 	xorq	%r10, %r13
-	rolq	$21, %r13
-	movq	192(%rdx), %r14
+	rolq	$14, %r13
+	movq	%rbx, %r14
+	notq	%r14
+	andq	%rbp, %r14
 	xorq	%r11, %r14
-	rolq	$14, %r14
-	movq	%rbp, %r15
-	notq	%r15
-	andq	%r12, %r15
-	xorq	%rbx, %r15
-	xorq	16(%rsp), %r15
-	movq	%r15, (%rcx)
-	movq	%r12, %r15
-	notq	%r15
-	andq	%r13, %r15
-	xorq	%rbp, %r15
-	movq	%r15, 8(%rcx)
-	movq	%r13, %r15
-	notq	%r15
-	andq	%r14, %r15
-	xorq	%r12, %r15
-	movq	%r15, 16(%rcx)
-	movq	%r14, %r12
-	notq	%r12
-	andq	%rbx, %r12
-	xorq	%r13, %r12
-	movq	%r12, 24(%rcx)
-	notq	%rbx
-	andq	%rbp, %rbx
-	xorq	%r14, %rbx
-	movq	%rbx, 32(%rcx)
-	movq	24(%rdx), %rbx
+	xorq	24(%rsp), %r14
+	movq	%r14, (%rcx)
+	movq	%rbp, %r14
+	notq	%r14
+	andq	%r12, %r14
+	xorq	%rbx, %r14
+	movq	%r14, 8(%rcx)
+	movq	%r12, %r14
+	notq	%r14
+	andq	%r13, %r14
+	xorq	%rbp, %r14
+	movq	%r14, 16(%rcx)
+	movq	%r13, %rbp
+	notq	%rbp
+	andq	%r11, %rbp
+	xorq	%r12, %rbp
+	movq	%rbp, 24(%rcx)
+	notq	%r11
+	andq	%rbx, %r11
+	xorq	%r13, %r11
+	movq	%r11, 32(%rcx)
+	movq	24(%rdx), %r11
+	xorq	%r9, %r11
+	rolq	$28, %r11
+	movq	72(%rdx), %rbx
 	xorq	%r10, %rbx
-	rolq	$28, %rbx
-	movq	72(%rdx), %rbp
-	xorq	%r11, %rbp
-	rolq	$20, %rbp
-	movq	80(%rdx), %r12
+	rolq	$20, %rbx
+	movq	80(%rdx), %rbp
+	xorq	%rsi, %rbp
+	rolq	$3, %rbp
+	movq	128(%rdx), %r12
 	xorq	%rdi, %r12
-	rolq	$3, %r12
-	movq	128(%rdx), %r13
+	rolq	$45, %r12
+	movq	176(%rdx), %r13
 	xorq	%r8, %r13
-	rolq	$45, %r13
-	movq	176(%rdx), %r14
-	xorq	%r9, %r14
-	rolq	$61, %r14
-	movq	%rbp, %r15
-	notq	%r15
-	andq	%r12, %r15
-	xorq	%rbx, %r15
-	movq	%r15, 40(%rcx)
-	movq	%r12, %r15
-	notq	%r15
-	andq	%r13, %r15
-	xorq	%rbp, %r15
-	movq	%r15, 48(%rcx)
-	movq	%r13, %r15
-	notq	%r15
-	andq	%r14, %r15
-	xorq	%r12, %r15
-	movq	%r15, 56(%rcx)
-	movq	%r14, %r12
-	notq	%r12
-	andq	%rbx, %r12
-	xorq	%r13, %r12
-	movq	%r12, 64(%rcx)
-	notq	%rbx
-	andq	%rbp, %rbx
-	xorq	%r14, %rbx
-	movq	%rbx, 72(%rcx)
-	movq	8(%rdx), %rbx
+	rolq	$61, %r13
+	movq	%rbx, %r14
+	notq	%r14
+	andq	%rbp, %r14
+	xorq	%r11, %r14
+	movq	%r14, 40(%rcx)
+	movq	%rbp, %r14
+	notq	%r14
+	andq	%r12, %r14
+	xorq	%rbx, %r14
+	movq	%r14, 48(%rcx)
+	movq	%r12, %r14
+	notq	%r14
+	andq	%r13, %r14
+	xorq	%rbp, %r14
+	movq	%r14, 56(%rcx)
+	movq	%r13, %rbp
+	notq	%rbp
+	andq	%r11, %rbp
+	xorq	%r12, %rbp
+	movq	%rbp, 64(%rcx)
+	notq	%r11
+	andq	%rbx, %r11
+	xorq	%r13, %r11
+	movq	%r11, 72(%rcx)
+	movq	8(%rdx), %r11
+	xorq	%rdi, %r11
+	rolq	$1, %r11
+	movq	56(%rdx), %rbx
 	xorq	%r8, %rbx
-	rolq	$1, %rbx
-	movq	56(%rdx), %rbp
+	rolq	$6, %rbx
+	movq	104(%rdx), %rbp
 	xorq	%r9, %rbp
-	rolq	$6, %rbp
-	movq	104(%rdx), %r12
+	rolq	$25, %rbp
+	movq	152(%rdx), %r12
 	xorq	%r10, %r12
-	rolq	$25, %r12
-	movq	152(%rdx), %r13
-	xorq	%r11, %r13
-	rolq	$8, %r13
-	movq	160(%rdx), %r14
-	xorq	%rdi, %r14
-	rolq	$18, %r14
-	movq	%rbp, %r15
-	notq	%r15
-	andq	%r12, %r15
-	xorq	%rbx, %r15
-	movq	%r15, 80(%rcx)
-	movq	%r12, %r15
-	notq	%r15
-	andq	%r13, %r15
-	xorq	%rbp, %r15
-	movq	%r15, 88(%rcx)
-	movq	%r13, %r15
-	notq	%r15
-	andq	%r14, %r15
-	xorq	%r12, %r15
-	movq	%r15, 96(%rcx)
-	movq	%r14, %r12
-	notq	%r12
-	andq	%rbx, %r12
-	xorq	%r13, %r12
-	movq	%r12, 104(%rcx)
-	notq	%rbx
-	andq	%rbp, %rbx
-	xorq	%r14, %rbx
-	movq	%rbx, 112(%rcx)
-	movq	32(%rdx), %rbx
-	xorq	%r11, %rbx
-	rolq	$27, %rbx
-	movq	40(%rdx), %rbp
+	rolq	$8, %r12
+	movq	160(%rdx), %r13
+	xorq	%rsi, %r13
+	rolq	$18, %r13
+	movq	%rbx, %r14
+	notq	%r14
+	andq	%rbp, %r14
+	xorq	%r11, %r14
+	movq	%r14, 80(%rcx)
+	movq	%rbp, %r14
+	notq	%r14
+	andq	%r12, %r14
+	xorq	%rbx, %r14
+	movq	%r14, 88(%rcx)
+	movq	%r12, %r14
+	notq	%r14
+	andq	%r13, %r14
+	xorq	%rbp, %r14
+	movq	%r14, 96(%rcx)
+	movq	%r13, %rbp
+	notq	%rbp
+	andq	%r11, %rbp
+	xorq	%r12, %rbp
+	movq	%rbp, 104(%rcx)
+	notq	%r11
+	andq	%rbx, %r11
+	xorq	%r13, %r11
+	movq	%r11, 112(%rcx)
+	movq	32(%rdx), %r11
+	xorq	%r10, %r11
+	rolq	$27, %r11
+	movq	40(%rdx), %rbx
+	xorq	%rsi, %rbx
+	rolq	$36, %rbx
+	movq	88(%rdx), %rbp
 	xorq	%rdi, %rbp
-	rolq	$36, %rbp
-	movq	88(%rdx), %r12
+	rolq	$10, %rbp
+	movq	136(%rdx), %r12
 	xorq	%r8, %r12
-	rolq	$10, %r12
-	movq	136(%rdx), %r13
+	rolq	$15, %r12
+	movq	184(%rdx), %r13
 	xorq	%r9, %r13
-	rolq	$15, %r13
-	movq	184(%rdx), %r14
-	xorq	%r10, %r14
-	rolq	$56, %r14
-	movq	%rbp, %r15
-	notq	%r15
-	andq	%r12, %r15
-	xorq	%rbx, %r15
-	movq	%r15, 120(%rcx)
-	movq	%r12, %r15
-	notq	%r15
-	andq	%r13, %r15
-	xorq	%rbp, %r15
-	movq	%r15, 128(%rcx)
-	movq	%r13, %r15
-	notq	%r15
-	andq	%r14, %r15
-	xorq	%r12, %r15
-	movq	%r15, 136(%rcx)
-	movq	%r14, %r12
-	notq	%r12
-	andq	%rbx, %r12
-	xorq	%r13, %r12
-	movq	%r12, 144(%rcx)
-	notq	%rbx
-	andq	%rbp, %rbx
-	xorq	%r14, %rbx
-	movq	%rbx, 152(%rcx)
-	movq	16(%rdx), %rbx
-	xorq	%r9, %rbx
-	rolq	$62, %rbx
-	movq	64(%rdx), %r9
+	rolq	$56, %r13
+	movq	%rbx, %r14
+	notq	%r14
+	andq	%rbp, %r14
+	xorq	%r11, %r14
+	movq	%r14, 120(%rcx)
+	movq	%rbp, %r14
+	notq	%r14
+	andq	%r12, %r14
+	xorq	%rbx, %r14
+	movq	%r14, 128(%rcx)
+	movq	%r12, %r14
+	notq	%r14
+	andq	%r13, %r14
+	xorq	%rbp, %r14
+	movq	%r14, 136(%rcx)
+	movq	%r13, %rbp
+	notq	%rbp
+	andq	%r11, %rbp
+	xorq	%r12, %rbp
+	movq	%rbp, 144(%rcx)
+	notq	%r11
+	andq	%rbx, %r11
+	xorq	%r13, %r11
+	movq	%r11, 152(%rcx)
+	movq	16(%rdx), %r11
+	xorq	%r8, %r11
+	rolq	$62, %r11
+	movq	64(%rdx), %r8
+	xorq	%r9, %r8
+	rolq	$55, %r8
+	movq	112(%rdx), %r9
 	xorq	%r10, %r9
-	rolq	$55, %r9
-	movq	112(%rdx), %r10
-	xorq	%r11, %r10
-	rolq	$39, %r10
-	movq	120(%rdx), %r11
-	xorq	%rdi, %r11
-	rolq	$41, %r11
-	movq	168(%rdx), %rdi
+	rolq	$39, %r9
+	movq	120(%rdx), %r10
+	xorq	%rsi, %r10
+	rolq	$41, %r10
+	movq	168(%rdx), %rsi
+	xorq	%rdi, %rsi
+	rolq	$2, %rsi
+	movq	%r8, %rdi
+	notq	%rdi
+	andq	%r9, %rdi
+	xorq	%r11, %rdi
+	movq	%rdi, 160(%rcx)
+	movq	%r9, %rdi
+	notq	%rdi
+	andq	%r10, %rdi
 	xorq	%r8, %rdi
-	rolq	$2, %rdi
-	movq	%r9, %r8
-	notq	%r8
-	andq	%r10, %r8
-	xorq	%rbx, %r8
-	movq	%r8, 160(%rcx)
-	movq	%r10, %r8
-	notq	%r8
-	andq	%r11, %r8
-	xorq	%r9, %r8
-	movq	%r8, 168(%rcx)
-	movq	%r11, %r8
-	notq	%r8
-	andq	%rdi, %r8
-	xorq	%r10, %r8
-	movq	%r8, 176(%rcx)
-	movq	%rdi, %r8
-	notq	%r8
-	andq	%rbx, %r8
-	xorq	%r11, %r8
-	movq	%r8, 184(%rcx)
-	notq	%rbx
-	andq	%r9, %rbx
-	xorq	%rdi, %rbx
-	movq	%rbx, 192(%rcx)
-	addq	$2, %rsi
+	movq	%rdi, 168(%rcx)
+	movq	%r10, %rdi
+	notq	%rdi
+	andq	%rsi, %rdi
+	xorq	%r9, %rdi
+	movq	%rdi, 176(%rcx)
+	movq	%rsi, %rdi
+	notq	%rdi
+	andq	%r11, %rdi
+	xorq	%r10, %rdi
+	movq	%rdi, 184(%rcx)
+	notq	%r11
+	andq	%r8, %r11
+	xorq	%rsi, %r11
+	movq	%r11, 192(%rcx)
+	movq	16(%rsp), %r11
+	addq	$2, %r11
 L_keccakf1600_ref1$2:
-	cmpq	$23, %rsi
+	cmpq	$23, %r11
 	jb  	L_keccakf1600_ref1$3
 	ret
 	.data

From 30b325924ff11b6b194779e13c93ff7cea239aff Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Mon, 22 Apr 2024 22:09:39 +0200
Subject: [PATCH 56/82] fix kyber documentation

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 docs/algorithms/kem/kyber.md  | 8 ++++----
 docs/algorithms/kem/kyber.yml | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/docs/algorithms/kem/kyber.md b/docs/algorithms/kem/kyber.md
index ef38e3a49c..6d2c441260 100644
--- a/docs/algorithms/kem/kyber.md
+++ b/docs/algorithms/kem/kyber.md
@@ -30,8 +30,8 @@
 |     [Primary Source](#primary-source)     | ref                      | All                         | All                             | None                    | True                               | True                                           | False                 |
 |     [Primary Source](#primary-source)     | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                 |
 | [oldpqclean-aarch64](#oldpqclean-aarch64) | aarch64                  | ARM64\_V8                   | Linux,Darwin                    | None                    | True                               | False                                          | False                 |
-|            [libjade](#libjade)            | ref                      | x86\_64                     | Linux,Darwin                    | None                    | True                               | True                                           | False                 |
-|            [libjade](#libjade)            | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                 |
+|            [libjade](#libjade)            | ref                      | x86\_64                     | Linux,Darwin                    | None                    | True                               | False                                          | False                 |
+|            [libjade](#libjade)            | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | False                                          | False                 |
 
 Are implementations chosen based on runtime CPU feature detection? **Yes**.
 
@@ -44,8 +44,8 @@ Are implementations chosen based on runtime CPU feature detection? **Yes**.
 |     [Primary Source](#primary-source)     | ref                      | All                         | All                             | None                    | True                               | True                                           | False                |
 |     [Primary Source](#primary-source)     | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                |
 | [oldpqclean-aarch64](#oldpqclean-aarch64) | aarch64                  | ARM64\_V8                   | Linux,Darwin                    | None                    | True                               | False                                          | False                |
-|            [libjade](#libjade)            | ref                      | x86\_64                     | Linux,Darwin                    | None                    | True                               | True                                           | False                |
-|            [libjade](#libjade)            | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | True                                           | False                |
+|            [libjade](#libjade)            | ref                      | x86\_64                     | Linux,Darwin                    | None                    | True                               | False                                          | False                |
+|            [libjade](#libjade)            | avx2                     | x86\_64                     | Linux,Darwin                    | AVX2,BMI2,POPCNT        | True                               | False                                          | False                |
 
 Are implementations chosen based on runtime CPU feature detection? **Yes**.
 
diff --git a/docs/algorithms/kem/kyber.yml b/docs/algorithms/kem/kyber.yml
index 583430cfb6..3cdce8ff12 100644
--- a/docs/algorithms/kem/kyber.yml
+++ b/docs/algorithms/kem/kyber.yml
@@ -85,7 +85,7 @@ parameter-sets:
       - Linux
       - Darwin
     no-secret-dependent-branching-claimed: true
-    no-secret-dependent-branching-checked-by-valgrind: true
+    no-secret-dependent-branching-checked-by-valgrind: false
     large-stack-usage: false
   - upstream: libjade
     upstream-id: avx2
@@ -99,7 +99,7 @@ parameter-sets:
       - bmi2
       - popcnt
     no-secret-dependent-branching-claimed: true
-    no-secret-dependent-branching-checked-by-valgrind: true
+    no-secret-dependent-branching-checked-by-valgrind: false
     large-stack-usage: false
 - name: Kyber768
   claimed-nist-level: 3
@@ -154,7 +154,7 @@ parameter-sets:
       - Linux
       - Darwin
     no-secret-dependent-branching-claimed: true
-    no-secret-dependent-branching-checked-by-valgrind: true
+    no-secret-dependent-branching-checked-by-valgrind: false
     large-stack-usage: false
   - upstream: libjade
     upstream-id: avx2
@@ -168,7 +168,7 @@ parameter-sets:
       - bmi2
       - popcnt
     no-secret-dependent-branching-claimed: true
-    no-secret-dependent-branching-checked-by-valgrind: true
+    no-secret-dependent-branching-checked-by-valgrind: false
     large-stack-usage: false
 - name: Kyber1024
   claimed-nist-level: 5

From e9623614963da65c8d9621969425538b7db82bf5 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Mon, 22 Apr 2024 22:40:00 +0200
Subject: [PATCH 57/82] fix kyber documentation

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 docs/algorithms/kem/kyber.md     | 4 ++++
 scripts/update_docs_from_yaml.py | 6 ++++++
 2 files changed, 10 insertions(+)

diff --git a/docs/algorithms/kem/kyber.md b/docs/algorithms/kem/kyber.md
index 6d2c441260..a0fff58086 100644
--- a/docs/algorithms/kem/kyber.md
+++ b/docs/algorithms/kem/kyber.md
@@ -13,6 +13,10 @@
   - **oldpqclean-aarch64**:<a name="oldpqclean-aarch64"></a>
       - **Source**: https://github.com/PQClean/PQClean/commit/8e220a87308154d48fdfac40abbb191ac7fce06a with copy_from_upstream patches
       - **Implementation license (SPDX-Identifier)**: CC0-1.0 and (CC0-1.0 or Apache-2.0) and (CC0-1.0 or MIT) and MIT
+- **Formally-verified Implementation sources**: 
+  - **libjade**:<a name="libjade"></a>
+      - **Source**: https://github.com/formosa-crypto/lib/commit/555e23342471bea8544c356bdae230baf064ed56 with copy_from_upstream patches
+      - **Implementation license (SPDX-Identifier)**: CC0-1.0
 
 
 ## Parameter set summary
diff --git a/scripts/update_docs_from_yaml.py b/scripts/update_docs_from_yaml.py
index ef152d376a..f747318a02 100644
--- a/scripts/update_docs_from_yaml.py
+++ b/scripts/update_docs_from_yaml.py
@@ -47,6 +47,12 @@ def do_it(liboqs_root):
                     out_md.write('  - **{}**:<a name="{}"></a>\n'.format(opt_upstream, opt_upstream))
                     out_md.write('      - **Source**: {}\n'.format(kem_yaml['optimized-upstreams'][opt_upstream]['source']))
                     out_md.write('      - **Implementation license (SPDX-Identifier)**: {}\n'.format(kem_yaml['optimized-upstreams'][opt_upstream]['spdx-license-identifier']))
+            if 'formally-verified-upstreams' in kem_yaml:
+                out_md.write('- **Formally-verified Implementation sources**: \n')
+                for opt_upstream in kem_yaml['formally-verified-upstreams']:
+                    out_md.write('  - **{}**:<a name="{}"></a>\n'.format(opt_upstream, opt_upstream))
+                    out_md.write('      - **Source**: {}\n'.format(kem_yaml['formally-verified-upstreams'][opt_upstream]['source']))
+                    out_md.write('      - **Implementation license (SPDX-Identifier)**: {}\n'.format(kem_yaml['formally-verified-upstreams'][opt_upstream]['spdx-license-identifier']))
             if 'upstream-ancestors' in kem_yaml:
                 out_md.write('- **Ancestors of primary source**:\n')
                 for url in kem_yaml['upstream-ancestors'][:-1]:

From 6eae7d0d8a9e0624e335cb8544170407fbb5f54b Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Mon, 22 Apr 2024 22:53:39 +0200
Subject: [PATCH 58/82] fix kem template again

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../copy_from_upstream/src/kem/family/kem_scheme.c   | 12 ++++++------
 src/kem/kyber/kem_kyber_512.c                        |  6 +++---
 src/kem/kyber/kem_kyber_768.c                        |  6 +++---
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
index e82e328902..3070c8aea4 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
@@ -134,9 +134,9 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
-#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
         {%- else %}
-#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
@@ -208,9 +208,9 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
-#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
         {%- else %}
-#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
@@ -282,9 +282,9 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *s
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
-#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
+#if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
         {%- else %}
-#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- if impl['name'] in scheme['libjade_implementations'] %}_{%- endif %}{{ impl['name'] }}){%- endif %}
+#elif defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
         {%- endif %}
         {%- if 'required_flags' in impl and impl['required_flags'] %}
 #if defined(OQS_DIST_BUILD)
diff --git a/src/kem/kyber/kem_kyber_512.c b/src/kem/kyber/kem_kyber_512.c
index 589e7634c8..74b6e39066 100644
--- a/src/kem/kyber/kem_kyber_512.c
+++ b/src/kem/kyber/kem_kyber_512.c
@@ -71,7 +71,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secre
 		return (OQS_STATUS) libjade_kyber512_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_512aarch64)
+#elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
 #endif /* OQS_DIST_BUILD */
@@ -123,7 +123,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared
 		return (OQS_STATUS) libjade_kyber512_ref_enc(ciphertext, shared_secret, public_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_512aarch64)
+#elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
 #endif /* OQS_DIST_BUILD */
@@ -175,7 +175,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_decaps(uint8_t *shared_secret, const uint8_
 		return (OQS_STATUS) libjade_kyber512_ref_dec(shared_secret, ciphertext, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_512aarch64)
+#elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
 #endif /* OQS_DIST_BUILD */
diff --git a/src/kem/kyber/kem_kyber_768.c b/src/kem/kyber/kem_kyber_768.c
index 5801f34a68..80d1d170eb 100644
--- a/src/kem/kyber/kem_kyber_768.c
+++ b/src/kem/kyber/kem_kyber_768.c
@@ -71,7 +71,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secre
 		return (OQS_STATUS) libjade_kyber768_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_768aarch64)
+#elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
 #endif /* OQS_DIST_BUILD */
@@ -123,7 +123,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared
 		return (OQS_STATUS) libjade_kyber768_ref_enc(ciphertext, shared_secret, public_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_768aarch64)
+#elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
 #endif /* OQS_DIST_BUILD */
@@ -175,7 +175,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_decaps(uint8_t *shared_secret, const uint8_
 		return (OQS_STATUS) libjade_kyber768_ref_dec(shared_secret, ciphertext, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_768aarch64)
+#elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
 #endif /* OQS_DIST_BUILD */

From eec545bbbc55427a34a25e52e153348d5c32639d Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 23 Apr 2024 00:27:13 +0200
Subject: [PATCH 59/82] fix weekly.yml and unix.yml to test libjade code

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/unix.yml                    | 40 ++++++++++++-------
 .github/workflows/weekly.yml                  | 13 +++++-
 .../copy_from_upstream/copy_from_libjade.yml  |  2 +
 3 files changed, 40 insertions(+), 15 deletions(-)

diff --git a/.github/workflows/unix.yml b/.github/workflows/unix.yml
index 3d073f99b3..b512c93731 100644
--- a/.github/workflows/unix.yml
+++ b/.github/workflows/unix.yml
@@ -2,6 +2,12 @@ name: Linux and MacOS tests
 
 on: [push, pull_request, workflow_dispatch]
 
+env: 
+  # Semi-colon separated list of algorithims with libjade implementations to
+  # be passed as input to CMake option as: -DOQS_MINIMAL_BUILD=$LIBJADE_ALG_LIST
+  # See CONFIGURE.md under ## OQS_MINIMAL_BUILD
+  LIBJADE_ALG_LIST: "KEM_kyber_512;KEM_kyber_768" 
+
 jobs:
 
   stylecheck:
@@ -20,6 +26,12 @@ jobs:
 
   upstreamcheck:
     name: Check upstream code is properly integrated
+    strategy:
+      fail-fast: false
+      matrix:
+        copy-mode:
+          - copy
+          - libjade
     container: openquantumsafe/ci-ubuntu-focal-x86_64:latest
     runs-on: ubuntu-latest
     steps:
@@ -31,7 +43,7 @@ jobs:
           nix-channel --update && nix-env -iA nixpkgs.jasmin-compiler
       - name: Checkout code
         uses: actions/checkout@v4
-      - name: Verify copy_from_upstream state after "copy"
+      - name: Verify copy_from_upstream state after "${{ matrix.copy-mode}}"
         run: |
           git config --global user.name "ciuser" && \
           git config --global user.email "ci@openquantumsafe.org" && \
@@ -39,17 +51,7 @@ jobs:
           git config --global --add safe.directory $LIBOQS_DIR && \
           cd scripts/copy_from_upstream && \
           ! pip3 install -r requirements.txt 2>&1 | grep ERROR && \
-          python3 copy_from_upstream.py copy && \
-          ! git status | grep modified
-      - name: Verify copy_from_upstream state after "libjade"
-        run: |
-          git config --global user.name "ciuser" && \
-          git config --global user.email "ci@openquantumsafe.org" && \
-          export LIBOQS_DIR=`pwd` && \
-          git config --global --add safe.directory $LIBOQS_DIR && \
-          cd scripts/copy_from_upstream && \
-          ! pip3 install -r requirements.txt 2>&1 | grep ERROR && \
-          python3 copy_from_upstream.py libjade && \
+          python3 copy_from_upstream.py ${{ matrix.copy-mode }} && \
           ! git status | grep modified
 
   buildcheck:
@@ -116,13 +118,18 @@ jobs:
             container: openquantumsafe/ci-ubuntu-focal-x86_64:latest
             CMAKE_ARGS: -DCMAKE_C_COMPILER=clang-9 -DCMAKE_BUILD_TYPE=Debug -DUSE_SANITIZER=Address
             PYTEST_ARGS: --ignore=tests/test_distbuild.py --ignore=tests/test_leaks.py --ignore=tests/test_kat_all.py --numprocesses=auto --maxprocesses=10
+        libjade-build:
+          - -DOQS_LIBJADE_BUILD=OFF
+          # Restrict -DOQS_LIBJADE_BUILD=ON build to algs provided by
+          # libjade to minimise repeated tests
+          - -DOQS_LIBJADE_BUILD=ON -DOQS_MINIMAL_BUILD=$LIBJADE_ALG_LIST
     container:
       image: ${{ matrix.container }}
     steps:
       - name: Checkout code
         uses: actions/checkout@v4
       - name: Configure
-        run: mkdir build && cd build && cmake -GNinja ${{ matrix.CMAKE_ARGS }} .. && cmake -LA ..
+        run: mkdir build && cd build && cmake -GNinja ${{ matrix.CMAKE_ARGS }} ${{ matrix.libjade-build }} .. && cmake -LA ..
       - name: Build
         run: ninja
         working-directory: build
@@ -222,6 +229,11 @@ jobs:
           - -DCMAKE_C_COMPILER=gcc-13
           - -DOQS_USE_OPENSSL=OFF
           - -DBUILD_SHARED_LIBS=ON -DOQS_DIST_BUILD=OFF
+        libjade-build:
+          - -DOQS_LIBJADE_BUILD=OFF
+          # Restrict -DOQS_LIBJADE_BUILD=ON build to algs provided by
+          # libjade to minimise repeated tests
+          - -DOQS_LIBJADE_BUILD=ON -DOQS_MINIMAL_BUILD=$LIBJADE_ALG_LIST
     runs-on: ${{ matrix.os }}
     steps:
       - name: Checkout code
@@ -231,7 +243,7 @@ jobs:
       - name: Get system information
         run: sysctl -a | grep machdep.cpu
       - name: Configure
-        run: mkdir -p build && cd build && source ~/.bashrc && cmake -GNinja -DOQS_STRICT_WARNINGS=ON ${{ matrix.CMAKE_ARGS }} .. && cmake -LA ..
+        run: mkdir -p build && cd build && source ~/.bashrc && cmake -GNinja -DOQS_STRICT_WARNINGS=ON ${{ matrix.CMAKE_ARGS }} ${{ matrix.libjade-build }} .. && cmake -LA ..
       - name: Build
         run: ninja
         working-directory: build
diff --git a/.github/workflows/weekly.yml b/.github/workflows/weekly.yml
index cc111878fc..e47e48a8fc 100644
--- a/.github/workflows/weekly.yml
+++ b/.github/workflows/weekly.yml
@@ -5,6 +5,12 @@ on:
   - cron: "5 0 * * 0"
   workflow_dispatch:
 
+env: 
+  # Semi-colon separated list of algorithims with libjade implementations to
+  # be passed as input to CMake option as: -DOQS_MINIMAL_BUILD=$LIBJADE_ALG_LIST
+  # See CONFIGURE.md under ## OQS_MINIMAL_BUILD
+  LIBJADE_ALG_LIST: "KEM_kyber_512;KEM_kyber_768" 
+
 jobs:
 
   constant-time-x64:
@@ -51,13 +57,18 @@ jobs:
             container: openquantumsafe/ci-ubuntu-focal-x86_64:latest
             CMAKE_ARGS: -DOQS_DIST_BUILD=OFF -DOQS_OPT_TARGET=haswell
             PYTEST_ARGS: --numprocesses=auto -k 'test_kat_all'
+          libjade-build:
+            - -DOQS_LIBJADE_BUILD=OFF
+            # Restrict -DOQS_LIBJADE_BUILD=ON build to algs provided by
+            # libjade to minimise repeated tests
+            - -DOQS_LIBJADE_BUILD=ON -DOQS_MINIMAL_BUILD=$LIBJADE_ALG_LIST
     container:
       image: ${{ matrix.container }}
     steps:
       - name: Checkout code
         uses: actions/checkout@v2
       - name: Configure
-        run: mkdir build && cd build && cmake -GNinja ${{ matrix.CMAKE_ARGS }} .. && cmake -LA ..
+        run: mkdir build && cd build && cmake -GNinja ${{ matrix.CMAKE_ARGS }} ${{ matrix.libjade-build }}.. && cmake -LA ..
       - name: Build
         run: ninja
         working-directory: build
diff --git a/scripts/copy_from_upstream/copy_from_libjade.yml b/scripts/copy_from_upstream/copy_from_libjade.yml
index 532bc1feee..9d0c64cae5 100644
--- a/scripts/copy_from_upstream/copy_from_libjade.yml
+++ b/scripts/copy_from_upstream/copy_from_libjade.yml
@@ -1,6 +1,8 @@
 # When adding an algorithm to copy_from_libjade.yml, the boolean 
 # 'libjade_implementation' and list of implementation 'libjade_implementations' 
 # must updated for the relevant algorithm in copy_from_upstream.yml
+# Additionaly, the algorithm name must be appended to env.LIBJADE_ALG_LIST
+# in the unix.yml and weekly.yml GitHub Actions workflows
 upstreams:
   -
     name: libjade

From e1b0edf31fb302c25dbf2bb7897fc28a15454674 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 23 Apr 2024 01:46:56 +0200
Subject: [PATCH 60/82] rename libjade asm files from *.s to *.S

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/copy_from_upstream.py     | 8 +++++++-
 src/kem/kyber/CMakeLists.txt                         | 8 ++++----
 src/kem/kyber/libjade_kyber512_avx2/{kem.s => kem.S} | 0
 src/kem/kyber/libjade_kyber512_ref/{kem.s => kem.S}  | 0
 src/kem/kyber/libjade_kyber768_avx2/{kem.s => kem.S} | 0
 src/kem/kyber/libjade_kyber768_ref/{kem.s => kem.S}  | 0
 6 files changed, 11 insertions(+), 5 deletions(-)
 rename src/kem/kyber/libjade_kyber512_avx2/{kem.s => kem.S} (100%)
 rename src/kem/kyber/libjade_kyber512_ref/{kem.s => kem.S} (100%)
 rename src/kem/kyber/libjade_kyber768_avx2/{kem.s => kem.S} (100%)
 rename src/kem/kyber/libjade_kyber768_ref/{kem.s => kem.S} (100%)

diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index 75b89cb094..2a22d12685 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -467,10 +467,16 @@ def handle_implementation(impl, family, scheme, dst_basedir):
             # Flatten directory structure while copying relevant files from libjade repo
             for root, _, files in os.walk(origfolder):
                 for file in files:
-                    if os.path.splitext(file)[1].lower() in ['.c', '.h', '.s']:
+                    if os.path.splitext(file)[1] in ['.c', '.h']:
                         source_path = os.path.join(root, file)
                         dest_path = os.path.join(srcfolder, file)
                         subprocess.run(['cp', source_path, dest_path])
+                    if os.path.splitext(file)[1] in ['.s']:
+                        file_name, file_ext = os.path.splitext(file)
+                        new_file = ''.join([file_name, file_ext.upper()])
+                        source_path = os.path.join(root, file)
+                        dest_path = os.path.join(srcfolder, new_file)
+                        subprocess.run(['cp', source_path, dest_path])
         else:
             # determine list of files to copy:
             if 'sources' in i:
diff --git a/src/kem/kyber/CMakeLists.txt b/src/kem/kyber/CMakeLists.txt
index 4aabeeddb4..7a9af8240d 100644
--- a/src/kem/kyber/CMakeLists.txt
+++ b/src/kem/kyber/CMakeLists.txt
@@ -92,14 +92,14 @@ endif()
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_START
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_512)
-    add_library(jasmin_kyber_512_ref OBJECT kem_kyber_512.c libjade_kyber512_ref/api.c libjade_kyber512_ref/kem.s)
+    add_library(jasmin_kyber_512_ref OBJECT kem_kyber_512.c libjade_kyber512_ref/api.c libjade_kyber512_ref/kem.S)
     target_include_directories(jasmin_kyber_512_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_ref)
     target_include_directories(jasmin_kyber_512_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:jasmin_kyber_512_ref>)
 endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
-    add_library(jasmin_kyber_512_avx2 OBJECT libjade_kyber512_avx2/api.c libjade_kyber512_avx2/kem.s)
+    add_library(jasmin_kyber_512_avx2 OBJECT libjade_kyber512_avx2/api.c libjade_kyber512_avx2/kem.S)
     target_include_directories(jasmin_kyber_512_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_avx2)
     target_include_directories(jasmin_kyber_512_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     target_compile_options(jasmin_kyber_512_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
@@ -107,14 +107,14 @@ if(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
 endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_768)
-    add_library(jasmin_kyber_768_ref OBJECT kem_kyber_768.c libjade_kyber768_ref/api.c libjade_kyber768_ref/kem.s)
+    add_library(jasmin_kyber_768_ref OBJECT kem_kyber_768.c libjade_kyber768_ref/api.c libjade_kyber768_ref/kem.S)
     target_include_directories(jasmin_kyber_768_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_ref)
     target_include_directories(jasmin_kyber_768_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:jasmin_kyber_768_ref>)
 endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2)
-    add_library(jasmin_kyber_768_avx2 OBJECT libjade_kyber768_avx2/api.c libjade_kyber768_avx2/kem.s)
+    add_library(jasmin_kyber_768_avx2 OBJECT libjade_kyber768_avx2/api.c libjade_kyber768_avx2/kem.S)
     target_include_directories(jasmin_kyber_768_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_avx2)
     target_include_directories(jasmin_kyber_768_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     target_compile_options(jasmin_kyber_768_avx2 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
diff --git a/src/kem/kyber/libjade_kyber512_avx2/kem.s b/src/kem/kyber/libjade_kyber512_avx2/kem.S
similarity index 100%
rename from src/kem/kyber/libjade_kyber512_avx2/kem.s
rename to src/kem/kyber/libjade_kyber512_avx2/kem.S
diff --git a/src/kem/kyber/libjade_kyber512_ref/kem.s b/src/kem/kyber/libjade_kyber512_ref/kem.S
similarity index 100%
rename from src/kem/kyber/libjade_kyber512_ref/kem.s
rename to src/kem/kyber/libjade_kyber512_ref/kem.S
diff --git a/src/kem/kyber/libjade_kyber768_avx2/kem.s b/src/kem/kyber/libjade_kyber768_avx2/kem.S
similarity index 100%
rename from src/kem/kyber/libjade_kyber768_avx2/kem.s
rename to src/kem/kyber/libjade_kyber768_avx2/kem.S
diff --git a/src/kem/kyber/libjade_kyber768_ref/kem.s b/src/kem/kyber/libjade_kyber768_ref/kem.S
similarity index 100%
rename from src/kem/kyber/libjade_kyber768_ref/kem.s
rename to src/kem/kyber/libjade_kyber768_ref/kem.S

From 17ed11ec127516724a73b8c998c73428220cc986 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 23 Apr 2024 02:01:01 +0200
Subject: [PATCH 61/82] end libjade_kyber*/api.c files with newline

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../patches/libjade-kyber-api.patch           | 24 +++++++++----------
 src/kem/kyber/libjade_kyber512_avx2/api.c     |  2 +-
 src/kem/kyber/libjade_kyber512_ref/api.c      |  2 +-
 src/kem/kyber/libjade_kyber768_avx2/api.c     |  2 +-
 src/kem/kyber/libjade_kyber768_ref/api.c      |  2 +-
 5 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/scripts/copy_from_upstream/patches/libjade-kyber-api.patch b/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
index 1797a08dc1..74c331cf54 100644
--- a/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
+++ b/scripts/copy_from_upstream/patches/libjade-kyber-api.patch
@@ -1,9 +1,9 @@
 diff --git a/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c b/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c
 new file mode 100644
-index 0000000..028d5ef
+index 0000000..78436e7
 --- /dev/null
 +++ b/src/crypto_kem/kyber/kyber512/amd64/avx2/api.c
-@@ -0,0 +1,19 @@
+@@ -0,0 +1,20 @@
 +#include <oqs/rand.h>
 +#include "api.h"
 +
@@ -23,7 +23,7 @@ index 0000000..028d5ef
 +int libjade_kyber512_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
 +    return jade_kem_kyber_kyber512_amd64_avx2_dec( shared_secret, ciphertext, secret_key);
 +}
-\ No newline at end of file
++
 diff --git a/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h b/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h
 index 5148fd5..419112e 100644
 --- a/src/crypto_kem/kyber/kyber512/amd64/avx2/include/api.h
@@ -76,10 +76,10 @@ index 5148fd5..419112e 100644
  #endif
 diff --git a/src/crypto_kem/kyber/kyber512/amd64/ref/api.c b/src/crypto_kem/kyber/kyber512/amd64/ref/api.c
 new file mode 100644
-index 0000000..97a698d
+index 0000000..e06e406
 --- /dev/null
 +++ b/src/crypto_kem/kyber/kyber512/amd64/ref/api.c
-@@ -0,0 +1,19 @@
+@@ -0,0 +1,20 @@
 +#include <oqs/rand.h>
 +#include "api.h"
 +
@@ -99,7 +99,7 @@ index 0000000..97a698d
 +int libjade_kyber512_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
 +    return jade_kem_kyber_kyber512_amd64_ref_dec(shared_secret, ciphertext, secret_key);
 +}
-\ No newline at end of file
++
 diff --git a/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h b/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h
 index 38127cf..fcce52b 100644
 --- a/src/crypto_kem/kyber/kyber512/amd64/ref/include/api.h
@@ -153,10 +153,10 @@ index 38127cf..fcce52b 100644
  #endif
 diff --git a/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c b/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c
 new file mode 100644
-index 0000000..130027f
+index 0000000..9eeab1d
 --- /dev/null
 +++ b/src/crypto_kem/kyber/kyber768/amd64/avx2/api.c
-@@ -0,0 +1,19 @@
+@@ -0,0 +1,20 @@
 +#include <oqs/rand.h>
 +#include "api.h"
 +
@@ -176,7 +176,7 @@ index 0000000..130027f
 +int libjade_kyber768_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
 +    return jade_kem_kyber_kyber768_amd64_avx2_dec(shared_secret, ciphertext, secret_key);
 +}
-\ No newline at end of file
++
 diff --git a/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h b/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h
 index d3b3500..ac36577 100644
 --- a/src/crypto_kem/kyber/kyber768/amd64/avx2/include/api.h
@@ -229,10 +229,10 @@ index d3b3500..ac36577 100644
  #endif
 diff --git a/src/crypto_kem/kyber/kyber768/amd64/ref/api.c b/src/crypto_kem/kyber/kyber768/amd64/ref/api.c
 new file mode 100644
-index 0000000..c2473e8
+index 0000000..b9a29b6
 --- /dev/null
 +++ b/src/crypto_kem/kyber/kyber768/amd64/ref/api.c
-@@ -0,0 +1,19 @@
+@@ -0,0 +1,20 @@
 +#include <oqs/rand.h>
 +#include "api.h"
 +
@@ -252,7 +252,7 @@ index 0000000..c2473e8
 +int libjade_kyber768_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
 +    return jade_kem_kyber_kyber768_amd64_ref_dec(shared_secret, ciphertext, secret_key);
 +}
-\ No newline at end of file
++
 diff --git a/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h b/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h
 index e23e1bf..0c453e0 100644
 --- a/src/crypto_kem/kyber/kyber768/amd64/ref/include/api.h
diff --git a/src/kem/kyber/libjade_kyber512_avx2/api.c b/src/kem/kyber/libjade_kyber512_avx2/api.c
index 028d5efb82..ec6ff905c9 100644
--- a/src/kem/kyber/libjade_kyber512_avx2/api.c
+++ b/src/kem/kyber/libjade_kyber512_avx2/api.c
@@ -16,4 +16,4 @@ int libjade_kyber512_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const
 
 int libjade_kyber512_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
     return jade_kem_kyber_kyber512_amd64_avx2_dec( shared_secret, ciphertext, secret_key);
-}
\ No newline at end of file
+}
diff --git a/src/kem/kyber/libjade_kyber512_ref/api.c b/src/kem/kyber/libjade_kyber512_ref/api.c
index 97a698d3e0..7b11f73092 100644
--- a/src/kem/kyber/libjade_kyber512_ref/api.c
+++ b/src/kem/kyber/libjade_kyber512_ref/api.c
@@ -16,4 +16,4 @@ int libjade_kyber512_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const
 
 int libjade_kyber512_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
     return jade_kem_kyber_kyber512_amd64_ref_dec(shared_secret, ciphertext, secret_key);
-}
\ No newline at end of file
+}
diff --git a/src/kem/kyber/libjade_kyber768_avx2/api.c b/src/kem/kyber/libjade_kyber768_avx2/api.c
index 130027fe0f..d5046c43ae 100644
--- a/src/kem/kyber/libjade_kyber768_avx2/api.c
+++ b/src/kem/kyber/libjade_kyber768_avx2/api.c
@@ -16,4 +16,4 @@ int libjade_kyber768_avx2_enc(uint8_t *ciphertext, uint8_t *shared_secret, const
 
 int libjade_kyber768_avx2_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
     return jade_kem_kyber_kyber768_amd64_avx2_dec(shared_secret, ciphertext, secret_key);
-}
\ No newline at end of file
+}
diff --git a/src/kem/kyber/libjade_kyber768_ref/api.c b/src/kem/kyber/libjade_kyber768_ref/api.c
index c2473e83ac..bacb123a5d 100644
--- a/src/kem/kyber/libjade_kyber768_ref/api.c
+++ b/src/kem/kyber/libjade_kyber768_ref/api.c
@@ -16,4 +16,4 @@ int libjade_kyber768_ref_enc(uint8_t *ciphertext, uint8_t *shared_secret, const
 
 int libjade_kyber768_ref_dec(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
     return jade_kem_kyber_kyber768_amd64_ref_dec(shared_secret, ciphertext, secret_key);
-}
\ No newline at end of file
+}

From 6368bcc40b1e24685b993ec7faf1b23c7e46fa25 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 24 Apr 2024 20:38:23 +0200
Subject: [PATCH 62/82] fix kem template to prevent duplicate symbols in object
 files

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .../copy_from_upstream/src/kem/family/CMakeLists.txt.libjade  | 2 +-
 src/kem/kyber/CMakeLists.txt                                  | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
index c90b2431e3..8df1271f26 100644
--- a/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
+++ b/scripts/copy_from_upstream/src/kem/family/CMakeLists.txt.libjade
@@ -22,7 +22,7 @@ endif()
         {%- if impl['name'] == scheme['default_implementation'] %}
 
 if(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme_c'] }}{%- if 'alias_scheme' in scheme %} OR OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- endif %})
-    add_library(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} OBJECT kem_{{ family }}_{{ scheme['scheme'] }}.c {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
+    add_library(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} OBJECT {% for source_file in impl['sources']|sort -%}{{ impl['upstream']['name'] }}_{{ scheme['pqclean_scheme'] }}_{{ impl['name'] }}/{{ source_file }}{%- if not loop.last %} {% endif -%}{%- endfor -%})
            {%- if impl['compile_opts'] %}
     target_compile_options(jasmin_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }} PUBLIC {{ impl['compile_opts'] }})
            {%- endif -%}
diff --git a/src/kem/kyber/CMakeLists.txt b/src/kem/kyber/CMakeLists.txt
index 7a9af8240d..c1e3e845cc 100644
--- a/src/kem/kyber/CMakeLists.txt
+++ b/src/kem/kyber/CMakeLists.txt
@@ -92,7 +92,7 @@ endif()
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_CMAKELISTS_START
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_512)
-    add_library(jasmin_kyber_512_ref OBJECT kem_kyber_512.c libjade_kyber512_ref/api.c libjade_kyber512_ref/kem.S)
+    add_library(jasmin_kyber_512_ref OBJECT libjade_kyber512_ref/api.c libjade_kyber512_ref/kem.S)
     target_include_directories(jasmin_kyber_512_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber512_ref)
     target_include_directories(jasmin_kyber_512_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:jasmin_kyber_512_ref>)
@@ -107,7 +107,7 @@ if(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
 endif()
 
 if(OQS_ENABLE_LIBJADE_KEM_kyber_768)
-    add_library(jasmin_kyber_768_ref OBJECT kem_kyber_768.c libjade_kyber768_ref/api.c libjade_kyber768_ref/kem.S)
+    add_library(jasmin_kyber_768_ref OBJECT libjade_kyber768_ref/api.c libjade_kyber768_ref/kem.S)
     target_include_directories(jasmin_kyber_768_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libjade_kyber768_ref)
     target_include_directories(jasmin_kyber_768_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/libjade_shims)
     set(_KYBER_OBJS ${_KYBER_OBJS} $<TARGET_OBJECTS:jasmin_kyber_768_ref>)

From 2255ed73c9d6f330aeac4ca8dd3ba22264e34524 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 24 Apr 2024 20:49:26 +0200
Subject: [PATCH 63/82] fix indentation in weekly.yml

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/weekly.yml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/.github/workflows/weekly.yml b/.github/workflows/weekly.yml
index e47e48a8fc..a1c03fd802 100644
--- a/.github/workflows/weekly.yml
+++ b/.github/workflows/weekly.yml
@@ -57,11 +57,11 @@ jobs:
             container: openquantumsafe/ci-ubuntu-focal-x86_64:latest
             CMAKE_ARGS: -DOQS_DIST_BUILD=OFF -DOQS_OPT_TARGET=haswell
             PYTEST_ARGS: --numprocesses=auto -k 'test_kat_all'
-          libjade-build:
-            - -DOQS_LIBJADE_BUILD=OFF
-            # Restrict -DOQS_LIBJADE_BUILD=ON build to algs provided by
-            # libjade to minimise repeated tests
-            - -DOQS_LIBJADE_BUILD=ON -DOQS_MINIMAL_BUILD=$LIBJADE_ALG_LIST
+        libjade-build:
+          - -DOQS_LIBJADE_BUILD=OFF
+          # Restrict -DOQS_LIBJADE_BUILD=ON build to algs provided by
+          # libjade to minimise repeated tests
+          - -DOQS_LIBJADE_BUILD=ON -DOQS_MINIMAL_BUILD=$LIBJADE_ALG_LIST
     container:
       image: ${{ matrix.container }}
     steps:

From 3783c4f93e410d11fffd5c4f6e7cd8e7ed67a082 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 24 Apr 2024 21:03:54 +0200
Subject: [PATCH 64/82] skip testing libjade on macos-14 in CI

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/unix.yml | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/.github/workflows/unix.yml b/.github/workflows/unix.yml
index b512c93731..2c4b368a4f 100644
--- a/.github/workflows/unix.yml
+++ b/.github/workflows/unix.yml
@@ -234,6 +234,11 @@ jobs:
           # Restrict -DOQS_LIBJADE_BUILD=ON build to algs provided by
           # libjade to minimise repeated tests
           - -DOQS_LIBJADE_BUILD=ON -DOQS_MINIMAL_BUILD=$LIBJADE_ALG_LIST
+        exclude: 
+          # macos-14 runs on aarch64, libjade targets x86
+          # Skip testing libjade on macos-14
+          - os: macos-14
+            libjade-build: -DOQS_LIBJADE_BUILD=ON -DOQS_MINIMAL_BUILD=$LIBJADE_ALG_LIST
     runs-on: ${{ matrix.os }}
     steps:
       - name: Checkout code

From 5c406969e86253babfa478c1f9de1601d45f9f0d Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 24 Apr 2024 23:25:46 +0200
Subject: [PATCH 65/82] use release tag/branch with libjade upstream url
 instead of commit

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 docs/algorithms/kem/kyber.md                           | 2 +-
 docs/algorithms/kem/kyber.yml                          | 4 ++--
 scripts/copy_from_upstream/copy_from_libjade.yml       | 3 ++-
 scripts/copy_from_upstream/copy_from_upstream.py       | 5 ++++-
 scripts/copy_from_upstream/update_upstream_alg_docs.py | 4 ++--
 5 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/docs/algorithms/kem/kyber.md b/docs/algorithms/kem/kyber.md
index a0fff58086..d2cbbaef06 100644
--- a/docs/algorithms/kem/kyber.md
+++ b/docs/algorithms/kem/kyber.md
@@ -15,7 +15,7 @@
       - **Implementation license (SPDX-Identifier)**: CC0-1.0 and (CC0-1.0 or Apache-2.0) and (CC0-1.0 or MIT) and MIT
 - **Formally-verified Implementation sources**: 
   - **libjade**:<a name="libjade"></a>
-      - **Source**: https://github.com/formosa-crypto/lib/commit/555e23342471bea8544c356bdae230baf064ed56 with copy_from_upstream patches
+      - **Source**: https://github.com/formosa-crypto/libjade/tree/release/2023.05-1 with copy_from_upstream patches
       - **Implementation license (SPDX-Identifier)**: CC0-1.0
 
 
diff --git a/docs/algorithms/kem/kyber.yml b/docs/algorithms/kem/kyber.yml
index 3cdce8ff12..0da8c542d9 100644
--- a/docs/algorithms/kem/kyber.yml
+++ b/docs/algorithms/kem/kyber.yml
@@ -28,8 +28,8 @@ optimized-upstreams:
       and MIT
 formally-verified-upstreams:
   libjade:
-    source: https://github.com/formosa-crypto/lib/commit/555e23342471bea8544c356bdae230baf064ed56
-      with copy_from_upstream patches
+    source: https://github.com/formosa-crypto/libjade/tree/release/2023.05-1 with
+      copy_from_upstream patches
     spdx-license-identifier: CC0-1.0
 parameter-sets:
 - name: Kyber512
diff --git a/scripts/copy_from_upstream/copy_from_libjade.yml b/scripts/copy_from_upstream/copy_from_libjade.yml
index 9d0c64cae5..30571771b0 100644
--- a/scripts/copy_from_upstream/copy_from_libjade.yml
+++ b/scripts/copy_from_upstream/copy_from_libjade.yml
@@ -6,8 +6,9 @@
 upstreams:
   -
     name: libjade
-    git_url: https://github.com/formosa-crypto/libjade
+    git_url: https://github.com/formosa-crypto/libjade.git
     git_branch: release/2023.05-1
+    # git_commit: release/2023.05-1
     git_commit: 555e23342471bea8544c356bdae230baf064ed56
     kem_meta_path: 'src/crypto_kem/{family}/{pqclean_scheme}/META.yml'
     kem_scheme_path: 'src/crypto_kem/{family}/{pqclean_scheme}'
diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index 2a22d12685..676d228d29 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -145,7 +145,10 @@ def load_instructions(file):
             shell(['git', 'init', work_dir])
             shell(['git', '--git-dir', work_dotgit, 'remote', 'add', 'origin', upstream_git_url])
         shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'remote', 'set-url', 'origin', upstream_git_url])
-        shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'fetch', '--depth=1', 'origin', upstream_git_commit])
+        if file == 'copy_from_libjade.yml':
+            shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'fetch', '--depth=1', 'origin', upstream_git_branch])
+        else:
+            shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'fetch', '--depth=1', 'origin', upstream_git_commit])
         shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'reset', '--hard', upstream_git_commit])
         if file == 'copy_from_libjade.yml':
             shell(['make', '-C', os.path.join(work_dir, 'src')])
diff --git a/scripts/copy_from_upstream/update_upstream_alg_docs.py b/scripts/copy_from_upstream/update_upstream_alg_docs.py
index 92121fe8f4..9bcc98eb13 100755
--- a/scripts/copy_from_upstream/update_upstream_alg_docs.py
+++ b/scripts/copy_from_upstream/update_upstream_alg_docs.py
@@ -261,8 +261,8 @@ def update_libjade_kem_alg_docs(liboqs_root, kems, upstream_info, write_changes=
                     lhs = oqs_yaml['formally-verified-upstreams'][upstream['name']]['source']
                 else:
                     lhs = ''
-                git_commit = upstream['git_commit']
-                oqs_yaml['formally-verified-upstreams'][upstream['name']]['source'] = rhs_if_not_equal(lhs, ("{}/commit/{}"+patches_done).format(verified_upstream_base_url, git_commit), "formally-verified-upstreams")
+                git_branch = upstream['git_branch']
+                oqs_yaml['formally-verified-upstreams'][upstream['name']]['source'] = rhs_if_not_equal(lhs, ("{}/tree/{}"+patches_done).format(verified_upstream_base_url, git_branch), "formally-verified-upstreams")
 
             index, oqs_scheme_yaml = get_oqs_yaml(oqs_yaml['parameter-sets'], scheme['pretty_name_full'])
 

From 05b069e5ee559e9b13cc234af46b5daecb8b5722 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 25 Apr 2024 04:01:18 +0200
Subject: [PATCH 66/82] fix build error when OQS_ENABLE_LIBJADE_KEM_ALG=OFF

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .CMake/alg_support.cmake                      |  4 ++--
 CMakeLists.txt                                |  6 ++---
 CONFIGURE.md                                  |  9 +++++++-
 .../add_enable_by_alg.libjade                 |  2 +-
 .../add_enable_by_alg_conditional.libjade     |  2 +-
 .../src/kem/family/kem_scheme.c               | 12 +++++-----
 .../add_alg_enable_defines.libjade            | 22 +++++++++----------
 src/common/CMakeLists.txt                     |  6 ++++-
 src/kem/kyber/kem_kyber_512.c                 | 12 +++++-----
 src/kem/kyber/kem_kyber_768.c                 | 12 +++++-----
 src/oqsconfig.h.cmake                         | 12 +++++-----
 11 files changed, 54 insertions(+), 45 deletions(-)

diff --git a/.CMake/alg_support.cmake b/.CMake/alg_support.cmake
index b5e3bf9d41..1d6e8f9531 100644
--- a/.CMake/alg_support.cmake
+++ b/.CMake/alg_support.cmake
@@ -169,7 +169,7 @@ cmake_dependent_option(OQS_ENABLE_SIG_sphincs_shake_256s_simple "" ON "OQS_ENABL
 ##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ENABLE_BY_ALG_END
 
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_START
-if(OQS_LIBJADE_BUILD)
+if ((OQS_LIBJADE_BUILD STREQUAL ON))
 
 option(OQS_ENABLE_LIBJADE_KEM_KYBER "Enable libjade implementation of kyber algorithm family" ON)
 cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_512 "" ON "OQS_ENABLE_LIBJADE_KEM_KYBER" OFF)
@@ -507,7 +507,7 @@ endif()
 ##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ENABLE_BY_ALG_CONDITIONAL_END
 
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_CONDITIONAL_START
-if(OQS_LIBJADE_BUILD)
+if ((OQS_LIBJADE_BUILD STREQUAL ON))
 
 if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
 if(OQS_DIST_X86_64_BUILD OR (OQS_USE_AVX2_INSTRUCTIONS AND OQS_USE_BMI2_INSTRUCTIONS AND OQS_USE_POPCNT_INSTRUCTIONS))
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f74def2575..be0dd1836a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,10 +30,8 @@ option(OQS_EMBEDDED_BUILD "Compile liboqs for an Embedded environment without a
 
 set(OQS_OPT_TARGET auto CACHE STRING "The target microarchitecture for optimization.")
 
-if(OQS_LIBJADE_BUILD)
-    set(OQS_LIBJADE_BUILD_BIN 1)
-else()
-    set(OQS_LIBJADE_BUILD_BIN 0)
+if (NOT (CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin") AND (OQS_LIBJADE_BUILD STREQUAL ON))
+    message(FATAL_ERROR "Building liboqs with libjade implementations from libjade is only supported on Linux and Darwin.")
 endif()
 
 set(CMAKE_C_STANDARD 11)
diff --git a/CONFIGURE.md b/CONFIGURE.md
index d3f1610799..aad4887ea9 100644
--- a/CONFIGURE.md
+++ b/CONFIGURE.md
@@ -20,6 +20,7 @@ The following options can be passed to CMake before the build file generation pr
 - [OQS_STRICT_WARNINGS](#OQS_STRICT_WARNINGS)
 - [OQS_EMBEDDED_BUILD](#OQS_EMBEDDED_BUILD)
 - [OQS_LIBJADE_BUILD](#OQS_LIBJADE_BUILD)
+- [OQS_ENABLE_LIBJADE_KEM_ALG/OQS_ENABLE_LIBJADE_SIG_ALG](#OQS_ENABLE_KEM_ALG/OQS_ENABLE_SIG_ALG)
 
 ## BUILD_SHARED_LIBS
 
@@ -182,4 +183,10 @@ Can be `ON` or `OFF`. When `ON` liboqs is built to use high assurance implementa
 
 At the moment, Libjade only provides Kyber512 and Kyber768 KEMs. 
 
-**Default** `OFF`.
\ No newline at end of file
+**Default** `OFF`.
+
+## OQS_ENABLE_LIBJADE_KEM_ALG/OQS_ENABLE_LIBJADE_SIG_ALG
+
+Note: `ALG` in `OQS_ENABLE_LIBJADE_KEM_ALG/OQS_ENABLE_LIBJADE_SIG_ALG` should be replaced with the specific algorithm name as demonstrated in [OQS_ENABLE_KEM_ALG/OQS_ENABLE_SIG_ALG](#OQS_ENABLE_KEM_ALG/OQS_ENABLE_SIG_ALG).
+
+**Default**: `OFF` if [OQS_LIBJADE_BUILD](#OQS_LIBJADE_BUILD) is `OFF` else unset.
\ No newline at end of file
diff --git a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
index dafb4110c9..31cc171b1a 100644
--- a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
+++ b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
@@ -1,5 +1,5 @@
 
-if(OQS_LIBJADE_BUILD)
+if ((OQS_LIBJADE_BUILD STREQUAL ON))
 {% for family in instructions['kems'] %}
 option(OQS_ENABLE_LIBJADE_KEM_{{ family['name']|upper }} "Enable libjade implementation of {{ family['name'] }} algorithm family" ON)
     {%- for scheme in family['schemes'] %}
diff --git a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
index 848e0ed1e9..e932276a44 100644
--- a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
+++ b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
@@ -1,5 +1,5 @@
 
-if(OQS_LIBJADE_BUILD)
+if ((OQS_LIBJADE_BUILD STREQUAL ON))
 {% for family in instructions['kems'] %}
     {%- for scheme in family['schemes'] %}
         {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] and impl['supported_platforms'] -%}
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
index 3070c8aea4..855f8139f0 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
@@ -130,7 +130,7 @@ extern int libjade_{{ scheme['pqclean_scheme_c'] }}_{{ impl['name'] }}_dec(uint8
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *public_key, uint8_t *secret_key) {
 {%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
-#if OQS_LIBJADE_BUILD
+#if defined(OQS_LIBJADE_BUILD) && (defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}){%- endif %})
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
@@ -164,7 +164,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
 #endif
     {%- endif %}
 {% endfor -%}
-#else /*OQS_LIBJADE_BUILD*/
+#else /*OQS_LIBJADE_BUILD && (OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }} {%- if 'alias_scheme' in scheme %} || OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- endif %})*/
 {%- endif %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
@@ -204,7 +204,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
 {%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
-#if OQS_LIBJADE_BUILD
+#if defined(OQS_LIBJADE_BUILD) && (defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}){%- endif %})
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
@@ -238,7 +238,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
 #endif 
     {%- endif %}
 {% endfor -%}
-#else /*OQS_LIBJADE_BUILD*/
+#else /*OQS_LIBJADE_BUILD && (OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }} {%- if 'alias_scheme' in scheme %} || OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- endif %})*/
 {%- endif %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
@@ -278,7 +278,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
 
 OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
 {%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
-#if OQS_LIBJADE_BUILD
+#if defined(OQS_LIBJADE_BUILD) && (defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}){%- endif %})
 {%- for scheme in schemes %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
         {%- if loop.first %}
@@ -312,7 +312,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *s
 #endif
     {%- endif %}
 {% endfor -%}
-#else /*OQS_LIBJADE_BUILD*/
+#else /*OQS_LIBJADE_BUILD && (OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }} {%- if 'alias_scheme' in scheme %} || OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}{%- endif %})*/
 {%- endif %}
     {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
     {%- if loop.first %}
diff --git a/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade b/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade
index cf99b16f23..cb4b25c7a4 100644
--- a/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade
+++ b/scripts/copy_from_upstream/src/oqsconfig.h.cmake/add_alg_enable_defines.libjade
@@ -1,17 +1,17 @@
 {% for family in instructions['kems'] %}
 
-#cmakedefine OQS_LIBJADE_BUILD @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine01 OQS_LIBJADE_BUILD
 
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name']|upper }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name']|upper }} 1
     {%- for scheme in family['schemes'] %}
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }} 1
 {%- if 'alias_scheme' in scheme %}
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }} 1
 {%- endif -%}
         {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] %}
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'] }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'] }} 1
 {%- if 'alias_scheme' in scheme %}
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }} 1
 {%- endif -%}
         {%- endfor -%}
     {%- endfor -%}
@@ -19,16 +19,16 @@
 
 {% for family in instructions['sigs'] %}
 
-#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name']|upper }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name']|upper }} 1
     {%- for scheme in family['schemes'] %}
-#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }} 1
 {%- if 'alias_scheme' in scheme %}
-#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }} 1
 {%- endif -%}
         {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] %}
-#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'] }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['scheme'] }}_{{ impl['name'] }} 1
 {%- if 'alias_scheme' in scheme %}
-#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }} @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_SIG_{{ family['name'] }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }} 1
 {%- endif -%}
         {%- endfor -%}
     {%- endfor -%}
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index f0bc12c933..c59c046613 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -71,6 +71,10 @@ else() # using XKCP
     set(SHA3_IMPL sha3/xkcp_sha3.c sha3/xkcp_sha3x4.c)
 endif()
 
+if ((OQS_LIBJADE_BUILD STREQUAL ON))
+    set(LIBJADE_RANDOMBYTES libjade_shims/libjade_randombytes.c)
+endif()
+
 add_library(common OBJECT ${AES_IMPL} aes/aes.c
                           ${SHA2_IMPL} sha2/sha2.c
                           ${SHA3_IMPL} sha3/sha3.c sha3/sha3x4.c
@@ -78,7 +82,7 @@ add_library(common OBJECT ${AES_IMPL} aes/aes.c
                           common.c
                           pqclean_shims/fips202.c
                           pqclean_shims/fips202x4.c
-                          libjade_shims/libjade_randombytes.c
+                          ${LIBJADE_RANDOMBYTES}
                           rand/rand.c)
 
 # Implementations of the internal API to be exposed to test programs
diff --git a/src/kem/kyber/kem_kyber_512.c b/src/kem/kyber/kem_kyber_512.c
index 74b6e39066..a1b52b0890 100644
--- a/src/kem/kyber/kem_kyber_512.c
+++ b/src/kem/kyber/kem_kyber_512.c
@@ -60,7 +60,7 @@ extern int libjade_kyber512_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8
 
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secret_key) {
-#if OQS_LIBJADE_BUILD
+#if defined(OQS_LIBJADE_BUILD) && (defined(OQS_ENABLE_LIBJADE_KEM_kyber_512))
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -84,7 +84,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secre
 #else
 	return (OQS_STATUS) libjade_kyber512_ref_keypair(public_key, secret_key);
 #endif
-#else /*OQS_LIBJADE_BUILD*/
+#else /*OQS_LIBJADE_BUILD && (OQS_ENABLE_LIBJADE_KEM_kyber_512)*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -112,7 +112,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secre
 }
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
-#if OQS_LIBJADE_BUILD
+#if defined(OQS_LIBJADE_BUILD) && (defined(OQS_ENABLE_LIBJADE_KEM_kyber_512))
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -136,7 +136,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared
 #else
 	return (OQS_STATUS) libjade_kyber512_ref_enc(ciphertext, shared_secret, public_key);
 #endif
-#else /*OQS_LIBJADE_BUILD*/
+#else /*OQS_LIBJADE_BUILD && (OQS_ENABLE_LIBJADE_KEM_kyber_512)*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -164,7 +164,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared
 }
 
 OQS_API OQS_STATUS OQS_KEM_kyber_512_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
-#if OQS_LIBJADE_BUILD
+#if defined(OQS_LIBJADE_BUILD) && (defined(OQS_ENABLE_LIBJADE_KEM_kyber_512))
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -188,7 +188,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_decaps(uint8_t *shared_secret, const uint8_
 #else
 	return (OQS_STATUS) libjade_kyber512_ref_dec(shared_secret, ciphertext, secret_key);
 #endif
-#else /*OQS_LIBJADE_BUILD*/
+#else /*OQS_LIBJADE_BUILD && (OQS_ENABLE_LIBJADE_KEM_kyber_512)*/
 #if defined(OQS_ENABLE_KEM_kyber_512_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
diff --git a/src/kem/kyber/kem_kyber_768.c b/src/kem/kyber/kem_kyber_768.c
index 80d1d170eb..0b1aae6896 100644
--- a/src/kem/kyber/kem_kyber_768.c
+++ b/src/kem/kyber/kem_kyber_768.c
@@ -60,7 +60,7 @@ extern int libjade_kyber768_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8
 
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secret_key) {
-#if OQS_LIBJADE_BUILD
+#if defined(OQS_LIBJADE_BUILD) && (defined(OQS_ENABLE_LIBJADE_KEM_kyber_768))
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -84,7 +84,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secre
 #else
 	return (OQS_STATUS) libjade_kyber768_ref_keypair(public_key, secret_key);
 #endif
-#else /*OQS_LIBJADE_BUILD*/
+#else /*OQS_LIBJADE_BUILD && (OQS_ENABLE_LIBJADE_KEM_kyber_768)*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -112,7 +112,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secre
 }
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
-#if OQS_LIBJADE_BUILD
+#if defined(OQS_LIBJADE_BUILD) && (defined(OQS_ENABLE_LIBJADE_KEM_kyber_768))
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -136,7 +136,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared
 #else
 	return (OQS_STATUS) libjade_kyber768_ref_enc(ciphertext, shared_secret, public_key);
 #endif
-#else /*OQS_LIBJADE_BUILD*/
+#else /*OQS_LIBJADE_BUILD && (OQS_ENABLE_LIBJADE_KEM_kyber_768)*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -164,7 +164,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared
 }
 
 OQS_API OQS_STATUS OQS_KEM_kyber_768_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
-#if OQS_LIBJADE_BUILD
+#if defined(OQS_LIBJADE_BUILD) && (defined(OQS_ENABLE_LIBJADE_KEM_kyber_768))
 #if defined(OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
@@ -188,7 +188,7 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_decaps(uint8_t *shared_secret, const uint8_
 #else
 	return (OQS_STATUS) libjade_kyber768_ref_dec(shared_secret, ciphertext, secret_key);
 #endif
-#else /*OQS_LIBJADE_BUILD*/
+#else /*OQS_LIBJADE_BUILD && (OQS_ENABLE_LIBJADE_KEM_kyber_768)*/
 #if defined(OQS_ENABLE_KEM_kyber_768_avx2)
 #if defined(OQS_DIST_BUILD)
 	if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
diff --git a/src/oqsconfig.h.cmake b/src/oqsconfig.h.cmake
index 0ed3a2741b..e506c8dc3d 100644
--- a/src/oqsconfig.h.cmake
+++ b/src/oqsconfig.h.cmake
@@ -193,11 +193,11 @@
 
 ///// OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ALG_ENABLE_DEFINES_START
 
-#cmakedefine OQS_LIBJADE_BUILD @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine01 OQS_LIBJADE_BUILD
 
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_KYBER @OQS_LIBJADE_BUILD_BIN@
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512 @OQS_LIBJADE_BUILD_BIN@
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2 @OQS_LIBJADE_BUILD_BIN@
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768 @OQS_LIBJADE_BUILD_BIN@
-#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2 @OQS_LIBJADE_BUILD_BIN@
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_KYBER 1
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512 1
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_512_avx2 1
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768 1
+#cmakedefine OQS_ENABLE_LIBJADE_KEM_kyber_768_avx2 1
 ///// OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ALG_ENABLE_DEFINES_END

From 54598adeaa17077410cce6f4972e85ccf9d2acf9 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 25 Apr 2024 04:35:14 +0200
Subject: [PATCH 67/82] initialize LIBJADE_RANDOMBYTES when
 OQS_LIBJADE_BUILD=OFF

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 src/common/CMakeLists.txt | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index c59c046613..c6920a824c 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -73,6 +73,8 @@ endif()
 
 if ((OQS_LIBJADE_BUILD STREQUAL ON))
     set(LIBJADE_RANDOMBYTES libjade_shims/libjade_randombytes.c)
+else()
+    set(LIBJADE_RANDOMBYTES "")
 endif()
 
 add_library(common OBJECT ${AES_IMPL} aes/aes.c

From 5b11e20e2edbe36c186b1821fbe16c99a482600d Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 25 Apr 2024 04:35:54 +0200
Subject: [PATCH 68/82] remove redundant comment

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/copy_from_libjade.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/scripts/copy_from_upstream/copy_from_libjade.yml b/scripts/copy_from_upstream/copy_from_libjade.yml
index 30571771b0..49ad9fb680 100644
--- a/scripts/copy_from_upstream/copy_from_libjade.yml
+++ b/scripts/copy_from_upstream/copy_from_libjade.yml
@@ -8,7 +8,6 @@ upstreams:
     name: libjade
     git_url: https://github.com/formosa-crypto/libjade.git
     git_branch: release/2023.05-1
-    # git_commit: release/2023.05-1
     git_commit: 555e23342471bea8544c356bdae230baf064ed56
     kem_meta_path: 'src/crypto_kem/{family}/{pqclean_scheme}/META.yml'
     kem_scheme_path: 'src/crypto_kem/{family}/{pqclean_scheme}'

From f5f64f31c224d3a120b7c149e868106d5a2dc168 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 25 Apr 2024 04:45:24 +0200
Subject: [PATCH 69/82] fix comment typo

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/copy_from_upstream.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index 676d228d29..f301e3c4f8 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -66,7 +66,7 @@ def shell(command, expect=0):
         raise Exception("'{}' failed with error {}. Expected {}.".format(" ".join(command), ret, expect))
 
 # Generate template from specified scheme to replace old file in 'copy' mode
-# but preserves additions made to file made in prior runs of 'libjade' mode 
+# but preserves additions made to file in prior runs of 'libjade' mode 
 def generator(destination_file_path, template_filename, delimiter, family, scheme_desired):
     template = file_get_contents(
         os.path.join(os.environ['LIBOQS_DIR'], 'scripts', 'copy_from_upstream', template_filename))

From b8cd0be9f108cb5daf322f50e74bc6ecc835fb34 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 25 Apr 2024 22:30:42 +0200
Subject: [PATCH 70/82] make string explicit when comparing with variable in
 cmake

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .CMake/alg_support.cmake                                      | 4 ++--
 .../.CMake/alg_support.cmake/add_enable_by_alg.libjade        | 2 +-
 .../alg_support.cmake/add_enable_by_alg_conditional.libjade   | 2 +-
 src/common/CMakeLists.txt                                     | 2 +-
 4 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.CMake/alg_support.cmake b/.CMake/alg_support.cmake
index 1d6e8f9531..d6d4dd6df6 100644
--- a/.CMake/alg_support.cmake
+++ b/.CMake/alg_support.cmake
@@ -169,7 +169,7 @@ cmake_dependent_option(OQS_ENABLE_SIG_sphincs_shake_256s_simple "" ON "OQS_ENABL
 ##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ENABLE_BY_ALG_END
 
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_START
-if ((OQS_LIBJADE_BUILD STREQUAL ON))
+if ((OQS_LIBJADE_BUILD STREQUAL "ON"))
 
 option(OQS_ENABLE_LIBJADE_KEM_KYBER "Enable libjade implementation of kyber algorithm family" ON)
 cmake_dependent_option(OQS_ENABLE_LIBJADE_KEM_kyber_512 "" ON "OQS_ENABLE_LIBJADE_KEM_KYBER" OFF)
@@ -507,7 +507,7 @@ endif()
 ##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ENABLE_BY_ALG_CONDITIONAL_END
 
 ##### OQS_COPY_FROM_LIBJADE_FRAGMENT_ADD_ENABLE_BY_ALG_CONDITIONAL_START
-if ((OQS_LIBJADE_BUILD STREQUAL ON))
+if ((OQS_LIBJADE_BUILD STREQUAL "ON"))
 
 if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
 if(OQS_DIST_X86_64_BUILD OR (OQS_USE_AVX2_INSTRUCTIONS AND OQS_USE_BMI2_INSTRUCTIONS AND OQS_USE_POPCNT_INSTRUCTIONS))
diff --git a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
index 31cc171b1a..8d0af0aa57 100644
--- a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
+++ b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg.libjade
@@ -1,5 +1,5 @@
 
-if ((OQS_LIBJADE_BUILD STREQUAL ON))
+if ((OQS_LIBJADE_BUILD STREQUAL "ON"))
 {% for family in instructions['kems'] %}
 option(OQS_ENABLE_LIBJADE_KEM_{{ family['name']|upper }} "Enable libjade implementation of {{ family['name'] }} algorithm family" ON)
     {%- for scheme in family['schemes'] %}
diff --git a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
index e932276a44..82da652df2 100644
--- a/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
+++ b/scripts/copy_from_upstream/.CMake/alg_support.cmake/add_enable_by_alg_conditional.libjade
@@ -1,5 +1,5 @@
 
-if ((OQS_LIBJADE_BUILD STREQUAL ON))
+if ((OQS_LIBJADE_BUILD STREQUAL "ON"))
 {% for family in instructions['kems'] %}
     {%- for scheme in family['schemes'] %}
         {%- for impl in scheme['metadata']['implementations'] if impl['name'] != family['default_implementation'] and impl['supported_platforms'] -%}
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index c6920a824c..601beae438 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -71,7 +71,7 @@ else() # using XKCP
     set(SHA3_IMPL sha3/xkcp_sha3.c sha3/xkcp_sha3x4.c)
 endif()
 
-if ((OQS_LIBJADE_BUILD STREQUAL ON))
+if ((OQS_LIBJADE_BUILD STREQUAL "ON"))
     set(LIBJADE_RANDOMBYTES libjade_shims/libjade_randombytes.c)
 else()
     set(LIBJADE_RANDOMBYTES "")

From efb20eba9398ad8320e58195ca44e1d466de77ef Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 25 Apr 2024 22:33:28 +0200
Subject: [PATCH 71/82] add libjade kyber licensing to README.md

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 53ef332e24..8a1900c8a5 100644
--- a/README.md
+++ b/README.md
@@ -188,6 +188,7 @@ liboqs includes some third party libraries or modules that are licensed differen
 - `src/kem/classic_mceliece/pqclean_*`: public domain
 - `src/kem/kyber/pqcrystals-*`: public domain (CC0) or Apache License v2.0
 - `src/kem/kyber/pqclean_*`: public domain (CC0), and public domain (CC0) or Apache License v2.0, and public domain (CC0) or MIT, and MIT
+- `src/kem/kyber/libjade_*` public domain (CC0)
 - `src/kem/ml_kem/pqcrystals-*`: public domain (CC0) or Apache License v2.0
 - `src/sig/dilithium/pqcrystals-*`: public domain (CC0) or Apache License v2.0
 - `src/sig/dilithium/pqclean_*`: public domain (CC0), and public domain (CC0) or Apache License v2.0, and public domain (CC0) or MIT, and MIT

From 2107194e53be07030058bffc4f63f3fdfd370c0c Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 25 Apr 2024 22:57:49 +0200
Subject: [PATCH 72/82] remove reference to oldpqclean_kyber* code from libjade
 if branchin kem_kyber_*.c

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 CMakeLists.txt                                |  8 ++---
 CONFIGURE.md                                  |  2 ++
 .../src/kem/family/kem_scheme.c               |  6 ++--
 src/kem/kyber/kem_kyber_512.c                 | 30 -------------------
 src/kem/kyber/kem_kyber_768.c                 | 30 -------------------
 5 files changed, 9 insertions(+), 67 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index be0dd1836a..07ac90bf10 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,10 +30,6 @@ option(OQS_EMBEDDED_BUILD "Compile liboqs for an Embedded environment without a
 
 set(OQS_OPT_TARGET auto CACHE STRING "The target microarchitecture for optimization.")
 
-if (NOT (CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin") AND (OQS_LIBJADE_BUILD STREQUAL ON))
-    message(FATAL_ERROR "Building liboqs with libjade implementations from libjade is only supported on Linux and Darwin.")
-endif()
-
 set(CMAKE_C_STANDARD 11)
 set(CMAKE_C_STANDARD_REQUIRED ON)
 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
@@ -100,6 +96,10 @@ else()
     message(FATAL_ERROR "Unknown or unsupported processor: " ${CMAKE_SYSTEM_PROCESSOR} ". Override by setting OQS_PERMIT_UNSUPPORTED_ARCHITECTURE=ON")
 endif()
 
+if (NOT (CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin") AND (OQS_LIBJADE_BUILD STREQUAL ON) AND (ARCH_X86_64 STREQUAL "ON"))
+    message(FATAL_ERROR "Building liboqs with libjade implementations from libjade is only supported on Linux and Darwin on x86_64.")
+endif()
+
 # intentionally don't switch to variables to avoid --warn-uninitialized report
 if(OQS_USE_CPU_EXTENSIONS)
     message(FATAL_ERROR "OQS_USE_CPU_EXTENSIONS is deprecated")
diff --git a/CONFIGURE.md b/CONFIGURE.md
index aad4887ea9..76165eb853 100644
--- a/CONFIGURE.md
+++ b/CONFIGURE.md
@@ -183,6 +183,8 @@ Can be `ON` or `OFF`. When `ON` liboqs is built to use high assurance implementa
 
 At the moment, Libjade only provides Kyber512 and Kyber768 KEMs. 
 
+At the moment, libjade only supports Linux and Darwin based operating systems on x86_64 platforms.
+
 **Default** `OFF`.
 
 ## OQS_ENABLE_LIBJADE_KEM_ALG/OQS_ENABLE_LIBJADE_SIG_ALG
diff --git a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
index 855f8139f0..2560d17942 100644
--- a/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
+++ b/scripts/copy_from_upstream/src/kem/family/kem_scheme.c
@@ -132,7 +132,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_keypair(uint8_t *
 {%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
 #if defined(OQS_LIBJADE_BUILD) && (defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}){%- endif %})
 {%- for scheme in schemes %}
-    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] and impl['name'] in scheme['libjade_implementations'] %}
         {%- if loop.first %}
 #if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
         {%- else %}
@@ -206,7 +206,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_encaps(uint8_t *c
 {%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
 #if defined(OQS_LIBJADE_BUILD) && (defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}){%- endif %})
 {%- for scheme in schemes %}
-    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] and impl['name'] in scheme['libjade_implementations'] %}
         {%- if loop.first %}
 #if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
         {%- else %}
@@ -280,7 +280,7 @@ OQS_API OQS_STATUS OQS_KEM_{{ family }}_{{ scheme['scheme'] }}_decaps(uint8_t *s
 {%- if libjade_implementation is defined and scheme['libjade_implementation'] %}
 #if defined(OQS_LIBJADE_BUILD) && (defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['scheme'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_LIBJADE_KEM_{{ family }}_{{ scheme['alias_scheme'] }}){%- endif %})
 {%- for scheme in schemes %}
-    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] %}
+    {%- for impl in scheme['metadata']['implementations'] if impl['name'] != scheme['default_implementation'] and impl['name'] in scheme['libjade_implementations'] %}
         {%- if loop.first %}
 #if defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['scheme'] }}_{{ impl['name'] }}) {%- if 'alias_scheme' in scheme %} || defined(OQS_ENABLE_{%- if impl['name'] in scheme['libjade_implementations'] %}LIBJADE_{%- endif %}KEM_{{ family }}_{{ scheme['alias_scheme'] }}_{{ impl['name'] }}){%- endif %}
         {%- else %}
diff --git a/src/kem/kyber/kem_kyber_512.c b/src/kem/kyber/kem_kyber_512.c
index a1b52b0890..e2b870713d 100644
--- a/src/kem/kyber/kem_kyber_512.c
+++ b/src/kem/kyber/kem_kyber_512.c
@@ -71,16 +71,6 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_keypair(uint8_t *public_key, uint8_t *secre
 		return (OQS_STATUS) libjade_kyber512_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
-#if defined(OQS_DIST_BUILD)
-	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
-#endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_keypair(public_key, secret_key);
-#if defined(OQS_DIST_BUILD)
-	} else {
-		return (OQS_STATUS) libjade_kyber512_ref_keypair(public_key, secret_key);
-	}
-#endif /* OQS_DIST_BUILD */
 #else
 	return (OQS_STATUS) libjade_kyber512_ref_keypair(public_key, secret_key);
 #endif
@@ -123,16 +113,6 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_encaps(uint8_t *ciphertext, uint8_t *shared
 		return (OQS_STATUS) libjade_kyber512_ref_enc(ciphertext, shared_secret, public_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
-#if defined(OQS_DIST_BUILD)
-	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
-#endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_enc(ciphertext, shared_secret, public_key);
-#if defined(OQS_DIST_BUILD)
-	} else {
-		return (OQS_STATUS) libjade_kyber512_ref_enc(ciphertext, shared_secret, public_key);
-	}
-#endif /* OQS_DIST_BUILD */
 #else
 	return (OQS_STATUS) libjade_kyber512_ref_enc(ciphertext, shared_secret, public_key);
 #endif
@@ -175,16 +155,6 @@ OQS_API OQS_STATUS OQS_KEM_kyber_512_decaps(uint8_t *shared_secret, const uint8_
 		return (OQS_STATUS) libjade_kyber512_ref_dec(shared_secret, ciphertext, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_512_aarch64)
-#if defined(OQS_DIST_BUILD)
-	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
-#endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) PQCLEAN_KYBER512_AARCH64_crypto_kem_dec(shared_secret, ciphertext, secret_key);
-#if defined(OQS_DIST_BUILD)
-	} else {
-		return (OQS_STATUS) libjade_kyber512_ref_dec(shared_secret, ciphertext, secret_key);
-	}
-#endif /* OQS_DIST_BUILD */
 #else
 	return (OQS_STATUS) libjade_kyber512_ref_dec(shared_secret, ciphertext, secret_key);
 #endif
diff --git a/src/kem/kyber/kem_kyber_768.c b/src/kem/kyber/kem_kyber_768.c
index 0b1aae6896..d1b792b5ce 100644
--- a/src/kem/kyber/kem_kyber_768.c
+++ b/src/kem/kyber/kem_kyber_768.c
@@ -71,16 +71,6 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_keypair(uint8_t *public_key, uint8_t *secre
 		return (OQS_STATUS) libjade_kyber768_ref_keypair(public_key, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
-#if defined(OQS_DIST_BUILD)
-	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
-#endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_keypair(public_key, secret_key);
-#if defined(OQS_DIST_BUILD)
-	} else {
-		return (OQS_STATUS) libjade_kyber768_ref_keypair(public_key, secret_key);
-	}
-#endif /* OQS_DIST_BUILD */
 #else
 	return (OQS_STATUS) libjade_kyber768_ref_keypair(public_key, secret_key);
 #endif
@@ -123,16 +113,6 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_encaps(uint8_t *ciphertext, uint8_t *shared
 		return (OQS_STATUS) libjade_kyber768_ref_enc(ciphertext, shared_secret, public_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
-#if defined(OQS_DIST_BUILD)
-	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
-#endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_enc(ciphertext, shared_secret, public_key);
-#if defined(OQS_DIST_BUILD)
-	} else {
-		return (OQS_STATUS) libjade_kyber768_ref_enc(ciphertext, shared_secret, public_key);
-	}
-#endif /* OQS_DIST_BUILD */
 #else
 	return (OQS_STATUS) libjade_kyber768_ref_enc(ciphertext, shared_secret, public_key);
 #endif
@@ -175,16 +155,6 @@ OQS_API OQS_STATUS OQS_KEM_kyber_768_decaps(uint8_t *shared_secret, const uint8_
 		return (OQS_STATUS) libjade_kyber768_ref_dec(shared_secret, ciphertext, secret_key);
 	}
 #endif /* OQS_DIST_BUILD */
-#elif defined(OQS_ENABLE_KEM_kyber_768_aarch64)
-#if defined(OQS_DIST_BUILD)
-	if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) {
-#endif /* OQS_DIST_BUILD */
-		return (OQS_STATUS) PQCLEAN_KYBER768_AARCH64_crypto_kem_dec(shared_secret, ciphertext, secret_key);
-#if defined(OQS_DIST_BUILD)
-	} else {
-		return (OQS_STATUS) libjade_kyber768_ref_dec(shared_secret, ciphertext, secret_key);
-	}
-#endif /* OQS_DIST_BUILD */
 #else
 	return (OQS_STATUS) libjade_kyber768_ref_dec(shared_secret, ciphertext, secret_key);
 #endif

From ad8d626d168babcb3fc3c8ab7edd49b60b24fa40 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 25 Apr 2024 22:18:07 -0400
Subject: [PATCH 73/82] Update CMakeLists.txt

Co-authored-by: Spencer Wilson <spencer.wilson@uwaterloo.ca>
Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 07ac90bf10..be65d9cd83 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -96,7 +96,7 @@ else()
     message(FATAL_ERROR "Unknown or unsupported processor: " ${CMAKE_SYSTEM_PROCESSOR} ". Override by setting OQS_PERMIT_UNSUPPORTED_ARCHITECTURE=ON")
 endif()
 
-if (NOT (CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin") AND (OQS_LIBJADE_BUILD STREQUAL ON) AND (ARCH_X86_64 STREQUAL "ON"))
+if (NOT ((CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin") AND (ARCH_X86_64 STREQUAL "ON")) AND (OQS_LIBJADE_BUILD STREQUAL "ON"))
     message(FATAL_ERROR "Building liboqs with libjade implementations from libjade is only supported on Linux and Darwin on x86_64.")
 endif()
 

From 7d92d32cdd1d3c877218d97eda74393c884b94db Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 16 May 2024 20:51:17 +0200
Subject: [PATCH 74/82] track jasminc version in copy_from_libjade.yml; check
 jasminc version in copy_from_upstream.py

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 scripts/copy_from_upstream/copy_from_libjade.yml | 1 +
 scripts/copy_from_upstream/copy_from_upstream.py | 9 +++++++++
 2 files changed, 10 insertions(+)

diff --git a/scripts/copy_from_upstream/copy_from_libjade.yml b/scripts/copy_from_upstream/copy_from_libjade.yml
index 49ad9fb680..3d35e0c37d 100644
--- a/scripts/copy_from_upstream/copy_from_libjade.yml
+++ b/scripts/copy_from_upstream/copy_from_libjade.yml
@@ -3,6 +3,7 @@
 # must updated for the relevant algorithm in copy_from_upstream.yml
 # Additionaly, the algorithm name must be appended to env.LIBJADE_ALG_LIST
 # in the unix.yml and weekly.yml GitHub Actions workflows
+jasmin_version: '2023.06.3'
 upstreams:
   -
     name: libjade
diff --git a/scripts/copy_from_upstream/copy_from_upstream.py b/scripts/copy_from_upstream/copy_from_upstream.py
index f301e3c4f8..0339e4c1f1 100755
--- a/scripts/copy_from_upstream/copy_from_upstream.py
+++ b/scripts/copy_from_upstream/copy_from_upstream.py
@@ -151,6 +151,15 @@ def load_instructions(file):
             shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'fetch', '--depth=1', 'origin', upstream_git_commit])
         shell(['git', '--git-dir', work_dotgit, '--work-tree', work_dir, 'reset', '--hard', upstream_git_commit])
         if file == 'copy_from_libjade.yml':
+            try:
+                version = subprocess.run(['jasminc', '-version'], capture_output=True).stdout.decode('utf-8').strip().split(' ')[-1]
+                if version != instructions['jasmin_version']:
+                    print('Expected Jasmin compiler version {}; got version {}.'.format(instructions['jasmin_version'], version))
+                    print('Must use Jasmin complier version {} or update copy_from_libjade.yml.'.format(instructions['jasmin_version']))
+                    exit(1)
+            except FileNotFoundError:
+                print('Jasmin compiler not found; must add `jasminc` to PATH.')
+                exit(1)
             shell(['make', '-C', os.path.join(work_dir, 'src')])
         if 'patches' in upstream:
             for patch in upstream['patches']:

From d27901f4f701206e71612b5956ff327f2d8e1de3 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Thu, 16 May 2024 21:23:25 +0200
Subject: [PATCH 75/82] add OQS_LIBJADE_BUILD to build flags output

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 tests/system_info.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tests/system_info.c b/tests/system_info.c
index 0b217d1eeb..248d377cd8 100644
--- a/tests/system_info.c
+++ b/tests/system_info.c
@@ -263,6 +263,9 @@ static void print_oqs_configuration(void) {
 #ifdef OQS_DIST_BUILD
 	printf("OQS_DIST_BUILD ");
 #endif
+#ifdef OQS_LIBJADE_BUILD
+	printf("OQS_LIBJADE_BUILD ");
+#endif
 #ifdef OQS_BUILD_ONLY_LIB
 	printf("OQS_BUILD_ONLY_LIB "); // pretty much impossible to appear but added for completeness
 #endif

From 37966957ca0d11deefe2ce2240d2f3eceb93630f Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Fri, 24 May 2024 23:01:03 +0200
Subject: [PATCH 76/82] remove link from CONFIGURE.md

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 CONFIGURE.md   | 2 +-
 docs/.Doxyfile | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/CONFIGURE.md b/CONFIGURE.md
index 76165eb853..c19959d320 100644
--- a/CONFIGURE.md
+++ b/CONFIGURE.md
@@ -191,4 +191,4 @@ At the moment, libjade only supports Linux and Darwin based operating systems on
 
 Note: `ALG` in `OQS_ENABLE_LIBJADE_KEM_ALG/OQS_ENABLE_LIBJADE_SIG_ALG` should be replaced with the specific algorithm name as demonstrated in [OQS_ENABLE_KEM_ALG/OQS_ENABLE_SIG_ALG](#OQS_ENABLE_KEM_ALG/OQS_ENABLE_SIG_ALG).
 
-**Default**: `OFF` if [OQS_LIBJADE_BUILD](#OQS_LIBJADE_BUILD) is `OFF` else unset.
\ No newline at end of file
+**Default**: `OFF` if OQS_LIBJADE_BUILD is `OFF` else unset.
\ No newline at end of file
diff --git a/docs/.Doxyfile b/docs/.Doxyfile
index 5401ab9851..258ce14b52 100644
--- a/docs/.Doxyfile
+++ b/docs/.Doxyfile
@@ -378,7 +378,7 @@ TOC_INCLUDE_HEADINGS   = 0
 # The default value is: DOXYGEN.
 # This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
 
-MARKDOWN_ID_STYLE      = DOXYGEN
+MARKDOWN_ID_STYLE      = GITHUB
 
 # When enabled doxygen tries to link words that correspond to documented
 # classes, or namespaces to their corresponding documentation. Such a link can

From 597c78a64b6d7441d047afd045d232f4d7dec535 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 16 Jul 2024 17:23:06 +0200
Subject: [PATCH 77/82] Update libjade to dual license

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 docs/algorithms/kem/kyber.md                     | 4 ++--
 docs/algorithms/kem/kyber.yml                    | 4 ++--
 scripts/copy_from_upstream/copy_from_libjade.yml | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/docs/algorithms/kem/kyber.md b/docs/algorithms/kem/kyber.md
index d2cbbaef06..c065a95e16 100644
--- a/docs/algorithms/kem/kyber.md
+++ b/docs/algorithms/kem/kyber.md
@@ -15,8 +15,8 @@
       - **Implementation license (SPDX-Identifier)**: CC0-1.0 and (CC0-1.0 or Apache-2.0) and (CC0-1.0 or MIT) and MIT
 - **Formally-verified Implementation sources**: 
   - **libjade**:<a name="libjade"></a>
-      - **Source**: https://github.com/formosa-crypto/libjade/tree/release/2023.05-1 with copy_from_upstream patches
-      - **Implementation license (SPDX-Identifier)**: CC0-1.0
+      - **Source**: https://github.com/formosa-crypto/libjade/tree/release/2023.05-2 with copy_from_upstream patches
+      - **Implementation license (SPDX-Identifier)**: CC0-1.0 OR Apache-2.0
 
 
 ## Parameter set summary
diff --git a/docs/algorithms/kem/kyber.yml b/docs/algorithms/kem/kyber.yml
index 0da8c542d9..522852643d 100644
--- a/docs/algorithms/kem/kyber.yml
+++ b/docs/algorithms/kem/kyber.yml
@@ -28,9 +28,9 @@ optimized-upstreams:
       and MIT
 formally-verified-upstreams:
   libjade:
-    source: https://github.com/formosa-crypto/libjade/tree/release/2023.05-1 with
+    source: https://github.com/formosa-crypto/libjade/tree/release/2023.05-2 with
       copy_from_upstream patches
-    spdx-license-identifier: CC0-1.0
+    spdx-license-identifier: CC0-1.0 OR Apache-2.0
 parameter-sets:
 - name: Kyber512
   claimed-nist-level: 1
diff --git a/scripts/copy_from_upstream/copy_from_libjade.yml b/scripts/copy_from_upstream/copy_from_libjade.yml
index 3d35e0c37d..620949c399 100644
--- a/scripts/copy_from_upstream/copy_from_libjade.yml
+++ b/scripts/copy_from_upstream/copy_from_libjade.yml
@@ -8,8 +8,8 @@ upstreams:
   -
     name: libjade
     git_url: https://github.com/formosa-crypto/libjade.git
-    git_branch: release/2023.05-1
-    git_commit: 555e23342471bea8544c356bdae230baf064ed56
+    git_branch: release/2023.05-2
+    git_commit: 4e15c1d221d025deca40edef2c762be9e3d346b7
     kem_meta_path: 'src/crypto_kem/{family}/{pqclean_scheme}/META.yml'
     kem_scheme_path: 'src/crypto_kem/{family}/{pqclean_scheme}'
     patches: ['libjade-kyber-api.patch', 'libjade-kyber-meta.patch']

From 14dcca7e71ad80ae0e15898189d64cf63a9f64c4 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 16 Jul 2024 19:13:13 +0200
Subject: [PATCH 78/82] Patch gcc version for MacOS CI runs

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 .github/workflows/unix.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.github/workflows/unix.yml b/.github/workflows/unix.yml
index 2c4b368a4f..15f212f59c 100644
--- a/.github/workflows/unix.yml
+++ b/.github/workflows/unix.yml
@@ -245,6 +245,8 @@ jobs:
         uses: actions/checkout@v4
       - name: Install dependencies
         run: env HOMEBREW_NO_AUTO_UPDATE=1 brew install ninja && pip3 install --break-system-packages pytest pytest-xdist pyyaml
+      - name: Patch GCC 
+        run: env HOMEBREW_NO_AUTO_UPDATE=1 brew uninstall --ignore-dependencies gcc@13 && wget https://raw.githubusercontent.com/Homebrew/homebrew-core/eb6dd225d093b66054e18e07d56509cf670793b1/Formula/g/gcc%4013.rb && env HOMEBREW_NO_AUTO_UPDATE=1 brew install --ignore-dependencies gcc@13.rb
       - name: Get system information
         run: sysctl -a | grep machdep.cpu
       - name: Configure

From 1b17ad94a835dc85f0310c4341ca6f93f6d23457 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Tue, 16 Jul 2024 22:09:35 +0200
Subject: [PATCH 79/82] Fix doc generation

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 CONFIGURE.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/CONFIGURE.md b/CONFIGURE.md
index 5363e85021..914a5c5e4f 100644
--- a/CONFIGURE.md
+++ b/CONFIGURE.md
@@ -20,7 +20,7 @@ The following options can be passed to CMake before the build file generation pr
 - [OQS_STRICT_WARNINGS](#OQS_STRICT_WARNINGS)
 - [OQS_EMBEDDED_BUILD](#OQS_EMBEDDED_BUILD)
 - [OQS_LIBJADE_BUILD](#OQS_LIBJADE_BUILD)
-- [OQS_ENABLE_LIBJADE_KEM_ALG/OQS_ENABLE_LIBJADE_SIG_ALG](#OQS_ENABLE_KEM_ALG/OQS_ENABLE_SIG_ALG)
+- [OQS_ENABLE_LIBJADE_KEM_ALG/OQS_ENABLE_LIBJADE_SIG_ALG](#OQS_ENABLE_LIBJADE_KEM_ALG/OQS_ENABLE_LIBJADE_SIG_ALG)
 
 ## BUILD_SHARED_LIBS
 
@@ -212,6 +212,6 @@ At the moment, libjade only supports Linux and Darwin based operating systems on
 
 ## OQS_ENABLE_LIBJADE_KEM_ALG/OQS_ENABLE_LIBJADE_SIG_ALG
 
-Note: `ALG` in `OQS_ENABLE_LIBJADE_KEM_ALG/OQS_ENABLE_LIBJADE_SIG_ALG` should be replaced with the specific algorithm name as demonstrated in [OQS_ENABLE_KEM_ALG/OQS_ENABLE_SIG_ALG](#OQS_ENABLE_KEM_ALG/OQS_ENABLE_SIG_ALG).
+Note: `ALG` in `OQS_ENABLE_LIBJADE_KEM_ALG/OQS_ENABLE_LIBJADE_SIG_ALG` should be replaced with the specific algorithm name as demonstrated in OQS_ENABLE_KEM_ALG/OQS_ENABLE_SIG_ALG.
 
 **Default**: `OFF` if OQS_LIBJADE_BUILD is `OFF` else unset.
\ No newline at end of file

From bb888d2728852ad2c841b0cd5386a37d12ecf5ce Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Wed, 17 Jul 2024 22:31:09 +0200
Subject: [PATCH 80/82] Fix libjade docs

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 CONFIGURE.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CONFIGURE.md b/CONFIGURE.md
index 914a5c5e4f..becb4a8834 100644
--- a/CONFIGURE.md
+++ b/CONFIGURE.md
@@ -202,7 +202,7 @@ At the moment, this is **only** considered for random number generation, as both
 **Default**: `OFF`.
 
 ## OQS_LIBJADE_BUILD
-Can be `ON` or `OFF`. When `ON` liboqs is built to use high assurance implementations of cryptographic algorithms from [Libjade](https://github.com/formosa-crypto/libjade). The cryptographic primitives in Libjade are written using [Jasmin](https://github.com/jasmin-lang/jasmin) and built using the Jasmin compiler. The Jasmin compiler is proven (in Coq) to preserve semantic correctness of a program, maintain secret-independence of control flow, and maintain secret independence of locations of memory access through compilation. Additionaly, the Jasmin compiler guarantees thread safety because Jasmin doesn't support global variables (with the caveat that the caller respects the function's contract). 
+Can be `ON` or `OFF`. When `ON` liboqs is built to use high assurance implementations of cryptographic algorithms from [Libjade](https://github.com/formosa-crypto/libjade). The cryptographic primitives in Libjade are written using [Jasmin](https://github.com/jasmin-lang/jasmin) and built using the Jasmin compiler. The Jasmin compiler is proven (in Coq) to preserve semantic correctness of a program, maintain secret-independence of control flow, and maintain secret independence of locations of memory access through compilation. Additionally, the Jasmin compiler guarantees thread safety because Jasmin doesn't support global variables. 
 
 At the moment, Libjade only provides Kyber512 and Kyber768 KEMs. 
 

From 6eeeb5375e039e965e3a88ca7ed29a410eae431b Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Sun, 11 Aug 2024 17:26:28 +0200
Subject: [PATCH 81/82] fix license info in README.md

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index a25ae93789..979c0c8a00 100644
--- a/README.md
+++ b/README.md
@@ -194,7 +194,7 @@ liboqs includes some third party libraries or modules that are licensed differen
 - `src/kem/classic_mceliece/pqclean_*`: public domain
 - `src/kem/kyber/pqcrystals-*`: public domain (CC0) or Apache License v2.0
 - `src/kem/kyber/pqclean_*`: public domain (CC0), and public domain (CC0) or Apache License v2.0, and public domain (CC0) or MIT, and MIT
-- `src/kem/kyber/libjade_*` public domain (CC0)
+- `src/kem/kyber/libjade_*` public domain (CC0) or Apache License v2.
 - `src/kem/ml_kem/pqcrystals-*`: public domain (CC0) or Apache License v2.0
 - `src/sig/dilithium/pqcrystals-*`: public domain (CC0) or Apache License v2.0
 - `src/sig/dilithium/pqclean_*`: public domain (CC0), and public domain (CC0) or Apache License v2.0, and public domain (CC0) or MIT, and MIT

From b1c4950d572f839b6f80f20b84a9d9099a7f9f93 Mon Sep 17 00:00:00 2001
From: Pravek Sharma <sharmapravek@gmail.com>
Date: Fri, 16 Aug 2024 19:20:47 +0200
Subject: [PATCH 82/82] update libjade_randombytes spdx-license

Signed-off-by: Pravek Sharma <sharmapravek@gmail.com>
---
 src/common/libjade_shims/libjade_randombytes.c | 2 +-
 src/common/libjade_shims/libjade_randombytes.h | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/common/libjade_shims/libjade_randombytes.c b/src/common/libjade_shims/libjade_randombytes.c
index c80e61a6b5..84a0102d33 100644
--- a/src/common/libjade_shims/libjade_randombytes.c
+++ b/src/common/libjade_shims/libjade_randombytes.c
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: CC0-1.0
+// SPDX-License-Identifier: Apache-2.0 OR CC0-1.0
 
 #if defined(__unix__) || defined(__APPLE__)
 #include <oqs/rand.h>
diff --git a/src/common/libjade_shims/libjade_randombytes.h b/src/common/libjade_shims/libjade_randombytes.h
index 591fbd893d..9b6dd62c65 100644
--- a/src/common/libjade_shims/libjade_randombytes.h
+++ b/src/common/libjade_shims/libjade_randombytes.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: CC0-1.0
+// SPDX-License-Identifier: Apache-2.0 OR CC0-1.0
 
 #if defined(__unix__) || defined(__APPLE__)
 #ifndef LIBJADE_RANDOMBYTES_H