]> git.ipfire.org Git - people/ms/suricata.git/commitdiff
Remove all cuda related code in the engine except for the cuda api wrappers
authorAnoop Saldanha <anoopsaldanha@gmail.com>
Thu, 15 Nov 2012 07:54:29 +0000 (13:24 +0530)
committerVictor Julien <victor@inliniac.net>
Fri, 21 Jun 2013 13:15:12 +0000 (15:15 +0200)
32 files changed:
src/Makefile.am
src/alert-fastlog.c
src/alert-pcapinfo.c
src/app-layer-detect-proto.c
src/cuda-packet-batcher.c [deleted file]
src/cuda-packet-batcher.h [deleted file]
src/cuda-ptxdump.h [deleted file]
src/decode.h
src/detect-engine-mpm.c
src/detect.c
src/detect.h
src/log-droplog.c
src/runmode-af-packet.c
src/runmode-erf-dag.c
src/runmode-erf-file.c
src/runmode-ipfw.c
src/runmode-nfq.c
src/runmode-pcap-file.c
src/runmode-pcap.c
src/runmode-pfring.c
src/runmode-unix-socket.c
src/runmodes.c
src/suricata.c
src/tm-modules.c
src/tm-threads-common.h
src/util-cuda-handlers.c [deleted file]
src/util-cuda-handlers.h [deleted file]
src/util-mpm-b2g-cuda.c [deleted file]
src/util-mpm-b2g-cuda.h [deleted file]
src/util-mpm.c
src/util-mpm.h
src/util-runmodes.c

index 6b5065739724ca67ea41d2dbde565966326cdc65..e2f1e71ca9ce5867c756db26e3bc65f26039ac6d 100644 (file)
@@ -32,7 +32,6 @@ app-layer-tls-handshake.c app-layer-tls-handshake.h \
 conf.c conf.h \
 conf-yaml-loader.c conf-yaml-loader.h \
 counters.c counters.h \
-cuda-packet-batcher.c cuda-packet-batcher.h \
 data-queue.c data-queue.h \
 decode.c decode.h \
 decode-ethernet.c decode-ethernet.h \
@@ -257,7 +256,6 @@ util-coredump-config.c util-coredump-config.h \
 util-cpu.c util-cpu.h \
 util-crypt.c util-crypt.h \
 util-cuda.c util-cuda.h \
-util-cuda-handlers.c util-cuda-handlers.h \
 util-daemon.c util-daemon.h \
 util-debug.c util-debug.h \
 util-debug-filters.c util-debug-filters.h \
@@ -284,7 +282,6 @@ util-mpm-ac-bs.c util-mpm-ac-bs.h \
 util-mpm-ac.c util-mpm-ac.h \
 util-mpm-ac-gfbs.c util-mpm-ac-gfbs.h \
 util-mpm-b2gc.c util-mpm-b2gc.h \
-util-mpm-b2g-cuda.c util-mpm-b2g-cuda.h \
 util-mpm-b2g.c util-mpm-b2g.h \
 util-mpm-b2gm.c util-mpm-b2gm.h \
 util-mpm-b3g.c util-mpm-b3g.h \
index 9628186d0a1a48d7b13bf9dc463c35d43a39cc6f..987a4583b899526f2bd33eb48f65cef711f21061 100644 (file)
@@ -51,8 +51,6 @@
 #include "output.h"
 #include "alert-fastlog.h"
 
-#include "util-mpm-b2g-cuda.h"
-#include "util-cuda-handlers.h"
 #include "util-privs.h"
 #include "util-print.h"
 #include "util-proto-name.h"
@@ -398,14 +396,6 @@ int AlertFastLogTest01()
     else
         result = 0;
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadRC();
-    if (SCCudaHlPushCudaContextFromModule("SC_RULES_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     SigGroupCleanup(de_ctx);
     SigCleanSignatures(de_ctx);
     DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx);
@@ -464,14 +454,6 @@ int AlertFastLogTest02()
         result = 0;
     }
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadRC();
-    if (SCCudaHlPushCudaContextFromModule("SC_RULES_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     SigGroupCleanup(de_ctx);
     SigCleanSignatures(de_ctx);
     DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx);
@@ -491,19 +473,9 @@ void AlertFastLogRegisterTests(void)
 
 #ifdef UNITTESTS
 
-#ifdef __SC_CUDA_SUPPORT__
-    UtRegisterTest("AlertFastLogCudaContextInit",
-            SCCudaHlTestEnvCudaContextInit, 1);
-#endif
-
     UtRegisterTest("AlertFastLogTest01", AlertFastLogTest01, 1);
     UtRegisterTest("AlertFastLogTest02", AlertFastLogTest02, 1);
 
-#ifdef __SC_CUDA_SUPPORT__
-    UtRegisterTest("AlertFastLogCudaContextDeInit",
-            SCCudaHlTestEnvCudaContextDeInit, 1);
-#endif
-
 #endif /* UNITTESTS */
 
 }
index ec68262e694ae1a4ac44028d2c7e374438cd9a86..e24296003f2a03f485ed962057e8e24dd85feb13 100644 (file)
@@ -53,8 +53,6 @@
 #include "output.h"
 #include "alert-pcapinfo.h"
 
-#include "util-mpm-b2g-cuda.h"
-#include "util-cuda-handlers.h"
 #include "util-privs.h"
 #include "util-print.h"
 #include "util-proto-name.h"
index 03ee632e0f0439322a0f8da7c7542a6a9ed9e8a0..ee78ae451975cd83017de4209a84e1962b9e1dee 100644 (file)
 
 #include "util-spm.h"
 #include "util-cuda.h"
-#include "util-cuda-handlers.h"
-#include "util-mpm-b2g-cuda.h"
 #include "util-debug.h"
 
 #define INSPECT_BYTES  32
 
-/* undef __SC_CUDA_SUPPORT__.  We will get back to this later.  Need to
- * analyze the performance of cuda support for app layer */
-#undef __SC_CUDA_SUPPORT__
-
 /** global app layer detection context */
 AlpProtoDetectCtx alp_proto_ctx;
 
@@ -77,14 +71,8 @@ AlpProtoDetectCtx alp_proto_ctx;
 void AlpProtoInit(AlpProtoDetectCtx *ctx) {
     memset(ctx, 0x00, sizeof(AlpProtoDetectCtx));
 
-#ifndef __SC_CUDA_SUPPORT__
     MpmInitCtx(&ctx->toserver.mpm_ctx, MPM_B2G, -1);
     MpmInitCtx(&ctx->toclient.mpm_ctx, MPM_B2G, -1);
-#else
-    ctx->alp_content_module_handle = SCCudaHlRegisterModule("SC_ALP_CONTENT_B2G_CUDA");
-    MpmInitCtx(&ctx->toserver.mpm_ctx, MPM_B2G_CUDA, ctx->alp_content_module_handle);
-    MpmInitCtx(&ctx->toclient.mpm_ctx, MPM_B2G_CUDA, ctx->alp_content_module_handle);
-#endif
 
     memset(&ctx->toserver.map, 0x00, sizeof(ctx->toserver.map));
     memset(&ctx->toclient.map, 0x00, sizeof(ctx->toclient.map));
@@ -324,14 +312,6 @@ void AlpProtoFinalizeGlobal(AlpProtoDetectCtx *ctx) {
     mpm_table[ctx->toclient.mpm_ctx.mpm_type].Prepare(&ctx->toclient.mpm_ctx);
     mpm_table[ctx->toserver.mpm_ctx.mpm_type].Prepare(&ctx->toserver.mpm_ctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    CUcontext context;
-    if (SCCudaCtxPopCurrent(&context) == -1)
-        exit(EXIT_FAILURE);
-    if (B2gCudaStartDispatcherThreadAPC("SC_ALP_CONTENT_B2G_CUDA") == -1)
-        exit(EXIT_FAILURE);
-#endif
-
     /* allocate and initialize the mapping between pattern id and signature */
     ctx->map = (AlpProtoSignature **)SCMalloc(ctx->sigs * sizeof(AlpProtoSignature *));
     if (ctx->map == NULL) {
@@ -406,31 +386,10 @@ uint16_t AppLayerDetectGetProtoPMParser(AlpProtoDetectCtx *ctx,
     uint32_t cnt = 0;
 
     /* do the mpm search */
-#ifndef __SC_CUDA_SUPPORT__
     cnt = mpm_table[dir->mpm_ctx.mpm_type].Search(&dir->mpm_ctx,
                                                 &tdir->mpm_ctx,
                                                 &tdir->pmq, buf,
                                                 searchlen);
-#else
-    Packet *p = PacketGetFromAlloc();
-    if (unlikely(p == NULL))
-        goto end;
-
-    p->cuda_done = 0;
-    p->cuda_free_packet = 1;
-    p->cuda_search = 0;
-    p->cuda_mpm_ctx = &dir->mpm_ctx;
-    p->cuda_mtc = &tdir->mpm_ctx;
-    p->cuda_pmq = &tdir->pmq;
-    p->payload = buf;
-    p->payload_len = searchlen;
-    B2gCudaPushPacketTo_tv_CMB2_APC(p);
-    SCMutexLock(&p->cuda_mutex_q);
-    SCCondWait(&p->cuda_cond_q, &p->cuda_mutex_q);
-    p->cuda_done = 1;
-    SCMutexUnlock(&p->cuda_mutex_q);
-    cnt = p->cuda_matches;
-#endif
     SCLogDebug("search cnt %" PRIu32 "", cnt);
     if (cnt == 0) {
         proto = ALPROTO_UNKNOWN;
@@ -745,14 +704,6 @@ int AlpDetectTest01(void) {
     int r = 1;
     AlpProtoDetectCtx ctx;
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoInit(&ctx);
 
     AlpProtoAdd(&ctx, "http", IPPROTO_TCP, ALPROTO_HTTP, buf, 4, 0, STREAM_TOCLIENT);
@@ -771,13 +722,6 @@ int AlpDetectTest01(void) {
 
     AlpProtoTestDestroy(&ctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        printf("Call to SCCudaCtxPopCurrent() failed\n");
-        return 0;
-    }
-#endif
-
     return r;
 }
 
@@ -786,14 +730,6 @@ int AlpDetectTest02(void) {
     int r = 1;
     AlpProtoDetectCtx ctx;
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoInit(&ctx);
 
     AlpProtoAdd(&ctx, "http", IPPROTO_TCP, ALPROTO_HTTP, buf, 4, 0, STREAM_TOCLIENT);
@@ -821,13 +757,6 @@ int AlpDetectTest02(void) {
 
     AlpProtoTestDestroy(&ctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        printf("Call to SCCudaCtxPopCurrent() failed\n");
-        return 0;
-    }
-#endif
-
     return r;
 }
 
@@ -838,14 +767,6 @@ int AlpDetectTest03(void) {
     AlpProtoDetectCtx ctx;
     AlpProtoDetectThreadCtx tctx;
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoInit(&ctx);
 
     AlpProtoAdd(&ctx, "http", IPPROTO_TCP, ALPROTO_HTTP, buf, 4, 0, STREAM_TOCLIENT);
@@ -874,14 +795,6 @@ int AlpDetectTest03(void) {
     AlpProtoFinalizeGlobal(&ctx);
     AlpProtoFinalizeThread(&ctx, &tctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     uint32_t cnt = mpm_table[ctx.toclient.mpm_ctx.mpm_type].Search(&ctx.toclient.mpm_ctx, &tctx.toclient.mpm_ctx, NULL, l7data, sizeof(l7data));
     if (cnt != 1) {
         printf("cnt %u != 1: ", cnt);
@@ -890,13 +803,6 @@ int AlpDetectTest03(void) {
 
     AlpProtoTestDestroy(&ctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        printf("Call to SCCudaCtxPopCurrent() failed\n");
-        return 0;
-    }
-#endif
-
     return r;
 }
 
@@ -907,14 +813,6 @@ int AlpDetectTest04(void) {
     AlpProtoDetectCtx ctx;
     AlpProtoDetectThreadCtx tctx;
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoInit(&ctx);
 
     AlpProtoAdd(&ctx, "http", IPPROTO_TCP, ALPROTO_HTTP, buf, 4, 0, STREAM_TOCLIENT);
@@ -931,14 +829,6 @@ int AlpDetectTest04(void) {
     AlpProtoFinalizeGlobal(&ctx);
     AlpProtoFinalizeThread(&ctx, &tctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     uint32_t cnt = mpm_table[ctx.toclient.mpm_ctx.mpm_type].Search(&ctx.toclient.mpm_ctx, &tctx.toclient.mpm_ctx, &tctx.toclient.pmq, l7data, sizeof(l7data));
     if (cnt != 1) {
         printf("cnt %u != 1: ", cnt);
@@ -947,13 +837,6 @@ int AlpDetectTest04(void) {
 
     AlpProtoTestDestroy(&ctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        printf("Call to SCCudaCtxPopCurrent() failed\n");
-        return 0;
-    }
-#endif
-
     return r;
 }
 
@@ -965,14 +848,6 @@ int AlpDetectTest05(void) {
     AlpProtoDetectCtx ctx;
     AlpProtoDetectThreadCtx tctx;
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoInit(&ctx);
 
     AlpProtoAdd(&ctx, "http", IPPROTO_TCP, ALPROTO_HTTP, buf, 4, 0, STREAM_TOCLIENT);
@@ -1007,23 +882,8 @@ int AlpDetectTest05(void) {
         r = 0;
     }
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoTestDestroy(&ctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        printf("Call to SCCudaCtxPopCurrent() failed\n");
-        return 0;
-    }
-#endif
-
     return r;
 }
 
@@ -1034,14 +894,6 @@ int AlpDetectTest06(void) {
     AlpProtoDetectCtx ctx;
     AlpProtoDetectThreadCtx tctx;
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoInit(&ctx);
 
     AlpProtoAdd(&ctx, "http", IPPROTO_TCP, ALPROTO_HTTP, buf, 4, 0, STREAM_TOCLIENT);
@@ -1076,23 +928,8 @@ int AlpDetectTest06(void) {
         r = 0;
     }
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoTestDestroy(&ctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        printf("Call to SCCudaCtxPopCurrent() failed\n");
-        return 0;
-    }
-#endif
-
     return r;
 }
 
@@ -1103,14 +940,6 @@ int AlpDetectTest07(void) {
     AlpProtoDetectCtx ctx;
     AlpProtoDetectThreadCtx tctx;
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoInit(&ctx);
 
     AlpProtoAdd(&ctx, "http", IPPROTO_TCP, ALPROTO_HTTP, buf, 4, 0, STREAM_TOCLIENT);
@@ -1133,23 +962,8 @@ int AlpDetectTest07(void) {
         r = 0;
     }
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoTestDestroy(&ctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        printf("Call to SCCudaCtxPopCurrent() failed\n");
-        return 0;
-    }
-#endif
-
     return r;
 }
 
@@ -1171,14 +985,6 @@ int AlpDetectTest08(void) {
     AlpProtoDetectCtx ctx;
     AlpProtoDetectThreadCtx tctx;
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoInit(&ctx);
 
     AlpProtoAdd(&ctx, "smb", IPPROTO_TCP, ALPROTO_SMB, buf, 8, 4, STREAM_TOCLIENT);
@@ -1201,23 +1007,8 @@ int AlpDetectTest08(void) {
         r = 0;
     }
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoTestDestroy(&ctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        printf("Call to SCCudaCtxPopCurrent() failed\n");
-        return 0;
-    }
-#endif
-
     return r;
 }
 
@@ -1236,14 +1027,6 @@ int AlpDetectTest09(void) {
     AlpProtoDetectCtx ctx;
     AlpProtoDetectThreadCtx tctx;
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoInit(&ctx);
 
     AlpProtoAdd(&ctx, "smb2", IPPROTO_TCP, ALPROTO_SMB2, buf, 8, 4, STREAM_TOCLIENT);
@@ -1266,22 +1049,8 @@ int AlpDetectTest09(void) {
         r = 0;
     }
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoTestDestroy(&ctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        printf("Call to SCCudaCtxPopCurrent() failed\n");
-        return 0;
-    }
-#endif
     return r;
 }
 
@@ -1296,14 +1065,6 @@ int AlpDetectTest10(void) {
     AlpProtoDetectCtx ctx;
     AlpProtoDetectThreadCtx tctx;
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoInit(&ctx);
 
     AlpProtoAdd(&ctx, "dcerpc", IPPROTO_TCP, ALPROTO_DCERPC, buf, 4, 0, STREAM_TOCLIENT);
@@ -1326,23 +1087,8 @@ int AlpDetectTest10(void) {
         r = 0;
     }
 
-#ifdef __SC_CUDA_SUPPORT__
-    B2gCudaKillDispatcherThreadAPC();
-    if (SCCudaHlPushCudaContextFromModule("SC_ALP_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-        return 0;
-    }
-#endif
-
     AlpProtoTestDestroy(&ctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        printf("Call to SCCudaCtxPopCurrent() failed\n");
-        return 0;
-    }
-#endif
-
     return r;
 }
 
diff --git a/src/cuda-packet-batcher.c b/src/cuda-packet-batcher.c
deleted file mode 100644 (file)
index 35c01a1..0000000
+++ /dev/null
@@ -1,1502 +0,0 @@
-/**
- * Copyright (c) 2010 Open Information Security Foundation.
- *
- * \author Anoop Saldanha <anoopsaldanha@gmail.com>
- *
- * \todo
- *       1 Implement a gpu version of aho-corasick.  That should get rid of a
- *         lot of post processing and pattern_chopping, and we don't have to
- *         deal with one or two byte patterns. (currently in process)
- *       2 Use texture/shared memory.  This should be handled along with 1 and 6.
- *       3 Currently a lot of packets(~17k) are getting stuck on the detection
- *         thread, which is a major bottleneck.  Introduce bypass detection
- *         threads for these 15k non buffered packets and check how the alerts
- *         are affected by this(out of sequence handling by detection threads).
- *       4 Test the use of mapped memory(if possible anywhere).
- *       5 Check parallelising memcopies with kernel execution.
- *       6 Test this feature - Rearrange the packet stream(either on cpu or gpu),
- *         where each block in the gpu can access the packet with non-coalesced
- *         reads.
- *         2 packets p1 -> aabb ccdd
- *                   p2 -> eeff gghh
- *
- *         stream -> aabbeeffccddgghh.
- *
- *         Modify the block size to 16 threads for CC < 2.0 devices and 32 for
- *         for >= 2.0.
- *
- *         The rearrangement of packet stream can be done on the gpu, with no
- *         perf degradation, using coalesced reads.  Padding packets need to
- *         be addressed though.
- *         (Need to give more thought to this task).
- *
- *         -- Feel free to pick any task from the agenda, but please
- *         drop a mail to dev mailing list(or directly to the dev team).  Better
- *         yet, open a feature request on our bug/feature tracker
- *         (https://redmine.openinfosecfoundation.org/issues).  Will be a mess if
- *         2 or more devs end up working on the same task or related tasks.
- */
-
-/* compile in, only if we have a CUDA enabled on this machine */
-#ifdef __SC_CUDA_SUPPORT__
-
-#include "suricata-common.h"
-#include "suricata.h"
-
-#include "detect.h"
-#include "decode.h"
-#include "flow.h"
-#include "data-queue.h"
-
-#include "threads.h"
-#include "threadvars.h"
-#include "tm-queuehandlers.h"
-#include "tm-threads.h"
-
-#include "cuda-packet-batcher.h"
-#include "conf.h"
-
-#include "util-error.h"
-#include "util-debug.h"
-#include "util-unittest.h"
-
-#include "util-mpm-b2g-cuda.h"
-#include "util-cuda-handlers.h"
-#include "detect-engine-address.h"
-#include "detect-engine-port.h"
-#include "detect-engine.h"
-#include "detect-parse.h"
-#include "tm-threads.h"
-#include "tmqh-packetpool.h"
-#include "util-mpm.h"
-
-/* \todo Make this user configurable through our yaml file.  Also provide options
- * where this can be dynamically updated based on the traffic */
-#define SC_CUDA_PB_BATCHER_ALARM_TIME 1
-
-/* holds the inq and outq between the cuda-packet-batcher TM and the cuda b2g mpm
- * dispatcher thread */
-static Tmq *tmq_inq = NULL;
-static Tmq *tmq_outq = NULL;
-
-/* holds the packet inq between the batcher TM and, the TM feeding it packets
- * in the runmode sequence.  We will need this to implement the alarm.  We will
- * have a SIG_ALRM delivered every SC_CUDA_PB_BATCHER_ALARM_TIME seconds, after
- * which we willf set a flag informing the batcher TM to queue the buffer to the
- * GPU and wake the batcher thread, in case it is waiting on a conditional for a
- * packet from the previous TM in the runmode */
-static Tmq *tmq_batcher_inq = NULL;
-
-/* used to indicate if we want to stop buffering the packets anymore.  We
- * we will need this while we want to shut the engine down
- * \todo give a better description */
-static int run_batcher = 1;
-
-/* indicates the maximum no of packets we are ready to buffer.  Theoretically the
- * maximum value held by this var can't exceed the value held by
- * "max_pending_packets".  Either ways we should make this user configurable like
- * SC_CUDA_PB_BATCHER_ALARM_TIME.  Also allow dynamic updates to this value based
- * on the traffic
- * \todo make this user configurable, as well allow dynamic update of this
- * variable based on the traffic seen */
-static uint32_t buffer_packet_threshhold = 0;
-
-/* the profile used by the cuda batcher */
-static MpmCudaConf *profile = NULL;
-
-/* flag used by the SIG_ALRM handler to indicate that the batcher TM should queue
- * the buffer to be processed by the Cuda Mpm B2g Batcher Thread for further
- * processing on the GPU */
-static int queue_buffer = 0;
-
-/* struct to configure the SIG_ALRM frequency. */
-static struct itimerval itimer = {{0, 0}, {0, 0}};
-
-static int unittest_mode = 0;
-
-/**
- * \internal
- * \brief The SIG_ALRM handler.  We will set the "queue_buffer" flag thus
- *        informing the batcher TM that it needs to queue the buffer.  We
- *        also signal the cond var for the batcher TM inq(the one it
- *        receives packets from), incase it is waiting on the conditional
- *        for a new packet from the previous TM in the runmodes list.
- *
- * \param signum The signal number that this function just woke up to.  In
- *               our case it is SIG_ALRM.
- */
-static void SCCudaPBSetQueueBufferFlag(int signum)
-{
-    SCLogDebug("Cuda Packet Batche alarm generated after %f seconds.  Set the"
-               "queue_buffer flag and signal the cuda TM inq.",
-               profile->batching_timeout);
-    queue_buffer = 1;
-    SCCondSignal(&((&trans_q[tmq_batcher_inq->id])->cond_q));
-
-    return;
-}
-
-/**
- * \internal.
- * \brief Set the SIG_ALRM handler
- */
-static void SCCudaPBSetBatcherAlarmTimeHandler()
-{
-    struct sigaction action;
-
-    SCLogDebug("Setting the SIGALRM handler for the Cuda Batcher TM");
-    action.sa_handler = SCCudaPBSetQueueBufferFlag;
-    sigemptyset(&(action.sa_mask));
-    sigaddset(&(action.sa_mask), SIGALRM);
-    action.sa_flags = 0;
-    sigaction(SIGALRM, &action, 0);
-
-    itimer.it_value.tv_sec = profile->batching_timeout;
-    itimer.it_value.tv_usec = (profile->batching_timeout
-                               - (int32_t) profile->batching_timeout) * 1000000;
-
-    return;
-}
-
-/**
- * \internal
- * \brief Reset the batcher alarm.
- */
-static inline void SCCudaPBResetBatcherAlarm()
-{
-    queue_buffer = 0;
-
-    /* if we are running unittests, don't set the alarm handler.  It will only
-     * cause a seg fault if the tests take too long */
-    if (!unittest_mode) {
-        /* \todo We could update itimer dynamically based on the traffic */
-        setitimer(ITIMER_REAL, &itimer, NULL);
-    }
-}
-
-/**
- * \internal
- * \brief Used to retrieve the Signature Group Head for a packet.
- *
- * \param de_ctx Pointer the detection engine context to search for the
- *               sgh for an incoming packet.
- * \param p      Pointer to the incoming packet for which we will have to
- *               search for a sgh.
- *
- * \retval sgh Pointer to the relevant matching sgh for the Packet.
- */
-static SigGroupHead *SCCudaPBGetSgh(DetectEngineCtx *de_ctx, Packet *p)
-{
-    int f;
-    SigGroupHead *sgh = NULL;
-
-    /* select the flow_gh */
-    if (p->flowflags & FLOW_PKT_TOCLIENT)
-        f = 0;
-    else
-        f = 1;
-
-    /* find the right mpm instance */
-    DetectAddress *ag = DetectAddressLookupInHead(de_ctx->flow_gh[f].src_gh[p->proto], &p->src);
-    if (ag != NULL) {
-        /* source group found, lets try a dst group */
-        ag = DetectAddressLookupInHead(ag->dst_gh,&p->dst);
-        if (ag != NULL) {
-            if (ag->port == NULL) {
-                SCLogDebug("we don't have ports");
-                sgh = ag->sh;
-            } else {
-                SCLogDebug("we have ports");
-
-                DetectPort *sport = DetectPortLookupGroup(ag->port,p->sp);
-                if (sport != NULL) {
-                    DetectPort *dport = DetectPortLookupGroup(sport->dst_ph, p->dp);
-                    if (dport != NULL) {
-                        sgh = dport->sh;
-                    } else {
-                        SCLogDebug("no dst port group found for the packet with dp %"PRIu16, p->dp);
-                    }
-                } else {
-                    SCLogDebug("no src port group found for the packet with sp %"PRIu16, p->sp);
-                }
-            }
-        } else {
-            SCLogDebug("no dst address group found for the packet");
-        }
-    } else {
-        SCLogDebug("no src address group found for the packet");
-    }
-
-    return sgh;
-}
-
-/**
- * \internal
- * \brief Handles the queuing of the buffer from this batcher TM to the cuda
- *        mpm b2g dispatcher TM.
- *
- * \tctx The batcher thread context that holds the current operational buffer
- *       which has to be buffered by this function.
- */
-static void SCCudaPBQueueBuffer(SCCudaPBThreadCtx *tctx)
-{
-    SCCudaPBPacketsBuffer *pb = (SCCudaPBPacketsBuffer *)tctx->curr_pb;
-    uint32_t nop_in_buffer = pb->nop_in_buffer;
-    uint32_t *packets_offset_buffer = pb->packets_offset_buffer;
-    uint32_t offset = *(packets_offset_buffer + nop_in_buffer - 1);
-    SCCudaPBPacketDataForGPU *last_packet = (SCCudaPBPacketDataForGPU *)(pb->packets_buffer +
-                                                                         offset);
-
-    /* if we have no packets buffered in so far, get out */
-    if (pb->nop_in_buffer == 0) {
-        SCLogDebug("No packets buffered in so far in the cuda buffer.  Returning");
-        return;
-    }
-
-    /* calculate the total length of all the packets buffered in */
-    pb->packets_buffer_len = pb->packets_offset_buffer[pb->nop_in_buffer - 1] +
-        sizeof(SCCudaPBPacketDataForGPUNonPayload) +
-        last_packet->payload_len;
-
-    pb->packets_total_payload_len = pb->packets_payload_offset_buffer[pb->nop_in_buffer - 1] +
-        last_packet->payload_len;
-
-    /* enqueue the buffer in the outq to be consumed by the dispatcher TM */
-    SCDQDataQueue *dq_outq = &data_queues[tmq_outq->id];
-    SCMutexLock(&dq_outq->mutex_q);
-    SCDQDataEnqueue(dq_outq, (SCDQGenericQData *)tctx->curr_pb);
-    SCCondSignal(&dq_outq->cond_q);
-    SCMutexUnlock(&dq_outq->mutex_q);
-
-    while (run_batcher) {
-        /* dequeue a new buffer */
-        SCDQDataQueue *dq_inq = &data_queues[tmq_inq->id];
-        SCMutexLock(&dq_inq->mutex_q);
-        if (dq_inq->len == 0) {
-            /* if we have no data in queue, wait... */
-            SCCondWait(&dq_inq->cond_q, &dq_inq->mutex_q);
-        }
-
-        if (run_batcher == 0) {
-            break;
-        }
-
-        if (dq_inq->len > 0) {
-            tctx->curr_pb = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(dq_inq);
-            tctx->curr_pb->nop_in_buffer = 0;
-            tctx->curr_pb->packets_buffer_len = 0;
-            tctx->curr_pb->packets_total_payload_len = 0;
-            SCMutexUnlock(&dq_inq->mutex_q);
-            SCLogDebug("Dequeued a new packet buffer for the cuda batcher TM");
-            break;
-        } else {
-            /* Should only happen on signals. */
-            SCMutexUnlock(&dq_inq->mutex_q);
-            SCLogDebug("Unable to Relooping in the quest to dequeue new buffer");
-        }
-    } /* while (run_batcher) */
-
-    return;
-}
-
-/**
- * \brief Custom slot function used by the Batcher TM.
- *
- * \param td Pointer to the ThreadVars instance.  In this case the batcher TM's
- *           ThreadVars instance.
- */
-void *SCCudaPBTmThreadsSlot1(void *td)
-{
-    ThreadVars *tv = (ThreadVars *)td;
-    TmSlot *s = (TmSlot *)tv->tm_slots;
-    Packet *p = NULL;
-    char run = 1;
-    TmEcode r = TM_ECODE_OK;
-
-    /* Set the thread name */
-    SCSetThreadName(tv->name);
-
-    if (tv->thread_setup_flags != 0) {
-        TmThreadSetupOptions(tv);
-    }
-
-    SCLogDebug("%s starting", tv->name);
-
-    if (s->SlotThreadInit != NULL) {
-        void *slot_data = NULL;
-        r = s->SlotThreadInit(tv, s->slot_initdata, &slot_data);
-        if (r != TM_ECODE_OK) {
-            EngineKill();
-
-            TmThreadsSetFlag(tv, THV_CLOSED | THV_RUNNING_DONE);
-            pthread_exit((void *) -1);
-        }
-        SC_ATOMIC_SET(s->slot_data, slot_data);
-    }
-    memset(&s->slot_pre_pq, 0, sizeof(PacketQueue));
-    memset(&s->slot_post_pq, 0, sizeof(PacketQueue));
-
-    TmThreadsSetFlag(tv, THV_INIT_DONE);
-    while(run) {
-        TmSlotFunc SlotFunc = SC_ATOMIC_GET(s->SlotFunc);
-        TmThreadTestThreadUnPaused(tv);
-
-        /* input a packet */
-        p = tv->tmqh_in(tv);
-
-        if (p == NULL) {
-            SCLogDebug("packet is NULL for TM: %s", tv->name);
-            /* the only different between the actual Slot1 function in
-             * tm-threads.c and this custom Slot1 function is this call
-             * here.  We need to make the call here, even if we don't
-             * receive a packet from the previous stage in the runmodes.
-             * This is needed in cases where the SIG_ALRM handler
-             * wants us to queue the buffer to the GPU and ends up waking
-             * the Batcher TM(which is waiting on a cond from the previous
-             * feeder TM).  Please handle the NULL packet case in the
-             * function that you now call */
-            r = SlotFunc(tv, p, SC_ATOMIC_GET(s->slot_data), NULL, NULL);
-        } else {
-            r = SlotFunc(tv, p, SC_ATOMIC_GET(s->slot_data), NULL, NULL);
-            /* handle error */
-            if (r == TM_ECODE_FAILED) {
-                TmqhOutputPacketpool(tv, p);
-                TmThreadsSetFlag(tv, THV_FAILED);
-                break;
-            }
-
-            /* output the packet */
-            tv->tmqh_out(tv, p);
-        }
-
-        if (TmThreadsCheckFlag(tv, THV_KILL)) {
-            SCPerfSyncCounters(tv, 0);
-            run = 0;
-        }
-    }
-
-    TmThreadsSetFlag(tv, THV_RUNNING_DONE);
-    TmThreadWaitForFlag(tv, THV_DEINIT);
-
-    if (s->SlotThreadExitPrintStats != NULL) {
-        s->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(s->slot_data));
-    }
-
-    if (s->SlotThreadDeinit != NULL) {
-        r = s->SlotThreadDeinit(tv, SC_ATOMIC_GET(s->slot_data));
-        if (r != TM_ECODE_OK) {
-            TmThreadsSetFlag(tv, THV_CLOSED);
-            pthread_exit((void *) -1);
-        }
-    }
-
-    SCLogDebug("%s ending", tv->name);
-    TmThreadsSetFlag(tv, THV_CLOSED);
-    pthread_exit((void *) 0);
-}
-
-/**
- * \brief Used to de-allocate an instance of SCCudaPBPacketsBuffer.
- *
- * \param pb Pointer to the SCCudaPacketsBuffer instance to be de-alloced.
- */
-void SCCudaPBDeAllocSCCudaPBPacketsBuffer(SCCudaPBPacketsBuffer *pb)
-{
-    if (pb == NULL)
-        return;
-
-    if (pb->packets_buffer != NULL) {
-        if (SCCudaMemFreeHost(pb->packets_buffer) == -1) {
-            SCLogError(SC_ERR_CUDA_ERROR, "Error deallocating pagelocked memory: "
-                       "packets_buffer");
-        }
-    }
-    if (pb->packets_offset_buffer != NULL) {
-        if (SCCudaMemFreeHost(pb->packets_offset_buffer) == -1) {
-            SCLogError(SC_ERR_CUDA_ERROR, "Error deallocating pagelocked memory: "
-                       "packets_offset_buffer");
-        }
-    }
-    if (pb->packets_payload_offset_buffer != NULL) {
-        if (SCCudaMemFreeHost(pb->packets_payload_offset_buffer) == -1) {
-            SCLogError(SC_ERR_CUDA_ERROR, "Error deallocating pagelocked memory "
-                       "packets_payload_offset_buffer");
-        }
-    }
-    if (pb->packets_address_buffer != NULL)
-        SCFree(pb->packets_address_buffer);
-
-    SCFree(pb);
-
-    return;
-}
-
-/**
- * \brief Allocates a new instance of SCCudaPBPacketsBuffer.
- *
- * \param pb The newly created instance of SCCudaPBPacketsBuffer.
- */
-SCCudaPBPacketsBuffer *SCCudaPBAllocSCCudaPBPacketsBuffer(void)
-{
-    SCCudaPBPacketsBuffer *pb = SCMalloc(sizeof(SCCudaPBPacketsBuffer));
-    if (unlikely(pb == NULL)) {
-        SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
-        exit(EXIT_FAILURE);
-    }
-    memset(pb, 0, sizeof(SCCudaPBPacketsBuffer));
-
-    /* Register new module, needed for some unit tests */
-    if (SCCudaHlGetModuleHandle("SC_CUDA_PACKET_BATCHER") == -1) {
-        SCCudaHlRegisterModule("SC_CUDA_PACKET_BATCHER");
-    }
-
-    /* the buffer for the packets to be sent over to the gpu.  We allot space for
-     * profile->packet_buffer_limit packets, assuming a size of
-     * profile->packet_size_limit for each packet */
-    SCCudaHlModuleData *data = NULL;
-    data = SCCudaHlGetModuleData(SCCudaHlGetModuleHandle("SC_CUDA_PACKET_BATCHER"));
-    if (data == NULL) {
-        SCLogDebug("Module not registered.  To avail the benefits of this "
-                   "registration facility, first register a module using "
-                   "context using SCCudaHlRegisterModule(), after which you "
-                   "can call this function");
-        return NULL;
-    }
-
-    if (SCCudaHlGetCudaContext(&data->cuda_context, "mpm", data->handle) == -1) {
-        SCLogError(SC_ERR_CUDA_HANDLER_ERROR, "Error getting cuda context");
-        return NULL;
-    }
-
-    if (SCCudaCtxPushCurrent(data->cuda_context) == -1) {
-        SCLogError(SC_ERR_CUDA_HANDLER_ERROR,
-                   "Error pushing cuda context to allocate memory");
-    }
-
-    if (profile->page_locked) {
-        if (SCCudaMemHostAlloc((void**)&pb->packets_buffer,
-                               profile->packet_buffer_limit *
-                               (profile->packet_size_limit +
-                                sizeof(SCCudaPBPacketDataForGPUNonPayload)),
-                               CU_MEMHOSTALLOC_PORTABLE |
-                               CU_MEMHOSTALLOC_WRITECOMBINED) == -1) {
-            SCLogError(SC_ERR_CUDA_ERROR, "Error allocating page-locked memory");
-            exit(EXIT_FAILURE);
-        }
-    } else {
-        pb->packets_buffer = SCMalloc(profile->packet_buffer_limit *
-                                    (profile->packet_size_limit +
-                                     sizeof(SCCudaPBPacketDataForGPUNonPayload)));
-        if (pb->packets_buffer == NULL) {
-            SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
-            exit(EXIT_FAILURE);
-        }
-    }
-    memset(pb->packets_buffer, 0, profile->packet_buffer_limit *
-           (profile->packet_size_limit + sizeof(SCCudaPBPacketDataForGPUNonPayload)));
-
-    if (profile->page_locked) {
-        /* used to hold the offsets of the buffered packets in the packets_buffer */
-        if (SCCudaMemHostAlloc((void**)&pb->packets_offset_buffer,
-                               sizeof(uint32_t) * profile->packet_buffer_limit,
-                               CU_MEMHOSTALLOC_PORTABLE |
-                               CU_MEMHOSTALLOC_WRITECOMBINED) == -1) {
-            SCLogError(SC_ERR_CUDA_ERROR, "Error allocating page-locked memory");
-            exit(EXIT_FAILURE);
-        }
-    } else {
-        pb->packets_offset_buffer = SCMalloc(sizeof(uint32_t) *
-                                           profile->packet_buffer_limit);
-        if (pb->packets_offset_buffer == NULL) {
-            SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
-            exit(EXIT_FAILURE);
-        }
-    }
-    memset(pb->packets_offset_buffer, 0,
-           sizeof(uint32_t) * profile->packet_buffer_limit);
-
-    if (profile->page_locked) {
-        /* used to hold the offsets of the packets payload */
-        if (SCCudaMemHostAlloc((void**)&pb->packets_payload_offset_buffer,
-                               sizeof(uint32_t) * profile->packet_buffer_limit,
-                               CU_MEMHOSTALLOC_PORTABLE |
-                               CU_MEMHOSTALLOC_WRITECOMBINED) == -1) {
-            SCLogError(SC_ERR_CUDA_ERROR, "Error allocating page-locked memory");
-            exit(EXIT_FAILURE);
-        }
-    } else {
-        pb->packets_payload_offset_buffer = SCMalloc(sizeof(uint32_t) *
-                                                   profile->packet_buffer_limit);
-        if (pb->packets_payload_offset_buffer == NULL) {
-            SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
-            exit(EXIT_FAILURE);
-        }
-    }
-    memset(pb->packets_payload_offset_buffer, 0,
-           sizeof(uint32_t) * profile->packet_buffer_limit);
-
-    SCLogDebug("Allocated pagelocked CUDA memory");
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        SCLogError(SC_ERR_CUDA_HANDLER_ERROR, "Could not pop cuda context");
-    }
-
-    /* used to hold the packet addresses for all the packets buffered inside
-     * packets_buffer */
-    pb->packets_address_buffer = SCMalloc(sizeof(Packet *) *
-                                        profile->packet_buffer_limit);
-    if (pb->packets_address_buffer == NULL) {
-        SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
-        exit(EXIT_FAILURE);
-    }
-    memset(pb->packets_address_buffer, 0, sizeof(Packet *) *
-           profile->packet_buffer_limit);
-
-    return pb;
-}
-
-/**
- * \brief Registration function for the Cuda Packet Batcher TM.
- */
-void TmModuleCudaPacketBatcherRegister(void)
-{
-    tmm_modules[TMM_CUDA_PACKET_BATCHER].name = "CudaPacketBatcher";
-    tmm_modules[TMM_CUDA_PACKET_BATCHER].ThreadInit = SCCudaPBThreadInit;
-    tmm_modules[TMM_CUDA_PACKET_BATCHER].Func = SCCudaPBBatchPackets;
-    tmm_modules[TMM_CUDA_PACKET_BATCHER].ThreadExitPrintStats = SCCudaPBThreadExitStats;
-    tmm_modules[TMM_CUDA_PACKET_BATCHER].ThreadDeinit = SCCudaPBThreadDeInit;
-    tmm_modules[TMM_CUDA_PACKET_BATCHER].RegisterTests = SCCudaPBRegisterTests;
-
-    return;
-}
-
-/**
- * \brief The cuda batcher TM init function.
- *
- * \param tv       The cuda packet batcher TM ThreadVars instance.
- * \param initdata The initialization data needed by this cuda batcher TM.
- * \param data     Pointer to a ponter memory location that would be updated
- *                 with the newly created thread ctx instance.
- *
- * \retval TM_ECODE_OK     On success.
- * \retval TM_ECODE_FAILED On failure.
- */
-TmEcode SCCudaPBThreadInit(ThreadVars *tv, void *initdata, void **data)
-{
-    SCCudaPBThreadCtx *tctx = NULL;
-
-    if (initdata == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENTS, "Invalid argument.  initdata NULL "
-                   "for the cuda batcher TM init thread function");
-        return TM_ECODE_FAILED;
-    }
-
-    tctx = SCMalloc(sizeof(SCCudaPBThreadCtx));
-    if (unlikely(tctx == NULL)) {
-        SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
-        exit(EXIT_FAILURE);
-    }
-    memset(tctx, 0, sizeof(SCCudaPBThreadCtx));
-
-    /* the detection engine context.  We will need it to retrieve the sgh,
-     * when we start receiving and batching the packets */
-    tctx->de_ctx = initdata;
-
-    /* the first packet buffer from the queue */
-    tctx->curr_pb = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(&data_queues[tmq_inq->id]);
-
-    /* register new module */
-    SCCudaHlRegisterModule("SC_CUDA_PACKET_BATCHER");
-
-    *data = tctx;
-
-    /* we will need the cuda packet batcher TM's inq for further use later.  Read
-     * the comments associated with this var definition, for its use */
-    tmq_batcher_inq = tv->inq;
-
-    /* set the SIG_ALRM handler */
-    SCCudaPBSetBatcherAlarmTimeHandler();
-
-    /* Set the alarm time limit during which the batcher thread would
-     * buffer packets */
-    SCCudaPBResetBatcherAlarm();
-
-    return TM_ECODE_OK;
-}
-
-/**
- * \brief Batches packets into the packets buffer.
- *
- * \param tv   Pointer to the ThreadVars instance, in this case the cuda packet
- *             batcher TM's TV instance.
- * \param p    Pointer the the packet to be buffered.
- * \param data Pointer the the batcher TM thread ctx.
- * \param pq   Pointer to the packetqueue.  We don't need this.
- *
- * \retval TM_ECODE_OK     On success.
- * \retval TM_ECODE_FAILED On failure.
- */
-TmEcode SCCudaPBBatchPackets(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, PacketQueue *post_pq)
-{
-#define ALIGN_UP(offset, alignment) \
-    (offset) = ((offset) + (alignment) - 1) & ~((alignment) - 1)
-
-    SCCudaPBThreadCtx *tctx = data;
-
-    /* ah.  we have been signalled that we crossed the time limit within which we
-     * need to buffer packets.  Let us queue the buffer to the GPU */
-    if (queue_buffer) {
-        SCLogDebug("Cuda packet buffer TIME limit exceeded.  Buffering packet "
-                   "buffer and reseting the alarm");
-        SCCudaPBQueueBuffer(tctx);
-        SCCudaPBResetBatcherAlarm();
-    }
-
-    /* this is possible, since we are using a custom slot function that calls this
-     * function, even if it receives no packet from the packet queue */
-    if (p == NULL) {
-        SCLogDebug("packet NULL inside Cuda batcher TM");
-        return TM_ECODE_OK;
-    }
-
-    /* we set it for every incoming packet.  We will set this depending on whether
-     * we end up buffering the packet or not */
-    p->cuda_mpm_enabled = 0;
-
-    /* packets that are too big are handled by the cpu */
-    if (p->payload_len > SC_CUDA_PB_MAX_PAYLOAD_SIZE) {
-        SCLogDebug("p->payload_len %"PRIu16" > %d, inspecting on the CPU.",
-            p->payload_len, SC_CUDA_PB_MAX_PAYLOAD_SIZE);
-        return TM_ECODE_OK;
-    }
-
-    /* the packets buffer */
-    SCCudaPBPacketsBuffer *pb = (SCCudaPBPacketsBuffer *)tctx->curr_pb;
-    /* the previous packet which has been buffered into the packets_buffer */
-    SCCudaPBPacketDataForGPU *prev_buff_packet = NULL;
-    /* holds the position in the packets_buffer where the curr packet would
-     * be buffered in */
-    SCCudaPBPacketDataForGPU *curr_packet = NULL;
-    /* the sgh to which the incoming packet belongs */
-    SigGroupHead *sgh = NULL;
-
-    if (p->flow != NULL) {
-        /* Get the stored sgh from the flow (if any). Make sure we're not using
-         * the sgh for icmp error packets part of the same stream. */
-        if (p->proto == p->flow->proto) { /* filter out icmp */
-            if (p->flowflags & FLOW_PKT_TOSERVER && p->flow->flags & FLOW_SGH_TOSERVER) {
-                sgh = p->flow->sgh_toserver;
-            } else if (p->flowflags & FLOW_PKT_TOCLIENT && p->flow->flags & FLOW_SGH_TOCLIENT) {
-                sgh = p->flow->sgh_toclient;
-            }
-        }
-    }
-
-    if (sgh == NULL) {
-        /* get the signature group head to which this packet belongs.  If it belongs
-         * to no sgh, we don't need to buffer this packet.
-         * \todo Get rid of this, once we get the sgh from the flow */
-        sgh = SCCudaPBGetSgh(tctx->de_ctx, p);
-        if (sgh == NULL) {
-            SCLogDebug("No SigGroupHead match for this packet");
-            return TM_ECODE_OK;
-        }
-    }
-
-    /* if the payload is less than the maximum content length in this sgh we
-     * don't need to run the PM on this packet.  Chuck the packet out */
-    if (sgh->mpm_content_maxlen > p->payload_len) {
-        SCLogDebug("not mpm-inspecting as pkt payload is smaller than "
-                   "the largest content length we need to match");
-        return TM_ECODE_OK;
-    }
-
-    MpmCtx *mpm_ctx = NULL;
-    if (p->proto == IPPROTO_TCP) {
-        if (p->flowflags & FLOW_PKT_TOSERVER)
-            mpm_ctx = sgh->mpm_proto_tcp_ctx_ts;
-        else
-            mpm_ctx = sgh->mpm_proto_tcp_ctx_tc;
-    } else if (p->proto == IPPROTO_UDP) {
-        if (p->flowflags & FLOW_PKT_TOSERVER)
-            mpm_ctx = sgh->mpm_proto_udp_ctx_ts;
-        else
-            mpm_ctx = sgh->mpm_proto_udp_ctx_tc;
-    } else {
-        mpm_ctx = sgh->mpm_proto_other_ctx;
-    }
-
-    /* if one of these conditions fail we don't have to run the mpm on this
-     * packet.  Firstly if the payload_len is == 0, we don't have a payload
-     * to match against.  Next if we don't have a mpm_context against this
-     * sgh, indicating we don't have any patterns in this sgh, again we don't
-     * have anything to run the PM against.  Finally if the flow doesn't want
-     * to analyze packets for this flow, we can chuck this packet out as well */
-    if ( !(p->payload_len > 0 && mpm_ctx != NULL &&
-           !(p->flags & PKT_NOPAYLOAD_INSPECTION)) ) {
-        SCLogDebug("Either p->payload_len <= 0 or mpm_ctx for the packet is NULL "
-                   "or PKT_NOPAYLOAD_INSPECTION set for this packet");
-        return TM_ECODE_OK;
-    }
-
-    /* the cuda b2g context */
-    B2gCudaCtx *ctx = mpm_ctx->ctx;
-
-    /* if we have a 1 byte search kernel set we don't buffer this packet for
-     * cuda matching and instead run this non-cuda mpm function to be run on
-     * the packet */
-    if (ctx->Search == B2gCudaSearch1) {
-        SCLogDebug("The packet has a one byte patterns.  run mpm "
-                   "separately");
-        return TM_ECODE_OK;
-    }
-
-#ifdef B2G_CUDA_SEARCH2
-    /* if we have a 2 byte search kernel set we don't buffer this packet for
-     * cuda matching and instead run this non-cuda mpm function to be run on the
-     * packet */
-    if (ctx->Search == B2gCudaSearch2) {
-        SCLogDebug("The packet has two byte patterns.  run mpm "
-                   "separately");
-        return TM_ECODE_OK;
-    }
-#endif
-
-    /* we have passed all the criterions for buffering the packet.  Set the
-     * flag indicating that the packet goes through cuda mpm */
-    p->cuda_mpm_enabled = 1;
-
-    /* first packet to be buffered in */
-    if (pb->nop_in_buffer == 0) {
-        curr_packet = (SCCudaPBPacketDataForGPU *)pb->packets_buffer;
-
-    /* buffer is not empty */
-    } else {
-        prev_buff_packet = (SCCudaPBPacketDataForGPU *)(pb->packets_buffer +
-                                                        pb->packets_offset_buffer[pb->nop_in_buffer - 1]);
-        curr_packet = (SCCudaPBPacketDataForGPU *)((uint8_t *)prev_buff_packet +
-                                                   sizeof(SCCudaPBPacketDataForGPUNonPayload) +
-                                                   prev_buff_packet->payload_len) ;
-        int diff = (int)((uint8_t *)curr_packet - pb->packets_buffer);
-        /* \todo Feel it is the wrong option taken by nvidia by setting CUdeviceptr
-         * to unsigned int.  Keep this option for now.  We will get back to this
-         * once nvidia responds to the filed bug */
-        ALIGN_UP(diff, sizeof(CUdeviceptr));
-        curr_packet = (SCCudaPBPacketDataForGPU *)(pb->packets_buffer + diff);
-    }
-
-    /* store the data in the packets_buffer for this packet, which would be passed
-     * over to the GPU for processing */
-    curr_packet->m = ((B2gCudaCtx *)(mpm_ctx->ctx))->m;
-    curr_packet->table = ((B2gCudaCtx *)(mpm_ctx->ctx))->cuda_B2G;
-    curr_packet->payload_len = p->payload_len;
-    memcpy(curr_packet->payload, p->payload, p->payload_len);
-
-    /* store the address of the packet just buffered at the same index.  The
-     * dispatcher thread will need this address to communicate the results back
-     * to the packet */
-    pb->packets_address_buffer[pb->nop_in_buffer] = p;
-
-    /* if it is the first packet to be buffered, the offset is 0.  If it is not,
-     * then take the offset for the buffer from curr_packet */
-    if (pb->nop_in_buffer == 0) {
-        pb->packets_offset_buffer[pb->nop_in_buffer] = 0;
-        pb->packets_payload_offset_buffer[pb->nop_in_buffer] = 0;
-    } else {
-        pb->packets_offset_buffer[pb->nop_in_buffer] = (uint8_t *)curr_packet - pb->packets_buffer;
-        pb->packets_payload_offset_buffer[pb->nop_in_buffer] =
-            pb->packets_payload_offset_buffer[pb->nop_in_buffer - 1] +
-            prev_buff_packet->payload_len;
-    }
-
-    /* indicates the no of packets added so far into the buffer */
-    pb->nop_in_buffer++;
-
-    /* we have hit the threshhold for the total no of packets held in the buffer.
-     * We will change this in the future, instead relying on the remaining space
-     * left in the buffer or we have been informed that we have hit the time limit
-     * to queue the buffer */
-    if ( (pb->nop_in_buffer == buffer_packet_threshhold) || queue_buffer) {
-        SCLogDebug("Either we have hit the threshold limit for packets(i.e. we "
-                   "have %d packets limit) OR we have exceeded the buffering "
-                   "time limit.  Buffering the packet buffer and reseting the "
-                   "alarm.", buffer_packet_threshhold);
-        SCCudaPBQueueBuffer(tctx);
-        SCCudaPBResetBatcherAlarm();
-    }
-
-    return TM_ECODE_OK;
-}
-
-void SCCudaPBThreadExitStats(ThreadVars *tv, void *data)
-{
-    return;
-}
-
-/**
- * \brief The thread de-init function for the cuda packet batcher TM.
- *
- * \param tv   Pointer to the cuda packet batcher TM ThreadVars instance.
- * \param data Pointer the the Thread ctx for the cuda packet batcher TM.
- *
- * \retval TM_ECODE_OK     On success.
- * \retval TM_ECODE_FAILED On failure.  Although we won't be returning this here.
- */
-TmEcode SCCudaPBThreadDeInit(ThreadVars *tv, void *data)
-{
-    SCCudaPBThreadCtx *tctx = data;
-
-    if (tctx != NULL) {
-        if (tctx->curr_pb != NULL) {
-            if (SCCudaHlPushCudaContextFromModule("SC_CUDA_PACKET_BATCHER") == -1){
-                SCLogError(SC_ERR_CUDA_HANDLER_ERROR,
-                           "Failed to push cuda context from module");
-            }
-
-            SCCudaPBDeAllocSCCudaPBPacketsBuffer(tctx->curr_pb);
-            tctx->curr_pb = NULL;
-
-            if (SCCudaCtxPopCurrent(NULL) == -1){
-                SCLogError(SC_ERR_CUDA_ERROR, "Failed to pop cuda context");
-            }
-
-            if (SCCudaHlDeRegisterModule("SC_CUDA_PACKET_BATCHER") == -1){
-                SCLogError(SC_ERR_CUDA_HANDLER_ERROR, "Failed to deregister module");
-            }
-        }
-        SCFree(tctx);
-    }
-
-    return TM_ECODE_OK;
-}
-
-/**
- * \brief Sets up the queues and buffers needed by the cuda batcher TM function.
- */
-void SCCudaPBSetUpQueuesAndBuffers(void)
-{
-    /* the b2g dispatcher thread would have to use the reverse for incoming
-     * and outgoing queues */
-    char *inq_name = "cuda_batcher_mpm_inqueue";
-    char *outq_name = "cuda_batcher_mpm_outqueue";
-    int i = 0;
-
-    /* set the incoming queue for the cuda_packet_batcher TM and the cuda B2g
-     * dispatcher */
-    tmq_inq = TmqGetQueueByName(inq_name);
-    if (tmq_inq == NULL) {
-        tmq_inq = TmqCreateQueue(inq_name);
-        if (tmq_inq == NULL) {
-            return;
-        }
-    }
-    tmq_inq->reader_cnt++;
-    tmq_inq->writer_cnt++;
-
-    /* set the outgoing queue from the cuda_packet_batcher TM and the cuda B2g
-     * dispatcher */
-    tmq_outq = TmqGetQueueByName(outq_name);
-    if (tmq_outq == NULL) {
-        tmq_outq = TmqCreateQueue(outq_name);
-        if (tmq_outq == NULL) {
-            return;
-        }
-    }
-    tmq_outq->reader_cnt++;
-    tmq_outq->writer_cnt++;
-
-    /* Register a new module to be used by the packet batcher to allocate
-     * page-locked memory */
-    SCCudaHlRegisterModule("SC_CUDA_PACKET_BATCHER");
-
-    profile = SCCudaHlGetProfile("mpm");
-
-    /* allocate the packet buffer */
-    /* \todo need to work out the right no of packet buffers that we need to
-     * queue.  I doubt we will need more than 4(as long as we don't run it on
-     * low traffic line).  We don't want to get into the business of creating
-     * new ones, when we run out of buffers, since malloc for a huge chunk
-     * like this will take time.  We need to figure out a value based on
-     * various other parameters like alarm time and buffer threshold value */
-    for (i = 0; i < profile->packet_buffers; i++) {
-        if (profile->page_locked) {
-            SCLogDebug("Allocating \"%d\" page_locked cuda packet buffers",
-                       profile->packet_buffers);
-        } else {
-            SCLogDebug("Allocating \"%d\" non-page_locked cuda packet buffers",
-                       profile->packet_buffers);
-        }
-
-        SCCudaPBPacketsBuffer *pb = SCCudaPBAllocSCCudaPBPacketsBuffer();
-        /* dump the buffer into the inqueue for this batcher TM.  the batcher
-         * thread would be the first consumer for these buffers */
-        SCDQDataEnqueue(&data_queues[tmq_inq->id], (SCDQGenericQData *)pb);
-    }
-
-    /* \todo This needs to be changed ASAP.  This can't exceed max_pending_packets.
-     * Also we need to make this user configurable and allow dynamic updaes
-     * based on live traffic */
-    buffer_packet_threshhold = profile->packet_buffer_limit;
-
-    return;
-}
-
-/**
- * \brief Clean up all the buffers queued in.  Need to write more on this.
- */
-void SCCudaPBCleanUpQueuesAndBuffers(void)
-{
-    SCCudaPBPacketsBuffer *pb = NULL;
-    SCDQDataQueue *dq = NULL;
-
-    if (tmq_inq == NULL || tmq_outq == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENTS, "Invalid arguments.  tmq_inq or "
-                   "tmq_outq NULL");
-        return;
-    }
-    if (SCCudaHlPushCudaContextFromModule("SC_CUDA_PACKET_BATCHER") == -1){
-        SCLogError(SC_ERR_CUDA_HANDLER_ERROR, "Could not push cuda context from module");
-    }
-
-    /* clean all the buffers present in the inq */
-    dq = &data_queues[tmq_inq->id];
-    SCMutexLock(&dq->mutex_q);
-    while ( (pb = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(dq)) != NULL) {
-        if (pb->packets_buffer != NULL) {
-            if (profile->page_locked) {
-                if (SCCudaMemFreeHost(pb->packets_buffer) == -1) {
-                    SCLogError(SC_ERR_CUDA_ERROR, "Error deallocating pagelocked memory: "
-                               "packets_buffer");
-                }
-            } else {
-                SCFree(pb->packets_buffer);
-            }
-        }
-        if (pb->packets_offset_buffer != NULL) {
-            if (profile->page_locked) {
-                if (SCCudaMemFreeHost(pb->packets_offset_buffer) == -1) {
-                    SCLogError(SC_ERR_CUDA_ERROR, "Error deallocating pagelocked memory: "
-                               "packets_offset_buffer");
-                }
-            } else {
-                SCFree(pb->packets_offset_buffer);
-            }
-        }
-        if (pb->packets_payload_offset_buffer != NULL) {
-            if (profile->page_locked) {
-                if (SCCudaMemFreeHost(pb->packets_payload_offset_buffer) == -1) {
-                    SCLogError(SC_ERR_CUDA_ERROR, "Error deallocating pagelocked memory: "
-                               "packets_payload_offset_buffer");
-                }
-            } else {
-                SCFree(pb->packets_payload_offset_buffer);
-            }
-        }
-
-        SCFree(pb);
-    }
-    SCMutexUnlock(&dq->mutex_q);
-    SCCondSignal(&dq->cond_q);
-
-    /* clean all the buffers present in the outq */
-    dq = &data_queues[tmq_outq->id];
-    SCMutexLock(&dq->mutex_q);
-    while ( (pb = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(dq)) != NULL) {
-        if (pb->packets_buffer != NULL) {
-            if (SCCudaMemFreeHost(pb->packets_buffer) == -1) {
-                SCLogError(SC_ERR_CUDA_ERROR, "Error deallocating pagelocked memory: "
-                           "packets_buffer");
-            }
-        }
-        if (pb->packets_offset_buffer != NULL) {
-            if (SCCudaMemFreeHost(pb->packets_offset_buffer) == -1) {
-                SCLogError(SC_ERR_CUDA_ERROR, "Error deallocating pagelocked memory: "
-                           "packets_offset_buffer");
-            }
-        }
-        if (pb->packets_payload_offset_buffer != NULL) {
-            if (SCCudaMemFreeHost(pb->packets_payload_offset_buffer) == -1) {
-                SCLogError(SC_ERR_CUDA_ERROR, "Error deallocating pagelocked memory: "
-                           "packets_payload_offset_buffer");
-            }
-        }
-
-        SCFree(pb);
-    }
-    if (SCCudaCtxPopCurrent(NULL) == -1){
-        SCLogError(SC_ERR_CUDA_ERROR, "Could not pop cuda context");
-    }
-    SCMutexUnlock(&dq->mutex_q);
-    SCCondSignal(&dq->cond_q);
-
-    return;
-}
-
-/**
- * \brief Function used to set the packet threshhold limit in the packets buffer.
- *
- * \param threshhold_override The threshhold limit for the packets_buffer.
- */
-void SCCudaPBSetBufferPacketThreshhold(uint32_t threshhold_override)
-{
-    buffer_packet_threshhold = threshhold_override;
-
-    return;
-}
-
-/**
- * \brief Function used to set the profile for cuda packet batcher.  Used
- *        for unittests alone.
- */
-void SCCudaPBSetProfile(char *profile_name)
-{
-    profile = SCCudaHlGetProfile("mpm");
-
-    return;
-}
-
-/**
- * \brief Used to inform the cuda packet batcher that packet batching shouldn't
- *        be done anymore and set the flag to indicate this.  We also need to
- *        signal the cuda batcher data inq, in case it is waiting on the inq
- *        for a new free packet buffer.
- */
-void SCCudaPBKillBatchingPackets(void)
-{
-    run_batcher = 0;
-    SCDQDataQueue *dq = &data_queues[tmq_inq->id];
-    SCCondSignal(&dq->cond_q);
-
-    return;
-}
-
-void SCCudaPBRunningTests(int status)
-{
-    unittest_mode = status;
-}
-
-/***********************************Unittests**********************************/
-
-#ifdef UNITTESTS
-
-int SCCudaPBTest01(void)
-{
-#define ALIGN_UP(offset, alignment) \
-    (offset) = ((offset) + (alignment) - 1) & ~((alignment) - 1)
-
-    uint8_t raw_eth[] = {
-        0x00, 0x25, 0x00, 0x9e, 0xfa, 0xfe, 0x00, 0x02,
-        0xcf, 0x74, 0xfe, 0xe1, 0x08, 0x00, 0x45, 0x00,
-        0x01, 0xcc, 0xcb, 0x91, 0x00, 0x00, 0x34, 0x06,
-        0xdf, 0xa8, 0xd1, 0x55, 0xe3, 0x67, 0xc0, 0xa8,
-        0x64, 0x8c, 0x00, 0x50, 0xc0, 0xb7, 0xd1, 0x11,
-        0xed, 0x63, 0x81, 0xa9, 0x9a, 0x05, 0x80, 0x18,
-        0x00, 0x75, 0x0a, 0xdd, 0x00, 0x00, 0x01, 0x01,
-        0x08, 0x0a, 0x09, 0x8a, 0x06, 0xd0, 0x12, 0x21,
-        0x2a, 0x3b, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31,
-        0x2e, 0x31, 0x20, 0x33, 0x30, 0x32, 0x20, 0x46,
-        0x6f, 0x75, 0x6e, 0x64, 0x0d, 0x0a, 0x4c, 0x6f,
-        0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20,
-        0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
-        0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-        0x65, 0x2e, 0x65, 0x73, 0x2f, 0x0d, 0x0a, 0x43,
-        0x61, 0x63, 0x68, 0x65, 0x2d, 0x43, 0x6f, 0x6e,
-        0x74, 0x72, 0x6f, 0x6c, 0x3a, 0x20, 0x70, 0x72,
-        0x69, 0x76, 0x61, 0x74, 0x65, 0x0d, 0x0a, 0x43,
-        0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54,
-        0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78,
-        0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20,
-        0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d,
-        0x55, 0x54, 0x46, 0x2d, 0x38, 0x0d, 0x0a, 0x44,
-        0x61, 0x74, 0x65, 0x3a, 0x20, 0x4d, 0x6f, 0x6e,
-        0x2c, 0x20, 0x31, 0x34, 0x20, 0x53, 0x65, 0x70,
-        0x20, 0x32, 0x30, 0x30, 0x39, 0x20, 0x30, 0x38,
-        0x3a, 0x34, 0x38, 0x3a, 0x33, 0x31, 0x20, 0x47,
-        0x4d, 0x54, 0x0d, 0x0a, 0x53, 0x65, 0x72, 0x76,
-        0x65, 0x72, 0x3a, 0x20, 0x67, 0x77, 0x73, 0x0d,
-        0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-        0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a,
-        0x20, 0x32, 0x31, 0x38, 0x0d, 0x0a, 0x0d, 0x0a,
-        0x3c, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x3c, 0x48,
-        0x45, 0x41, 0x44, 0x3e, 0x3c, 0x6d, 0x65, 0x74,
-        0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65,
-        0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, 0x6f,
-        0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79,
-        0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74,
-        0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78,
-        0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x63,
-        0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75,
-        0x74, 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x0a, 0x3c,
-        0x54, 0x49, 0x54, 0x4c, 0x45, 0x3e, 0x33, 0x30,
-        0x32, 0x20, 0x4d, 0x6f, 0x76, 0x65, 0x64, 0x3c,
-        0x2f, 0x54, 0x49, 0x54, 0x4c, 0x45, 0x3e, 0x3c,
-        0x2f, 0x48, 0x45, 0x41, 0x44, 0x3e, 0x3c, 0x42,
-        0x4f, 0x44, 0x59, 0x3e, 0x0a, 0x3c, 0x48, 0x31,
-        0x3e, 0x33, 0x30, 0x32, 0x20, 0x4d, 0x6f, 0x76,
-        0x65, 0x64, 0x3c, 0x2f, 0x48, 0x31, 0x3e, 0x0a,
-        0x54, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75,
-        0x6d, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x61, 0x73,
-        0x20, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x0a, 0x3c,
-        0x41, 0x20, 0x48, 0x52, 0x45, 0x46, 0x3d, 0x22,
-        0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
-        0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-        0x65, 0x2e, 0x65, 0x73, 0x2f, 0x22, 0x3e, 0x68,
-        0x65, 0x72, 0x65, 0x3c, 0x2f, 0x41, 0x3e, 0x2e,
-        0x0d, 0x0a, 0x3c, 0x2f, 0x42, 0x4f, 0x44, 0x59,
-        0x3e, 0x3c, 0x2f, 0x48, 0x54, 0x4d, 0x4c, 0x3e,
-        0x0d, 0x0a };
-
-    int result = 0;
-    SCCudaPBThreadCtx *tctx = NULL;
-
-    Packet *p = SCMalloc(SIZE_OF_PACKET);
-    if (unlikely(p == NULL))
-    return 0;
-    DecodeThreadVars dtv;
-    ThreadVars tv;
-    ThreadVars tv_cuda_PB;
-    DetectEngineCtx *de_ctx = NULL;
-
-    SCCudaPBPacketsBuffer *pb = NULL;
-    SCCudaPBPacketDataForGPU *buff_packet = NULL;
-    SCDQDataQueue *dq = NULL;
-
-    uint32_t i = 0;
-
-    char *strings[] = {"test_one",
-                       "test_two",
-                       "test_three",
-                       "test_four",
-                       "test_five",
-                       "test_six",
-                       "test_seven",
-                       "test_eight",
-                       "test_nine",
-                       "test_ten"};
-
-    uint32_t packets_payload_offset_buffer[sizeof(strings)/sizeof(char *)];
-    memset(packets_payload_offset_buffer, 0, sizeof(packets_payload_offset_buffer));
-    uint32_t packets_offset_buffer[sizeof(strings)/sizeof(char *)];
-    memset(packets_offset_buffer, 0, sizeof(packets_offset_buffer));
-
-    uint32_t packets_total_payload_len = 0;
-    uint32_t packets_buffer_len = 0;
-
-    for (i = 0; i < sizeof(strings)/sizeof(char *); i++) {
-        packets_total_payload_len += strlen(strings[i]);
-    }
-
-    for (i = 1; i < sizeof(strings)/sizeof(char *); i++) {
-        packets_payload_offset_buffer[i] = packets_payload_offset_buffer[i - 1] + strlen(strings[i - 1]);
-        packets_offset_buffer[i] = packets_offset_buffer[i - 1] +
-            sizeof(SCCudaPBPacketDataForGPUNonPayload) + strlen(strings[i - 1]);
-        ALIGN_UP(packets_offset_buffer[i], sizeof(CUdeviceptr));
-    }
-    packets_buffer_len += packets_offset_buffer[(sizeof(strings)/sizeof(char *)) - 1] +
-        sizeof(SCCudaPBPacketDataForGPUNonPayload) + strlen(strings[(sizeof(strings)/sizeof(char *)) - 1]);
-
-    memset(p, 0, SIZE_OF_PACKET);
-    p->pkt = (uint8_t *)(p + 1);
-    memset(&dtv, 0, sizeof(DecodeThreadVars));
-    memset(&tv, 0, sizeof(ThreadVars));
-    memset(&tv_cuda_PB, 0, sizeof(ThreadVars));
-
-    FlowInitConfig(FLOW_QUIET);
-    DecodeEthernet(&tv, &dtv, p, raw_eth, sizeof(raw_eth), NULL);
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL) {
-        goto end;
-    }
-
-    de_ctx->mpm_matcher = MPM_B2G_CUDA;
-    de_ctx->flags |= DE_QUIET;
-
-    de_ctx->sig_list = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                               "content:\"test\"; sid:1;)");
-    if (de_ctx->sig_list == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    SigGroupBuild(de_ctx);
-
-    result = 1;
-
-    SCCudaPBSetUpQueuesAndBuffers();
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 10);
-    SCCudaPBRunningTests(1);
-    SCCudaPBThreadInit(&tv_cuda_PB, de_ctx, (void *)&tctx);
-    SCCudaPBSetBufferPacketThreshhold(sizeof(strings)/sizeof(char *));
-
-    p->payload = (uint8_t *)strings[0];
-    p->payload_len = strlen(strings[0]);
-    SCCudaPBBatchPackets(NULL, p, tctx, NULL, NULL);
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    p->payload = (uint8_t *)strings[1];
-    p->payload_len = strlen(strings[1]);
-    SCCudaPBBatchPackets(NULL, p, tctx, NULL, NULL);
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    p->payload = (uint8_t *)strings[2];
-    p->payload_len = strlen(strings[2]);
-    SCCudaPBBatchPackets(NULL, p, tctx, NULL, NULL);
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    p->payload = (uint8_t *)strings[3];
-    p->payload_len = strlen(strings[3]);
-    SCCudaPBBatchPackets(NULL, p, tctx, NULL, NULL);
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    p->payload = (uint8_t *)strings[4];
-    p->payload_len = strlen(strings[4]);
-    SCCudaPBBatchPackets(NULL, p, tctx, NULL, NULL);
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    p->payload = (uint8_t *)strings[5];
-    p->payload_len = strlen(strings[5]);
-    SCCudaPBBatchPackets(NULL, p, tctx, NULL, NULL);
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    p->payload = (uint8_t *)strings[6];
-    p->payload_len = strlen(strings[6]);
-    SCCudaPBBatchPackets(NULL, p, tctx, NULL, NULL);
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    p->payload = (uint8_t *)strings[7];
-    p->payload_len = strlen(strings[7]);
-    SCCudaPBBatchPackets(NULL, p, tctx, NULL, NULL);
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    p->payload = (uint8_t *)strings[8];
-    p->payload_len = strlen(strings[8]);
-    SCCudaPBBatchPackets(NULL, p, tctx, NULL, NULL);
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    p->payload = (uint8_t *)strings[9];
-    p->payload_len = strlen(strings[9]);
-    SCCudaPBBatchPackets(NULL, p, tctx, NULL, NULL);
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 1);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 8);
-
-    dq = &data_queues[tmq_outq->id];
-    pb = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(dq);
-    if (pb == NULL) {
-        result = 0;
-        goto end;
-    }
-    result &= (dq->len == 0);
-    result &= (pb->nop_in_buffer == 10);
-    if (result == 0)
-        goto end;
-
-    for (i = 0; i < pb->nop_in_buffer; i++) {
-        buff_packet = (SCCudaPBPacketDataForGPU *)(pb->packets_buffer + pb->packets_offset_buffer[i]);
-        result &= (strlen(strings[i]) == buff_packet->payload_len);
-        result &= (memcmp(strings[i], buff_packet->payload, buff_packet->payload_len) == 0);
-        if (result == 0)
-            goto end;
-        result &= (packets_payload_offset_buffer[i] == pb->packets_payload_offset_buffer[i]);
-        result &= (packets_offset_buffer[i] == pb->packets_offset_buffer[i]);
-    }
-    result &= (packets_total_payload_len == pb->packets_total_payload_len);
-    result &= (packets_buffer_len == pb->packets_buffer_len);
-
- end:
-    SCCudaPBCleanUpQueuesAndBuffers();
-    if (de_ctx) {
-        SigGroupCleanup(de_ctx);
-        SigCleanSignatures(de_ctx);
-        DetectEngineCtxFree(de_ctx);
-    }
-
-    SCCudaPBThreadDeInit(NULL, tctx);
-    SCFree(p);
-    return result;
-}
-
-int SCCudaPBTest02(void)
-{
-    uint8_t raw_eth[] = {
-        0x00, 0x25, 0x00, 0x9e, 0xfa, 0xfe, 0x00, 0x02,
-        0xcf, 0x74, 0xfe, 0xe1, 0x08, 0x00, 0x45, 0x00,
-        0x01, 0xcc, 0xcb, 0x91, 0x00, 0x00, 0x34, 0x06,
-        0xdf, 0xa8, 0xd1, 0x55, 0xe3, 0x67, 0xc0, 0xa8,
-        0x64, 0x8c, 0x00, 0x50, 0xc0, 0xb7, 0xd1, 0x11,
-        0xed, 0x63, 0x81, 0xa9, 0x9a, 0x05, 0x80, 0x18,
-        0x00, 0x75, 0x0a, 0xdd, 0x00, 0x00, 0x01, 0x01,
-        0x08, 0x0a, 0x09, 0x8a, 0x06, 0xd0, 0x12, 0x21,
-        0x2a, 0x3b, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31,
-        0x2e, 0x31, 0x20, 0x33, 0x30, 0x32, 0x20, 0x46,
-        0x6f, 0x75, 0x6e, 0x64, 0x0d, 0x0a, 0x4c, 0x6f,
-        0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20,
-        0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
-        0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-        0x65, 0x2e, 0x65, 0x73, 0x2f, 0x0d, 0x0a, 0x43,
-        0x61, 0x63, 0x68, 0x65, 0x2d, 0x43, 0x6f, 0x6e,
-        0x74, 0x72, 0x6f, 0x6c, 0x3a, 0x20, 0x70, 0x72,
-        0x69, 0x76, 0x61, 0x74, 0x65, 0x0d, 0x0a, 0x43,
-        0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54,
-        0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78,
-        0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20,
-        0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d,
-        0x55, 0x54, 0x46, 0x2d, 0x38, 0x0d, 0x0a, 0x44,
-        0x61, 0x74, 0x65, 0x3a, 0x20, 0x4d, 0x6f, 0x6e,
-        0x2c, 0x20, 0x31, 0x34, 0x20, 0x53, 0x65, 0x70,
-        0x20, 0x32, 0x30, 0x30, 0x39, 0x20, 0x30, 0x38,
-        0x3a, 0x34, 0x38, 0x3a, 0x33, 0x31, 0x20, 0x47,
-        0x4d, 0x54, 0x0d, 0x0a, 0x53, 0x65, 0x72, 0x76,
-        0x65, 0x72, 0x3a, 0x20, 0x67, 0x77, 0x73, 0x0d,
-        0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-        0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a,
-        0x20, 0x32, 0x31, 0x38, 0x0d, 0x0a, 0x0d, 0x0a,
-        0x3c, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x3c, 0x48,
-        0x45, 0x41, 0x44, 0x3e, 0x3c, 0x6d, 0x65, 0x74,
-        0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65,
-        0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, 0x6f,
-        0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79,
-        0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74,
-        0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78,
-        0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x63,
-        0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75,
-        0x74, 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x0a, 0x3c,
-        0x54, 0x49, 0x54, 0x4c, 0x45, 0x3e, 0x33, 0x30,
-        0x32, 0x20, 0x4d, 0x6f, 0x76, 0x65, 0x64, 0x3c,
-        0x2f, 0x54, 0x49, 0x54, 0x4c, 0x45, 0x3e, 0x3c,
-        0x2f, 0x48, 0x45, 0x41, 0x44, 0x3e, 0x3c, 0x42,
-        0x4f, 0x44, 0x59, 0x3e, 0x0a, 0x3c, 0x48, 0x31,
-        0x3e, 0x33, 0x30, 0x32, 0x20, 0x4d, 0x6f, 0x76,
-        0x65, 0x64, 0x3c, 0x2f, 0x48, 0x31, 0x3e, 0x0a,
-        0x54, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75,
-        0x6d, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x61, 0x73,
-        0x20, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x0a, 0x3c,
-        0x41, 0x20, 0x48, 0x52, 0x45, 0x46, 0x3d, 0x22,
-        0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
-        0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-        0x65, 0x2e, 0x65, 0x73, 0x2f, 0x22, 0x3e, 0x68,
-        0x65, 0x72, 0x65, 0x3c, 0x2f, 0x41, 0x3e, 0x2e,
-        0x0d, 0x0a, 0x3c, 0x2f, 0x42, 0x4f, 0x44, 0x59,
-        0x3e, 0x3c, 0x2f, 0x48, 0x54, 0x4d, 0x4c, 0x3e,
-        0x0d, 0x0a };
-
-    int result = 0;
-    const char *string = NULL;
-    SCCudaPBThreadCtx *tctx = NULL;
-
-    Packet *p = SCMalloc(SIZE_OF_PACKET);
-    if (unlikely(p == NULL))
-        return 0;
-    DecodeThreadVars dtv;
-    ThreadVars tv;
-    ThreadVars tv_cuda_PB;
-    DetectEngineCtx *de_ctx = NULL;
-
-    SCCudaPBPacketsBuffer *pb = NULL;
-    SCDQDataQueue *dq = NULL;
-
-
-    memset(p, 0, SIZE_OF_PACKET);
-    p->pkt = (uint8_t *)(p + 1);
-    memset(&dtv, 0, sizeof(DecodeThreadVars));
-    memset(&tv, 0, sizeof(ThreadVars));
-    memset(&tv_cuda_PB, 0, sizeof(ThreadVars));
-
-    FlowInitConfig(FLOW_QUIET);
-    DecodeEthernet(&tv, &dtv, p, raw_eth, sizeof(raw_eth), NULL);
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL) {
-        goto end;
-    }
-
-    de_ctx->mpm_matcher = MPM_B2G_CUDA;
-    de_ctx->flags |= DE_QUIET;
-
-    de_ctx->sig_list = SigInit(de_ctx, "alert tcp any 5555 -> any any (msg:\"Bamboo\"; "
-                               "content:\"test\"; sid:1;)");
-    if (de_ctx->sig_list == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    SigGroupBuild(de_ctx);
-
-    SCCudaPBSetUpQueuesAndBuffers();
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 10);
-    SCCudaPBRunningTests(1);
-    SCCudaPBThreadInit(&tv_cuda_PB, de_ctx, (void *)&tctx);
-
-    result = 1;
-
-    string = "test_one";
-    p->payload = (uint8_t *)string;
-    p->payload_len = strlen(string);
-    SCCudaPBBatchPackets(NULL, p, tctx, NULL, NULL);
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    pb = tctx->curr_pb;
-    result &= (pb->nop_in_buffer == 0);
-
- end:
-    SCCudaPBCleanUpQueuesAndBuffers();
-    if (de_ctx) {
-        SigGroupCleanup(de_ctx);
-        SigCleanSignatures(de_ctx);
-        DetectEngineCtxFree(de_ctx);
-    }
-
-    SCCudaPBThreadDeInit(NULL, tctx);
-    SCFree(p);
-    return result;
-}
-
-#endif /* UNITTESTS */
-
-void SCCudaPBRegisterTests(void)
-{
-
-#ifdef UNITTESTS
-    UtRegisterTest("SCCudaPBTest01", SCCudaPBTest01, 1);
-    UtRegisterTest("SCCudaPBTest02", SCCudaPBTest02, 1);
-#endif
-
-    return;
-}
-
-#endif /* __SC_CUDA_SUPPORT__ */
diff --git a/src/cuda-packet-batcher.h b/src/cuda-packet-batcher.h
deleted file mode 100644 (file)
index 277260c..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/**
- * Copyright (c) 2010 Open Information Security Foundation.
- *
- * \author Anoop Saldanha <anoopsaldanha@gmail.com>
- */
-
-#ifndef __CUDA_PACKET_BATCHER_H__
-#define __CUDA_PACKET_BATCHER_H__
-
-#include "suricata-common.h"
-
-/* compile in, only if we have a CUDA enabled on this machine */
-#ifdef __SC_CUDA_SUPPORT__
-
-#include "util-cuda.h"
-
-/* The min no of packets that we allot the buffer for.  We will make
- * this user configurable(yaml) based on the traffic they expect.  Either ways
- * for a low/medium traffic network with occasional sgh matches, we shouldn't
- * be enabling cuda.  We will only end up screwing performance */
-#define SC_CUDA_PB_MIN_NO_OF_PACKETS 4000
-
-/* the maximum payload size we're sending to the card (defined in decode.h) */
-#define SC_CUDA_PB_MAX_PAYLOAD_SIZE CUDA_MAX_PAYLOAD_SIZE
-
-/**
- * \brief Implement the template SCDQGenericQData to transfer the cuda
- *        packet buffer from the cuda batcher thread to the dispatcher
- *        thread using the queue SCDQDataQueue.
- */
-typedef struct SCCudaPBPacketsBuffer_ {
-    /* these members from the template SCDQGenericQData that have to be
-     * compulsarily implemented */
-    struct SCDQGenericQData_ *next;
-    struct SCDQGenericQData_ *prev;
-    /* if we want to consider this pointer as the head of a list, this var
-     * holds the no of elements in the list */
-    //uint16_t len;
-    /* in case this data instance is the head of a list, we can refer the
-     * bottomost instance directly using this var */
-    //struct SCDQGenericaQData *bot;
-
-    /* our own members from here on*/
-
-    /* current count of packets held in packets_buffer.  nop = no of packets */
-    uint32_t nop_in_buffer;
-    /* the packets buffer.  We will assign buffer for SC_CUDA_PB_MIN_NO_OF_PACKETS
-     * packets.  Basically the size of this buffer would be
-     * SC_CUDA_PB_MIN_NO_OF_PACKETS * sizeof(SCCudaPBPacketDataForGPU), so that
-     * we can hold mininum SC_CUDA_PB_MIN_NO_OF_PACKETS */
-    uint8_t *packets_buffer;
-    /* length of data buffered so far in packets_buffer, which would be sent
-     * to the GPU.  We will need this to copy the buffered data from the
-     * packets_buffer here on the host, to the buffer on the GPU */
-    uint32_t packets_buffer_len;
-    /* packet offset within the packets_buffer.  Each packet would be stored in
-     * packets buffer at a particular offset.  This buffer would indicate the
-     * offset of a packet inside the packet buffer.  We will allot space to hold
-     * offsets for SC_CUDA_PB_MIN_NO_OF_PACKETS packets
-     * \todo change it to holds offsets for more than SC_CUDA_PB_MIN_NO_OF_PACKETS
-     * when we use the buffer to hold packets based on the remaining size in the
-     * buffer rather than on a fixed limit like SC_CUDA_PB_MIN_NO_OF_PACKETS */
-    uint32_t *packets_offset_buffer;
-
-    /* the total packet payload lengths buffered so far.  We will need this to
-     * transfer the total length of the results buffer that has to be transferred
-     * back from the gpu */
-    uint32_t packets_total_payload_len;
-    /* the payload offsets for the different payload lengths buffered in.  For
-     * example if we buffer 4 packets of lengths 3, 4, 5, 6, we will store four
-     * offsets in the buffer {0, 3, 7, 12, 18} */
-    uint32_t *packets_payload_offset_buffer;
-
-    /* packet addresses for all the packets buffered in the packets_buffer.  We
-     * will allot space to hold packet addresses for SC_CUDA_PB_MIN_NO_OF_PACKETS.
-     * We will need this, so that the cuda mpm b2g dispatcher thread can inform
-     * and store the b2g cuda mpm results for the packet*/
-    Packet **packets_address_buffer;
-} SCCudaPBPacketsBuffer;
-
-/**
- * \brief Structure for each packet that is being batched to the GPU.
- */
-typedef struct SCCudaPBPacketDataForGPU_ {
-    /* holds B2gCudaCtx->m */
-    unsigned int m;
-    /* holds B2gCudaCtx->cuda_B2g */
-    CUdeviceptr table;
-    /* holds the length of the payload */
-    unsigned int payload_len;
-    /* holds the payload.  While we actually store the payload in the buffer,
-     * we may not end up using the entire 1480 bytes if the payload is smaller */
-    uint8_t payload[SC_CUDA_PB_MAX_PAYLOAD_SIZE];
-} SCCudaPBPacketDataForGPU;
-
-/**
- * \brief Same as struct SCCudaPBPacketDataForGPU_ except for the payload part.
- *        We will need this for calculating the size of the non-payload part
- *        of the packet data to be buffered.
- */
-typedef struct SCCudaPBPacketDataForGPUNonPayload_ {
-    /* holds B2gCudaCtx->m */
-    unsigned int m;
-    /* holds B2gCudaCtx->cuda_B2g */
-    CUdeviceptr table;
-    /* holds the length of the payload */
-    unsigned int payload_len;
-} SCCudaPBPacketDataForGPUNonPayload;
-
-/**
- * \brief The cuda packet batcher threading context.
- */
-typedef struct SCCudaPBThreadCtx_ {
-    /* we need the detection engine context to retrieve the sgh while we start
-     * receiving and batching the packets */
-    DetectEngineCtx *de_ctx;
-
-    /* packets buffer currently in use inside the cuda batcher thread */
-    SCCudaPBPacketsBuffer *curr_pb;
-} SCCudaPBThreadCtx;
-
-SCCudaPBPacketsBuffer *SCCudaPBAllocSCCudaPBPacketsBuffer(void);
-void SCCudaPBDeAllocSCCudaPBPacketsBuffer(SCCudaPBPacketsBuffer *);
-
-void SCCudaPBSetBufferPacketThreshhold(uint32_t);
-void SCCudaPBCleanUpQueuesAndBuffers(void);
-void SCCudaPBSetUpQueuesAndBuffers(void);
-void SCCudaPBKillBatchingPackets(void);
-
-TmEcode SCCudaPBBatchPackets(ThreadVars *, Packet *, void *, PacketQueue *, PacketQueue *);
-TmEcode SCCudaPBThreadInit(ThreadVars *, void *, void **);
-TmEcode SCCudaPBThreadDeInit(ThreadVars *, void *);
-void SCCudaPBThreadExitStats(ThreadVars *, void *);
-void SCCudaPBRegisterTests(void);
-
-void TmModuleCudaPacketBatcherRegister(void);
-
-void *SCCudaPBTmThreadsSlot1(void *);
-
-void SCCudaPBRunningTests(int);
-void SCCudaPBSetProfile(char *);
-
-#endif /* __SC_CUDA_SUPPORT__ */
-
-#endif /* __CUDA_PACKET_BATCHER_H__ */
diff --git a/src/cuda-ptxdump.h b/src/cuda-ptxdump.h
deleted file mode 100644 (file)
index 45ccdc6..0000000
+++ /dev/null
@@ -1,2550 +0,0 @@
-/* Auto-generated by ptxdump.py DO NOT EDIT
-*
-* This file contains the ptx code of the Cuda kernels.
-* A kernel is identified by its name and the compute capability (e.g. _sm_10).
-*/
-#ifdef __SC_CUDA_SUPPORT__
-#ifndef __ptxdump_h__
-#define __ptxdump_h__
-
-const unsigned char util_mpm_b2g_cuda_kernel_sm_10[6760] = {
-0x09, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x34, 0x0a, 0x09, 0x2e, 
-0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x73, 0x6d, 0x5f, 0x31, 0x30, 0x2c, 0x20, 0x6d, 0x61, 
-0x70, 0x5f, 0x66, 0x36, 0x34, 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x33, 0x32, 0x0a, 0x09, 0x2f, 0x2f, 
-0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x6f, 
-0x70, 0x65, 0x6e, 0x36, 0x34, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x2f, 0x62, 0x65, 0x0a, 0x09, 0x2f, 
-0x2f, 0x20, 0x6e, 0x76, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x63, 0x20, 0x33, 0x2e, 0x32, 0x20, 0x62, 
-0x75, 0x69, 0x6c, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x2d, 
-0x30, 0x33, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x69, 0x6e, 0x67, 
-0x20, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x74, 0x6d, 0x70, 0x78, 0x66, 0x74, 0x5f, 0x30, 0x30, 0x30, 
-0x30, 0x30, 0x63, 0x36, 0x37, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x39, 
-0x5f, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x70, 0x70, 0x33, 0x2e, 0x69, 
-0x20, 0x28, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x63, 0x63, 0x42, 0x49, 0x23, 0x2e, 0x38, 0x63, 0x4c, 
-0x33, 0x78, 0x63, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 
-0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 
-0x09, 0x2f, 0x2f, 0x20, 0x20, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3a, 0x70, 0x74, 0x78, 0x2c, 
-0x20, 0x49, 0x53, 0x41, 0x3a, 0x73, 0x6d, 0x5f, 0x31, 0x30, 0x2c, 0x20, 0x45, 0x6e, 0x64, 0x69, 
-0x61, 0x6e, 0x3a, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x2c, 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 
-0x65, 0x72, 0x20, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0x33, 0x32, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x20, 
-0x2d, 0x4f, 0x33, 0x09, 0x28, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 
-0x6e, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x67, 
-0x30, 0x09, 0x28, 0x44, 0x65, 0x62, 0x75, 0x67, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x29, 0x0a, 
-0x09, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x6d, 0x32, 0x09, 0x28, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 
-0x20, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x09, 0x2e, 0x66, 
-0x69, 0x6c, 0x65, 0x09, 0x31, 0x09, 0x22, 0x3c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2d, 
-0x6c, 0x69, 0x6e, 0x65, 0x3e, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x09, 
-0x22, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x74, 0x6d, 0x70, 0x78, 0x66, 0x74, 0x5f, 0x30, 0x30, 0x30, 
-0x30, 0x30, 0x63, 0x36, 0x37, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x38, 
-0x5f, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x75, 0x64, 0x61, 0x66, 0x65, 
-0x32, 0x2e, 0x67, 0x70, 0x75, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x33, 0x09, 
-0x22, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x75, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x34, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x69, 0x62, 
-0x2f, 0x67, 0x63, 0x63, 0x2f, 0x69, 0x36, 0x38, 0x36, 0x2d, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2d, 
-0x67, 0x6e, 0x75, 0x2f, 0x34, 0x2e, 0x34, 0x2e, 0x35, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 
-0x65, 0x2f, 0x73, 0x74, 0x64, 0x64, 0x65, 0x66, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 
-0x6c, 0x65, 0x09, 0x35, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x72, 0x74, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 
-0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x36, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 
-0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 
-0x75, 0x64, 0x65, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x37, 0x09, 0x22, 0x2f, 0x75, 
-0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 
-0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x62, 0x75, 0x69, 
-0x6c, 0x74, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 
-0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 
-0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 
-0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x39, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x30, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 
-0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x31, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 
-0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x32, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x33, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 
-0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 
-0x72, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x34, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x63, 0x72, 0x74, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 
-0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x35, 0x09, 0x22, 
-0x2f, 0x75, 0x73, 0x72, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x62, 0x69, 0x74, 
-0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x36, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 
-0x64, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x37, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x66, 0x65, 0x74, 
-0x63, 0x68, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 
-0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x39, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 
-0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 
-0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x66, 0x75, 0x6e, 
-0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 
-0x09, 0x32, 0x30, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 
-0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 
-0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 
-0x74, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x31, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x32, 0x09, 0x22, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 
-0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 
-0x5f, 0x31, 0x31, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 
-0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 
-0x33, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 
-0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 
-0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x31, 0x32, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 
-0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 
-0x6c, 0x65, 0x09, 0x32, 0x34, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 
-0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 
-0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x31, 0x33, 0x5f, 0x64, 0x6f, 0x75, 0x62, 
-0x6c, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x35, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x32, 0x30, 0x5f, 
-0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x36, 0x09, 0x22, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 
-0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 
-0x5f, 0x32, 0x30, 0x5f, 0x69, 0x6e, 0x74, 0x72, 0x69, 0x6e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x68, 
-0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x37, 0x09, 0x22, 0x2f, 0x75, 0x73, 
-0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 
-0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x75, 0x72, 0x66, 
-0x61, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 
-0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 
-0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 
-0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 
-0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x64, 0x62, 0x6c, 0x5f, 0x70, 0x74, 
-0x78, 0x31, 0x2e, 0x68, 0x22, 0x0a, 0x0a, 0x0a, 0x09, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 
-0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 
-0x4d, 0x71, 0x20, 0x28, 0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 
-0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 
-0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 
-0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 
-0x6b, 0x65, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 
-0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 
-0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 
-0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 
-0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 
-0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 
-0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 
-0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 
-0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x73, 
-0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 
-0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 
-0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 
-0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x6e, 0x6f, 0x70, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 0x70, 
-0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 
-0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 
-0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 
-0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 
-0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x25, 0x72, 0x68, 0x3c, 0x36, 
-0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x25, 0x72, 
-0x3c, 0x36, 0x34, 0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x70, 0x72, 0x65, 
-0x64, 0x20, 0x25, 0x70, 0x3c, 0x31, 0x30, 0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 
-0x33, 0x09, 0x35, 0x33, 0x09, 0x30, 0x0a, 0x24, 0x4c, 0x44, 0x57, 0x62, 0x65, 0x67, 0x69, 0x6e, 
-0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 
-0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 
-0x72, 0x68, 0x31, 0x2c, 0x20, 0x25, 0x63, 0x74, 0x61, 0x69, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 
-0x6d, 0x75, 0x6c, 0x2e, 0x77, 0x69, 0x64, 0x65, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 
-0x31, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x3b, 0x0a, 0x09, 0x63, 0x76, 
-0x74, 0x2e, 0x75, 0x33, 0x32, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 0x32, 0x2c, 0x20, 
-0x25, 0x74, 0x69, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x3b, 
-0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x34, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 
-0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 
-0x44, 0x4d, 0x71, 0x5f, 0x6e, 0x6f, 0x70, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 
-0x67, 0x74, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x2c, 0x20, 0x25, 0x72, 0x33, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x31, 0x20, 0x62, 0x72, 0x61, 
-0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x35, 0x36, 0x33, 0x34, 0x3b, 0x0a, 0x09, 0x62, 
-0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x42, 0x42, 0x31, 0x37, 0x5f, 0x42, 
-0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 
-0x71, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x35, 0x36, 0x33, 0x34, 0x3a, 0x0a, 0x09, 
-0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x32, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 
-0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x2c, 0x20, 0x25, 0x72, 
-0x33, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 
-0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 
-0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 
-0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x37, 0x2c, 0x20, 
-0x25, 0x72, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 
-0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x38, 0x2c, 0x20, 0x5b, 
-0x25, 0x72, 0x37, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 
-0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x39, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 
-0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 
-0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 
-0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x39, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x33, 
-0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x30, 0x2b, 0x30, 
-0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x35, 0x09, 0x30, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x31, 0x32, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x30, 0x2b, 0x38, 0x5d, 0x3b, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 
-0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x30, 0x2b, 0x34, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 
-0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x37, 0x09, 0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 
-0x31, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 
-0x35, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x34, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 
-0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 
-0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 
-0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 
-0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 
-0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x37, 0x2c, 0x20, 
-0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 
-0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 
-0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 
-0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 
-0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x38, 0x2c, 0x20, 0x25, 
-0x72, 0x31, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 
-0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x39, 0x2c, 0x20, 
-0x5b, 0x25, 0x72, 0x31, 0x38, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x39, 0x2c, 0x20, 
-0x25, 0x72, 0x33, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x32, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x30, 0x2c, 0x20, 0x32, 0x3b, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x32, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x75, 
-0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x31, 
-0x32, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x6c, 0x74, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 
-0x72, 0x31, 0x34, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x32, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x39, 0x34, 0x37, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x30, 
-0x2c, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x32, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x32, 0x2c, 0x20, 0x32, 0x3b, 0x0a, 0x09, 
-0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x32, 0x36, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 
-0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 
-0x4d, 0x71, 0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 
-0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5d, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x31, 
-0x36, 0x20, 0x09, 0x25, 0x72, 0x68, 0x32, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 
-0x3e, 0x20, 0x4c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 
-0x20, 0x38, 0x33, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x38, 0x33, 0x09, 0x30, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x37, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x32, 0x38, 
-0x2c, 0x20, 0x5b, 0x25, 0x72, 0x32, 0x37, 0x2b, 0x31, 0x32, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 
-0x6f, 0x63, 0x09, 0x33, 0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 
-0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x36, 0x2c, 0x20, 0x5b, 
-0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 
-0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x67, 0x5f, 
-0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 0x61, 0x62, 0x6c, 
-0x65, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x38, 0x33, 0x09, 0x30, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x39, 0x2c, 
-0x20, 0x25, 0x72, 0x32, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x30, 
-0x2c, 0x20, 0x5b, 0x25, 0x72, 0x32, 0x39, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 
-0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x31, 0x2c, 
-0x20, 0x5b, 0x25, 0x72, 0x32, 0x37, 0x2b, 0x31, 0x31, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x31, 
-0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 
-0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 
-0x33, 0x32, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x33, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x33, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 
-0x09, 0x6f, 0x72, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x35, 0x2c, 0x20, 0x25, 
-0x72, 0x33, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 
-0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x36, 0x2c, 0x20, 0x25, 0x72, 
-0x33, 0x35, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x33, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x33, 
-0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x33, 0x37, 0x2b, 0x30, 
-0x5d, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 
-0x39, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x25, 
-0x72, 0x33, 0x39, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x33, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 
-0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 
-0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 0x33, 0x2c, 0x20, 
-0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 
-0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 
-0x38, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 
-0x09, 0x33, 0x09, 0x38, 0x37, 0x09, 0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x34, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x2c, 0x20, 0x25, 0x72, 
-0x31, 0x31, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x34, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x31, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 
-0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 
-0x70, 0x3e, 0x20, 0x4c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 
-0x65, 0x20, 0x39, 0x30, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x30, 0x09, 
-0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x30, 
-0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x72, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x34, 0x34, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 
-0x65, 0x71, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x33, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x34, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x34, 0x20, 0x62, 
-0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3b, 0x0a, 
-0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 
-0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 
-0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 
-0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x73, 0x65, 
-0x74, 0x70, 0x2e, 0x6c, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x35, 0x2c, 0x20, 
-0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 
-0x35, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x37, 0x30, 
-0x36, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 
-0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 
-0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 
-0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x6f, 
-0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x30, 0x3b, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x74, 
-0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 
-0x37, 0x30, 0x36, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 
-0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 
-0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 
-0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 
-0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x35, 0x09, 0x30, 0x0a, 0x09, 
-0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 0x68, 0x33, 0x2c, 0x20, 0x25, 
-0x72, 0x68, 0x32, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 
-0x72, 0x68, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x33, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x6d, 
-0x6f, 0x76, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 0x68, 0x32, 0x2c, 0x20, 0x25, 0x72, 
-0x68, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x77, 0x69, 0x64, 0x65, 0x2e, 0x75, 0x31, 
-0x36, 0x20, 0x09, 0x25, 0x72, 0x34, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x33, 0x2c, 0x20, 0x32, 
-0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x36, 
-0x2c, 0x20, 0x25, 0x72, 0x32, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x35, 0x3b, 0x0a, 0x09, 0x73, 
-0x74, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x5b, 0x25, 
-0x72, 0x34, 0x36, 0x2b, 0x32, 0x5d, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3a, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 
-0x37, 0x39, 0x33, 0x38, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 
-0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 
-0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 
-0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 
-0x38, 0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x30, 0x09, 0x30, 
-0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x37, 0x2c, 
-0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x70, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x37, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x36, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 
-0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 
-0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 
-0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 
-0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 
-0x33, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x34, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x3b, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 
-0x72, 0x34, 0x39, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x34, 0x38, 0x2b, 0x31, 0x32, 0x5d, 0x3b, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x36, 
-0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 
-0x61, 0x62, 0x6c, 0x65, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 
-0x30, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x35, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 
-0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 
-0x25, 0x72, 0x35, 0x31, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x35, 0x30, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 
-0x72, 0x35, 0x32, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x34, 0x38, 0x2b, 0x31, 0x31, 0x5d, 0x3b, 0x0a, 
-0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x33, 0x2c, 0x20, 
-0x25, 0x72, 0x35, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 
-0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x35, 0x34, 0x2c, 
-0x20, 0x5b, 0x25, 0x72, 0x35, 0x33, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 
-0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x34, 0x2c, 
-0x20, 0x34, 0x3b, 0x0a, 0x09, 0x6f, 0x72, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 
-0x36, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x35, 0x3b, 0x0a, 0x09, 
-0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x37, 
-0x2c, 0x20, 0x25, 0x72, 0x35, 0x36, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x33, 0x2c, 
-0x20, 0x25, 0x72, 0x35, 0x37, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 
-0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x39, 0x2c, 0x20, 0x5b, 0x25, 0x72, 
-0x35, 0x38, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x36, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 
-0x09, 0x61, 0x6e, 0x64, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 
-0x25, 0x72, 0x35, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x30, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x31, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 
-0x73, 0x65, 0x74, 0x70, 0x2e, 0x6e, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x37, 
-0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x31, 0x3b, 0x0a, 0x09, 0x40, 
-0x25, 0x70, 0x37, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 
-0x36, 0x38, 0x32, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 0x3a, 0x0a, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x39, 0x31, 0x34, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 
-0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 
-0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 0x33, 0x2c, 
-0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 
-0x09, 0x31, 0x30, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x36, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x31, 
-0x35, 0x3b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 
-0x35, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x32, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 
-0x70, 0x2e, 0x67, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x38, 0x2c, 0x20, 0x25, 
-0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x38, 
-0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 
-0x3b, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x36, 0x31, 0x34, 0x36, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x39, 0x34, 
-0x37, 0x34, 0x3a, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 
-0x68, 0x32, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x31, 0x34, 
-0x36, 0x3a, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x39, 0x09, 0x30, 
-0x0a, 0x09, 0x73, 0x74, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x31, 0x36, 0x20, 
-0x09, 0x5b, 0x25, 0x72, 0x32, 0x32, 0x2b, 0x30, 0x5d, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x32, 0x3b, 
-0x0a, 0x24, 0x4c, 0x42, 0x42, 0x31, 0x37, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 
-0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 
-0x63, 0x09, 0x33, 0x09, 0x31, 0x31, 0x31, 0x09, 0x30, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x3b, 
-0x0a, 0x24, 0x4c, 0x44, 0x57, 0x65, 0x6e, 0x64, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 
-0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x7d, 0x20, 
-0x2f, 0x2f, 0x20, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 
-0x42, 0x4e, 0x44, 0x4d, 0x71, 0x0a, 0x0a, 0x00
-};
-
-const unsigned char util_mpm_b2g_cuda_kernel_sm_11[6760] = {
-0x09, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x34, 0x0a, 0x09, 0x2e, 
-0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x73, 0x6d, 0x5f, 0x31, 0x31, 0x2c, 0x20, 0x6d, 0x61, 
-0x70, 0x5f, 0x66, 0x36, 0x34, 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x33, 0x32, 0x0a, 0x09, 0x2f, 0x2f, 
-0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x6f, 
-0x70, 0x65, 0x6e, 0x36, 0x34, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x2f, 0x62, 0x65, 0x0a, 0x09, 0x2f, 
-0x2f, 0x20, 0x6e, 0x76, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x63, 0x20, 0x33, 0x2e, 0x32, 0x20, 0x62, 
-0x75, 0x69, 0x6c, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x2d, 
-0x30, 0x33, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x69, 0x6e, 0x67, 
-0x20, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x74, 0x6d, 0x70, 0x78, 0x66, 0x74, 0x5f, 0x30, 0x30, 0x30, 
-0x30, 0x30, 0x63, 0x38, 0x62, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x39, 
-0x5f, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x70, 0x70, 0x33, 0x2e, 0x69, 
-0x20, 0x28, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x63, 0x63, 0x42, 0x49, 0x23, 0x2e, 0x4b, 0x4b, 0x51, 
-0x68, 0x4d, 0x33, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 
-0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 
-0x09, 0x2f, 0x2f, 0x20, 0x20, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3a, 0x70, 0x74, 0x78, 0x2c, 
-0x20, 0x49, 0x53, 0x41, 0x3a, 0x73, 0x6d, 0x5f, 0x31, 0x31, 0x2c, 0x20, 0x45, 0x6e, 0x64, 0x69, 
-0x61, 0x6e, 0x3a, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x2c, 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 
-0x65, 0x72, 0x20, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0x33, 0x32, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x20, 
-0x2d, 0x4f, 0x33, 0x09, 0x28, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 
-0x6e, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x67, 
-0x30, 0x09, 0x28, 0x44, 0x65, 0x62, 0x75, 0x67, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x29, 0x0a, 
-0x09, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x6d, 0x32, 0x09, 0x28, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 
-0x20, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x09, 0x2e, 0x66, 
-0x69, 0x6c, 0x65, 0x09, 0x31, 0x09, 0x22, 0x3c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2d, 
-0x6c, 0x69, 0x6e, 0x65, 0x3e, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x09, 
-0x22, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x74, 0x6d, 0x70, 0x78, 0x66, 0x74, 0x5f, 0x30, 0x30, 0x30, 
-0x30, 0x30, 0x63, 0x38, 0x62, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x38, 
-0x5f, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x75, 0x64, 0x61, 0x66, 0x65, 
-0x32, 0x2e, 0x67, 0x70, 0x75, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x33, 0x09, 
-0x22, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x75, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x34, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x69, 0x62, 
-0x2f, 0x67, 0x63, 0x63, 0x2f, 0x69, 0x36, 0x38, 0x36, 0x2d, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2d, 
-0x67, 0x6e, 0x75, 0x2f, 0x34, 0x2e, 0x34, 0x2e, 0x35, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 
-0x65, 0x2f, 0x73, 0x74, 0x64, 0x64, 0x65, 0x66, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 
-0x6c, 0x65, 0x09, 0x35, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x72, 0x74, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 
-0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x36, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 
-0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 
-0x75, 0x64, 0x65, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x37, 0x09, 0x22, 0x2f, 0x75, 
-0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 
-0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x62, 0x75, 0x69, 
-0x6c, 0x74, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 
-0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 
-0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 
-0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x39, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x30, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 
-0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x31, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 
-0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x32, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x33, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 
-0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 
-0x72, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x34, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x63, 0x72, 0x74, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 
-0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x35, 0x09, 0x22, 
-0x2f, 0x75, 0x73, 0x72, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x62, 0x69, 0x74, 
-0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x36, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 
-0x64, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x37, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x66, 0x65, 0x74, 
-0x63, 0x68, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 
-0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x39, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 
-0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 
-0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x66, 0x75, 0x6e, 
-0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 
-0x09, 0x32, 0x30, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 
-0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 
-0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 
-0x74, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x31, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x32, 0x09, 0x22, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 
-0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 
-0x5f, 0x31, 0x31, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 
-0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 
-0x33, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 
-0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 
-0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x31, 0x32, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 
-0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 
-0x6c, 0x65, 0x09, 0x32, 0x34, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 
-0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 
-0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x31, 0x33, 0x5f, 0x64, 0x6f, 0x75, 0x62, 
-0x6c, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x35, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x32, 0x30, 0x5f, 
-0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x36, 0x09, 0x22, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 
-0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 
-0x5f, 0x32, 0x30, 0x5f, 0x69, 0x6e, 0x74, 0x72, 0x69, 0x6e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x68, 
-0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x37, 0x09, 0x22, 0x2f, 0x75, 0x73, 
-0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 
-0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x75, 0x72, 0x66, 
-0x61, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 
-0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 
-0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 
-0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 
-0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x64, 0x62, 0x6c, 0x5f, 0x70, 0x74, 
-0x78, 0x31, 0x2e, 0x68, 0x22, 0x0a, 0x0a, 0x0a, 0x09, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 
-0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 
-0x4d, 0x71, 0x20, 0x28, 0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 
-0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 
-0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 
-0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 
-0x6b, 0x65, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 
-0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 
-0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 
-0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 
-0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 
-0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 
-0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 
-0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 
-0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x73, 
-0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 
-0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 
-0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 
-0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x6e, 0x6f, 0x70, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 0x70, 
-0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 
-0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 
-0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 
-0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 
-0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x25, 0x72, 0x68, 0x3c, 0x36, 
-0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x25, 0x72, 
-0x3c, 0x36, 0x34, 0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x70, 0x72, 0x65, 
-0x64, 0x20, 0x25, 0x70, 0x3c, 0x31, 0x30, 0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 
-0x33, 0x09, 0x35, 0x33, 0x09, 0x30, 0x0a, 0x24, 0x4c, 0x44, 0x57, 0x62, 0x65, 0x67, 0x69, 0x6e, 
-0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 
-0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 
-0x72, 0x68, 0x31, 0x2c, 0x20, 0x25, 0x63, 0x74, 0x61, 0x69, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 
-0x6d, 0x75, 0x6c, 0x2e, 0x77, 0x69, 0x64, 0x65, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 
-0x31, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x3b, 0x0a, 0x09, 0x63, 0x76, 
-0x74, 0x2e, 0x75, 0x33, 0x32, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 0x32, 0x2c, 0x20, 
-0x25, 0x74, 0x69, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x3b, 
-0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x34, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 
-0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 
-0x44, 0x4d, 0x71, 0x5f, 0x6e, 0x6f, 0x70, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 
-0x67, 0x74, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x2c, 0x20, 0x25, 0x72, 0x33, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x31, 0x20, 0x62, 0x72, 0x61, 
-0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x35, 0x36, 0x33, 0x34, 0x3b, 0x0a, 0x09, 0x62, 
-0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x42, 0x42, 0x31, 0x37, 0x5f, 0x42, 
-0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 
-0x71, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x35, 0x36, 0x33, 0x34, 0x3a, 0x0a, 0x09, 
-0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x32, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 
-0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x2c, 0x20, 0x25, 0x72, 
-0x33, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 
-0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 
-0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 
-0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x37, 0x2c, 0x20, 
-0x25, 0x72, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 
-0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x38, 0x2c, 0x20, 0x5b, 
-0x25, 0x72, 0x37, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 
-0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x39, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 
-0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 
-0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 
-0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x39, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x33, 
-0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x30, 0x2b, 0x30, 
-0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x35, 0x09, 0x30, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x31, 0x32, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x30, 0x2b, 0x38, 0x5d, 0x3b, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 
-0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x30, 0x2b, 0x34, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 
-0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x37, 0x09, 0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 
-0x31, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 
-0x35, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x34, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 
-0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 
-0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 
-0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 
-0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 
-0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x37, 0x2c, 0x20, 
-0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 
-0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 
-0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 
-0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 
-0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x38, 0x2c, 0x20, 0x25, 
-0x72, 0x31, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 
-0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x39, 0x2c, 0x20, 
-0x5b, 0x25, 0x72, 0x31, 0x38, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x39, 0x2c, 0x20, 
-0x25, 0x72, 0x33, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x32, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x30, 0x2c, 0x20, 0x32, 0x3b, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x32, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x75, 
-0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x31, 
-0x32, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x6c, 0x74, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 
-0x72, 0x31, 0x34, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x32, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x39, 0x34, 0x37, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x30, 
-0x2c, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x32, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x32, 0x2c, 0x20, 0x32, 0x3b, 0x0a, 0x09, 
-0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x32, 0x36, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 
-0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 
-0x4d, 0x71, 0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 
-0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5d, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x31, 
-0x36, 0x20, 0x09, 0x25, 0x72, 0x68, 0x32, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 
-0x3e, 0x20, 0x4c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 
-0x20, 0x38, 0x33, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x38, 0x33, 0x09, 0x30, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x37, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x32, 0x38, 
-0x2c, 0x20, 0x5b, 0x25, 0x72, 0x32, 0x37, 0x2b, 0x31, 0x32, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 
-0x6f, 0x63, 0x09, 0x33, 0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 
-0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x36, 0x2c, 0x20, 0x5b, 
-0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 
-0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x67, 0x5f, 
-0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 0x61, 0x62, 0x6c, 
-0x65, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x38, 0x33, 0x09, 0x30, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x39, 0x2c, 
-0x20, 0x25, 0x72, 0x32, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x30, 
-0x2c, 0x20, 0x5b, 0x25, 0x72, 0x32, 0x39, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 
-0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x31, 0x2c, 
-0x20, 0x5b, 0x25, 0x72, 0x32, 0x37, 0x2b, 0x31, 0x31, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x31, 
-0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 
-0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 
-0x33, 0x32, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x33, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x33, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 
-0x09, 0x6f, 0x72, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x35, 0x2c, 0x20, 0x25, 
-0x72, 0x33, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 
-0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x36, 0x2c, 0x20, 0x25, 0x72, 
-0x33, 0x35, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x33, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x33, 
-0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x33, 0x37, 0x2b, 0x30, 
-0x5d, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 
-0x39, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x25, 
-0x72, 0x33, 0x39, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x33, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 
-0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 
-0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 0x33, 0x2c, 0x20, 
-0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 
-0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 
-0x38, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 
-0x09, 0x33, 0x09, 0x38, 0x37, 0x09, 0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x34, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x2c, 0x20, 0x25, 0x72, 
-0x31, 0x31, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x34, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x31, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 
-0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 
-0x70, 0x3e, 0x20, 0x4c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 
-0x65, 0x20, 0x39, 0x30, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x30, 0x09, 
-0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x30, 
-0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x72, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x34, 0x34, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 
-0x65, 0x71, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x33, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x34, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x34, 0x20, 0x62, 
-0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3b, 0x0a, 
-0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 
-0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 
-0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 
-0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x73, 0x65, 
-0x74, 0x70, 0x2e, 0x6c, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x35, 0x2c, 0x20, 
-0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 
-0x35, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x37, 0x30, 
-0x36, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 
-0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 
-0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 
-0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x6f, 
-0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x30, 0x3b, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x74, 
-0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 
-0x37, 0x30, 0x36, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 
-0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 
-0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 
-0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 
-0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x35, 0x09, 0x30, 0x0a, 0x09, 
-0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 0x68, 0x33, 0x2c, 0x20, 0x25, 
-0x72, 0x68, 0x32, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 
-0x72, 0x68, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x33, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x6d, 
-0x6f, 0x76, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 0x68, 0x32, 0x2c, 0x20, 0x25, 0x72, 
-0x68, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x77, 0x69, 0x64, 0x65, 0x2e, 0x75, 0x31, 
-0x36, 0x20, 0x09, 0x25, 0x72, 0x34, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x33, 0x2c, 0x20, 0x32, 
-0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x36, 
-0x2c, 0x20, 0x25, 0x72, 0x32, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x35, 0x3b, 0x0a, 0x09, 0x73, 
-0x74, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x5b, 0x25, 
-0x72, 0x34, 0x36, 0x2b, 0x32, 0x5d, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3a, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 
-0x37, 0x39, 0x33, 0x38, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 
-0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 
-0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 
-0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 
-0x38, 0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x30, 0x09, 0x30, 
-0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x37, 0x2c, 
-0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x70, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x37, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x36, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 
-0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 
-0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 
-0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 
-0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 
-0x33, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x34, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x3b, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 
-0x72, 0x34, 0x39, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x34, 0x38, 0x2b, 0x31, 0x32, 0x5d, 0x3b, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x36, 
-0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 
-0x61, 0x62, 0x6c, 0x65, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 
-0x30, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x35, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 
-0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 
-0x25, 0x72, 0x35, 0x31, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x35, 0x30, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 
-0x72, 0x35, 0x32, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x34, 0x38, 0x2b, 0x31, 0x31, 0x5d, 0x3b, 0x0a, 
-0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x33, 0x2c, 0x20, 
-0x25, 0x72, 0x35, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 
-0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x35, 0x34, 0x2c, 
-0x20, 0x5b, 0x25, 0x72, 0x35, 0x33, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 
-0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x34, 0x2c, 
-0x20, 0x34, 0x3b, 0x0a, 0x09, 0x6f, 0x72, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 
-0x36, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x35, 0x3b, 0x0a, 0x09, 
-0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x37, 
-0x2c, 0x20, 0x25, 0x72, 0x35, 0x36, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x33, 0x2c, 
-0x20, 0x25, 0x72, 0x35, 0x37, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 
-0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x39, 0x2c, 0x20, 0x5b, 0x25, 0x72, 
-0x35, 0x38, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x36, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 
-0x09, 0x61, 0x6e, 0x64, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 
-0x25, 0x72, 0x35, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x30, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x31, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 
-0x73, 0x65, 0x74, 0x70, 0x2e, 0x6e, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x37, 
-0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x31, 0x3b, 0x0a, 0x09, 0x40, 
-0x25, 0x70, 0x37, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 
-0x36, 0x38, 0x32, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 0x3a, 0x0a, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x39, 0x31, 0x34, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 
-0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 
-0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 0x33, 0x2c, 
-0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 
-0x09, 0x31, 0x30, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x36, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x31, 
-0x35, 0x3b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 
-0x35, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x32, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 
-0x70, 0x2e, 0x67, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x38, 0x2c, 0x20, 0x25, 
-0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x38, 
-0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 
-0x3b, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x36, 0x31, 0x34, 0x36, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x39, 0x34, 
-0x37, 0x34, 0x3a, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 
-0x68, 0x32, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x31, 0x34, 
-0x36, 0x3a, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x39, 0x09, 0x30, 
-0x0a, 0x09, 0x73, 0x74, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x31, 0x36, 0x20, 
-0x09, 0x5b, 0x25, 0x72, 0x32, 0x32, 0x2b, 0x30, 0x5d, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x32, 0x3b, 
-0x0a, 0x24, 0x4c, 0x42, 0x42, 0x31, 0x37, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 
-0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 
-0x63, 0x09, 0x33, 0x09, 0x31, 0x31, 0x31, 0x09, 0x30, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x3b, 
-0x0a, 0x24, 0x4c, 0x44, 0x57, 0x65, 0x6e, 0x64, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 
-0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x7d, 0x20, 
-0x2f, 0x2f, 0x20, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 
-0x42, 0x4e, 0x44, 0x4d, 0x71, 0x0a, 0x0a, 0x00
-};
-
-const unsigned char util_mpm_b2g_cuda_kernel_sm_12[6760] = {
-0x09, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x34, 0x0a, 0x09, 0x2e, 
-0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x73, 0x6d, 0x5f, 0x31, 0x32, 0x2c, 0x20, 0x6d, 0x61, 
-0x70, 0x5f, 0x66, 0x36, 0x34, 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x33, 0x32, 0x0a, 0x09, 0x2f, 0x2f, 
-0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x6f, 
-0x70, 0x65, 0x6e, 0x36, 0x34, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x2f, 0x62, 0x65, 0x0a, 0x09, 0x2f, 
-0x2f, 0x20, 0x6e, 0x76, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x63, 0x20, 0x33, 0x2e, 0x32, 0x20, 0x62, 
-0x75, 0x69, 0x6c, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x2d, 
-0x30, 0x33, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x69, 0x6e, 0x67, 
-0x20, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x74, 0x6d, 0x70, 0x78, 0x66, 0x74, 0x5f, 0x30, 0x30, 0x30, 
-0x30, 0x30, 0x63, 0x61, 0x66, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x39, 
-0x5f, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x70, 0x70, 0x33, 0x2e, 0x69, 
-0x20, 0x28, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x63, 0x63, 0x42, 0x49, 0x23, 0x2e, 0x74, 0x48, 0x64, 
-0x42, 0x71, 0x54, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 
-0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 
-0x09, 0x2f, 0x2f, 0x20, 0x20, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3a, 0x70, 0x74, 0x78, 0x2c, 
-0x20, 0x49, 0x53, 0x41, 0x3a, 0x73, 0x6d, 0x5f, 0x31, 0x32, 0x2c, 0x20, 0x45, 0x6e, 0x64, 0x69, 
-0x61, 0x6e, 0x3a, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x2c, 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 
-0x65, 0x72, 0x20, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0x33, 0x32, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x20, 
-0x2d, 0x4f, 0x33, 0x09, 0x28, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 
-0x6e, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x67, 
-0x30, 0x09, 0x28, 0x44, 0x65, 0x62, 0x75, 0x67, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x29, 0x0a, 
-0x09, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x6d, 0x32, 0x09, 0x28, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 
-0x20, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x09, 0x2e, 0x66, 
-0x69, 0x6c, 0x65, 0x09, 0x31, 0x09, 0x22, 0x3c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2d, 
-0x6c, 0x69, 0x6e, 0x65, 0x3e, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x09, 
-0x22, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x74, 0x6d, 0x70, 0x78, 0x66, 0x74, 0x5f, 0x30, 0x30, 0x30, 
-0x30, 0x30, 0x63, 0x61, 0x66, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x38, 
-0x5f, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x75, 0x64, 0x61, 0x66, 0x65, 
-0x32, 0x2e, 0x67, 0x70, 0x75, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x33, 0x09, 
-0x22, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x75, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x34, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x69, 0x62, 
-0x2f, 0x67, 0x63, 0x63, 0x2f, 0x69, 0x36, 0x38, 0x36, 0x2d, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2d, 
-0x67, 0x6e, 0x75, 0x2f, 0x34, 0x2e, 0x34, 0x2e, 0x35, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 
-0x65, 0x2f, 0x73, 0x74, 0x64, 0x64, 0x65, 0x66, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 
-0x6c, 0x65, 0x09, 0x35, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x72, 0x74, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 
-0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x36, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 
-0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 
-0x75, 0x64, 0x65, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x37, 0x09, 0x22, 0x2f, 0x75, 
-0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 
-0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x62, 0x75, 0x69, 
-0x6c, 0x74, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 
-0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 
-0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 
-0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x39, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x30, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 
-0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x31, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 
-0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x32, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x33, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 
-0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 
-0x72, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x34, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x63, 0x72, 0x74, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 
-0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x35, 0x09, 0x22, 
-0x2f, 0x75, 0x73, 0x72, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x62, 0x69, 0x74, 
-0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x36, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 
-0x64, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x37, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x66, 0x65, 0x74, 
-0x63, 0x68, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 
-0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x39, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 
-0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 
-0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x66, 0x75, 0x6e, 
-0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 
-0x09, 0x32, 0x30, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 
-0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 
-0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 
-0x74, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x31, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x32, 0x09, 0x22, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 
-0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 
-0x5f, 0x31, 0x31, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 
-0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 
-0x33, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 
-0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 
-0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x31, 0x32, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 
-0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 
-0x6c, 0x65, 0x09, 0x32, 0x34, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 
-0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 
-0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x31, 0x33, 0x5f, 0x64, 0x6f, 0x75, 0x62, 
-0x6c, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x35, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x32, 0x30, 0x5f, 
-0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x36, 0x09, 0x22, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 
-0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 
-0x5f, 0x32, 0x30, 0x5f, 0x69, 0x6e, 0x74, 0x72, 0x69, 0x6e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x68, 
-0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x37, 0x09, 0x22, 0x2f, 0x75, 0x73, 
-0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 
-0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x75, 0x72, 0x66, 
-0x61, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 
-0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 
-0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 
-0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 
-0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x64, 0x62, 0x6c, 0x5f, 0x70, 0x74, 
-0x78, 0x31, 0x2e, 0x68, 0x22, 0x0a, 0x0a, 0x0a, 0x09, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 
-0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 
-0x4d, 0x71, 0x20, 0x28, 0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 
-0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 
-0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 
-0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 
-0x6b, 0x65, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 
-0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 
-0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 
-0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 
-0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 
-0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 
-0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 
-0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 
-0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x73, 
-0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 
-0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 
-0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 
-0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x6e, 0x6f, 0x70, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 0x70, 
-0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 
-0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 
-0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 
-0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 
-0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x25, 0x72, 0x68, 0x3c, 0x36, 
-0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x25, 0x72, 
-0x3c, 0x36, 0x34, 0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x70, 0x72, 0x65, 
-0x64, 0x20, 0x25, 0x70, 0x3c, 0x31, 0x30, 0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 
-0x33, 0x09, 0x35, 0x33, 0x09, 0x30, 0x0a, 0x24, 0x4c, 0x44, 0x57, 0x62, 0x65, 0x67, 0x69, 0x6e, 
-0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 
-0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 
-0x72, 0x68, 0x31, 0x2c, 0x20, 0x25, 0x63, 0x74, 0x61, 0x69, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 
-0x6d, 0x75, 0x6c, 0x2e, 0x77, 0x69, 0x64, 0x65, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 
-0x31, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x3b, 0x0a, 0x09, 0x63, 0x76, 
-0x74, 0x2e, 0x75, 0x33, 0x32, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 0x32, 0x2c, 0x20, 
-0x25, 0x74, 0x69, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x3b, 
-0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x34, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 
-0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 
-0x44, 0x4d, 0x71, 0x5f, 0x6e, 0x6f, 0x70, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 
-0x67, 0x74, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x2c, 0x20, 0x25, 0x72, 0x33, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x31, 0x20, 0x62, 0x72, 0x61, 
-0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x35, 0x36, 0x33, 0x34, 0x3b, 0x0a, 0x09, 0x62, 
-0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x42, 0x42, 0x31, 0x37, 0x5f, 0x42, 
-0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 
-0x71, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x35, 0x36, 0x33, 0x34, 0x3a, 0x0a, 0x09, 
-0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x32, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 
-0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x2c, 0x20, 0x25, 0x72, 
-0x33, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 
-0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 
-0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 
-0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x37, 0x2c, 0x20, 
-0x25, 0x72, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 
-0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x38, 0x2c, 0x20, 0x5b, 
-0x25, 0x72, 0x37, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 
-0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x39, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 
-0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 
-0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 
-0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x39, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x33, 
-0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x30, 0x2b, 0x30, 
-0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x35, 0x09, 0x30, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x31, 0x32, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x30, 0x2b, 0x38, 0x5d, 0x3b, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 
-0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x30, 0x2b, 0x34, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 
-0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x37, 0x09, 0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 
-0x31, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 
-0x35, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x34, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 
-0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 
-0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 
-0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 
-0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 
-0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x37, 0x2c, 0x20, 
-0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 
-0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 
-0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 
-0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 
-0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x38, 0x2c, 0x20, 0x25, 
-0x72, 0x31, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 
-0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x39, 0x2c, 0x20, 
-0x5b, 0x25, 0x72, 0x31, 0x38, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x39, 0x2c, 0x20, 
-0x25, 0x72, 0x33, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x32, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x30, 0x2c, 0x20, 0x32, 0x3b, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x32, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x75, 
-0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x31, 
-0x32, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x6c, 0x74, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 
-0x72, 0x31, 0x34, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x32, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x39, 0x34, 0x37, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x30, 
-0x2c, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x32, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x32, 0x2c, 0x20, 0x32, 0x3b, 0x0a, 0x09, 
-0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x32, 0x36, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 
-0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 
-0x4d, 0x71, 0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 
-0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5d, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x31, 
-0x36, 0x20, 0x09, 0x25, 0x72, 0x68, 0x32, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 
-0x3e, 0x20, 0x4c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 
-0x20, 0x38, 0x33, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x38, 0x33, 0x09, 0x30, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x37, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x32, 0x38, 
-0x2c, 0x20, 0x5b, 0x25, 0x72, 0x32, 0x37, 0x2b, 0x31, 0x32, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 
-0x6f, 0x63, 0x09, 0x33, 0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 
-0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x36, 0x2c, 0x20, 0x5b, 
-0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 
-0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x67, 0x5f, 
-0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 0x61, 0x62, 0x6c, 
-0x65, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x38, 0x33, 0x09, 0x30, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x39, 0x2c, 
-0x20, 0x25, 0x72, 0x32, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x30, 
-0x2c, 0x20, 0x5b, 0x25, 0x72, 0x32, 0x39, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 
-0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x31, 0x2c, 
-0x20, 0x5b, 0x25, 0x72, 0x32, 0x37, 0x2b, 0x31, 0x31, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x31, 
-0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 
-0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 
-0x33, 0x32, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x33, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x33, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 
-0x09, 0x6f, 0x72, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x35, 0x2c, 0x20, 0x25, 
-0x72, 0x33, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 
-0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x36, 0x2c, 0x20, 0x25, 0x72, 
-0x33, 0x35, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x33, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x33, 
-0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x33, 0x37, 0x2b, 0x30, 
-0x5d, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 
-0x39, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x25, 
-0x72, 0x33, 0x39, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x33, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 
-0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 
-0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 0x33, 0x2c, 0x20, 
-0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 
-0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 
-0x38, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 
-0x09, 0x33, 0x09, 0x38, 0x37, 0x09, 0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x34, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x2c, 0x20, 0x25, 0x72, 
-0x31, 0x31, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x34, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x31, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 
-0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 
-0x70, 0x3e, 0x20, 0x4c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 
-0x65, 0x20, 0x39, 0x30, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x30, 0x09, 
-0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x30, 
-0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x72, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x34, 0x34, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 
-0x65, 0x71, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x33, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x34, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x34, 0x20, 0x62, 
-0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3b, 0x0a, 
-0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 
-0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 
-0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 
-0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x73, 0x65, 
-0x74, 0x70, 0x2e, 0x6c, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x35, 0x2c, 0x20, 
-0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 
-0x35, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x37, 0x30, 
-0x36, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 
-0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 
-0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 
-0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x6f, 
-0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x30, 0x3b, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x74, 
-0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 
-0x37, 0x30, 0x36, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 
-0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 
-0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 
-0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 
-0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x35, 0x09, 0x30, 0x0a, 0x09, 
-0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 0x68, 0x33, 0x2c, 0x20, 0x25, 
-0x72, 0x68, 0x32, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 
-0x72, 0x68, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x33, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x6d, 
-0x6f, 0x76, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 0x68, 0x32, 0x2c, 0x20, 0x25, 0x72, 
-0x68, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x77, 0x69, 0x64, 0x65, 0x2e, 0x75, 0x31, 
-0x36, 0x20, 0x09, 0x25, 0x72, 0x34, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x33, 0x2c, 0x20, 0x32, 
-0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x36, 
-0x2c, 0x20, 0x25, 0x72, 0x32, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x35, 0x3b, 0x0a, 0x09, 0x73, 
-0x74, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x5b, 0x25, 
-0x72, 0x34, 0x36, 0x2b, 0x32, 0x5d, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3a, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 
-0x37, 0x39, 0x33, 0x38, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 
-0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 
-0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 
-0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 
-0x38, 0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x30, 0x09, 0x30, 
-0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x37, 0x2c, 
-0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x70, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x37, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x36, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 
-0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 
-0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 
-0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 
-0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 
-0x33, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x34, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x3b, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 
-0x72, 0x34, 0x39, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x34, 0x38, 0x2b, 0x31, 0x32, 0x5d, 0x3b, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x36, 
-0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 
-0x61, 0x62, 0x6c, 0x65, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 
-0x30, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x35, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 
-0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 
-0x25, 0x72, 0x35, 0x31, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x35, 0x30, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 
-0x72, 0x35, 0x32, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x34, 0x38, 0x2b, 0x31, 0x31, 0x5d, 0x3b, 0x0a, 
-0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x33, 0x2c, 0x20, 
-0x25, 0x72, 0x35, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 
-0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x35, 0x34, 0x2c, 
-0x20, 0x5b, 0x25, 0x72, 0x35, 0x33, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 
-0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x34, 0x2c, 
-0x20, 0x34, 0x3b, 0x0a, 0x09, 0x6f, 0x72, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 
-0x36, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x35, 0x3b, 0x0a, 0x09, 
-0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x37, 
-0x2c, 0x20, 0x25, 0x72, 0x35, 0x36, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x33, 0x2c, 
-0x20, 0x25, 0x72, 0x35, 0x37, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 
-0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x39, 0x2c, 0x20, 0x5b, 0x25, 0x72, 
-0x35, 0x38, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x36, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 
-0x09, 0x61, 0x6e, 0x64, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 
-0x25, 0x72, 0x35, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x30, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x31, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 
-0x73, 0x65, 0x74, 0x70, 0x2e, 0x6e, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x37, 
-0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x31, 0x3b, 0x0a, 0x09, 0x40, 
-0x25, 0x70, 0x37, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 
-0x36, 0x38, 0x32, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 0x3a, 0x0a, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x39, 0x31, 0x34, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 
-0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 
-0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 0x33, 0x2c, 
-0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 
-0x09, 0x31, 0x30, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x36, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x31, 
-0x35, 0x3b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 
-0x35, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x32, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 
-0x70, 0x2e, 0x67, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x38, 0x2c, 0x20, 0x25, 
-0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x38, 
-0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 
-0x3b, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x36, 0x31, 0x34, 0x36, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x39, 0x34, 
-0x37, 0x34, 0x3a, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 
-0x68, 0x32, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x31, 0x34, 
-0x36, 0x3a, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x39, 0x09, 0x30, 
-0x0a, 0x09, 0x73, 0x74, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x31, 0x36, 0x20, 
-0x09, 0x5b, 0x25, 0x72, 0x32, 0x32, 0x2b, 0x30, 0x5d, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x32, 0x3b, 
-0x0a, 0x24, 0x4c, 0x42, 0x42, 0x31, 0x37, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 
-0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 
-0x63, 0x09, 0x33, 0x09, 0x31, 0x31, 0x31, 0x09, 0x30, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x3b, 
-0x0a, 0x24, 0x4c, 0x44, 0x57, 0x65, 0x6e, 0x64, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 
-0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x7d, 0x20, 
-0x2f, 0x2f, 0x20, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 
-0x42, 0x4e, 0x44, 0x4d, 0x71, 0x0a, 0x0a, 0x00
-};
-
-const unsigned char util_mpm_b2g_cuda_kernel_sm_13[6744] = {
-0x09, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x34, 0x0a, 0x09, 0x2e, 
-0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x73, 0x6d, 0x5f, 0x31, 0x33, 0x0a, 0x09, 0x2f, 0x2f, 
-0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x6f, 
-0x70, 0x65, 0x6e, 0x36, 0x34, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x2f, 0x62, 0x65, 0x0a, 0x09, 0x2f, 
-0x2f, 0x20, 0x6e, 0x76, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x63, 0x20, 0x33, 0x2e, 0x32, 0x20, 0x62, 
-0x75, 0x69, 0x6c, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x2d, 
-0x30, 0x33, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x69, 0x6e, 0x67, 
-0x20, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x74, 0x6d, 0x70, 0x78, 0x66, 0x74, 0x5f, 0x30, 0x30, 0x30, 
-0x30, 0x30, 0x63, 0x64, 0x33, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x39, 
-0x5f, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x70, 0x70, 0x33, 0x2e, 0x69, 
-0x20, 0x28, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x63, 0x63, 0x42, 0x49, 0x23, 0x2e, 0x6c, 0x5a, 0x6c, 
-0x54, 0x41, 0x51, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 
-0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 
-0x09, 0x2f, 0x2f, 0x20, 0x20, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3a, 0x70, 0x74, 0x78, 0x2c, 
-0x20, 0x49, 0x53, 0x41, 0x3a, 0x73, 0x6d, 0x5f, 0x31, 0x33, 0x2c, 0x20, 0x45, 0x6e, 0x64, 0x69, 
-0x61, 0x6e, 0x3a, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x2c, 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 
-0x65, 0x72, 0x20, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0x33, 0x32, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x20, 
-0x2d, 0x4f, 0x33, 0x09, 0x28, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 
-0x6e, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x67, 
-0x30, 0x09, 0x28, 0x44, 0x65, 0x62, 0x75, 0x67, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x29, 0x0a, 
-0x09, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x6d, 0x32, 0x09, 0x28, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 
-0x20, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x09, 0x2e, 0x66, 
-0x69, 0x6c, 0x65, 0x09, 0x31, 0x09, 0x22, 0x3c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2d, 
-0x6c, 0x69, 0x6e, 0x65, 0x3e, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x09, 
-0x22, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x74, 0x6d, 0x70, 0x78, 0x66, 0x74, 0x5f, 0x30, 0x30, 0x30, 
-0x30, 0x30, 0x63, 0x64, 0x33, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x38, 
-0x5f, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x75, 0x64, 0x61, 0x66, 0x65, 
-0x32, 0x2e, 0x67, 0x70, 0x75, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x33, 0x09, 
-0x22, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x75, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x34, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x69, 0x62, 
-0x2f, 0x67, 0x63, 0x63, 0x2f, 0x69, 0x36, 0x38, 0x36, 0x2d, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2d, 
-0x67, 0x6e, 0x75, 0x2f, 0x34, 0x2e, 0x34, 0x2e, 0x35, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 
-0x65, 0x2f, 0x73, 0x74, 0x64, 0x64, 0x65, 0x66, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 
-0x6c, 0x65, 0x09, 0x35, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x72, 0x74, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 
-0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x36, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 
-0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 
-0x75, 0x64, 0x65, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x37, 0x09, 0x22, 0x2f, 0x75, 
-0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 
-0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x62, 0x75, 0x69, 
-0x6c, 0x74, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 
-0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 
-0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 
-0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x39, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x30, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 
-0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x31, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 
-0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x32, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x33, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 
-0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 
-0x72, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x34, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x63, 0x72, 0x74, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 
-0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x35, 0x09, 0x22, 
-0x2f, 0x75, 0x73, 0x72, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x62, 0x69, 0x74, 
-0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x36, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 
-0x64, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x37, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x66, 0x65, 0x74, 
-0x63, 0x68, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 
-0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x39, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 
-0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 
-0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x66, 0x75, 0x6e, 
-0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 
-0x09, 0x32, 0x30, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 
-0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 
-0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 
-0x74, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x31, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x32, 0x09, 0x22, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 
-0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 
-0x5f, 0x31, 0x31, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 
-0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 
-0x33, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 
-0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 
-0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x31, 0x32, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 
-0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 
-0x6c, 0x65, 0x09, 0x32, 0x34, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 
-0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 
-0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x31, 0x33, 0x5f, 0x64, 0x6f, 0x75, 0x62, 
-0x6c, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x35, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x32, 0x30, 0x5f, 
-0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x36, 0x09, 0x22, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 
-0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 
-0x5f, 0x32, 0x30, 0x5f, 0x69, 0x6e, 0x74, 0x72, 0x69, 0x6e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x68, 
-0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x37, 0x09, 0x22, 0x2f, 0x75, 0x73, 
-0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 
-0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x75, 0x72, 0x66, 
-0x61, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 
-0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 
-0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 
-0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 
-0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x64, 0x62, 0x6c, 0x5f, 0x70, 0x74, 
-0x78, 0x33, 0x2e, 0x68, 0x22, 0x0a, 0x0a, 0x0a, 0x09, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 
-0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 
-0x4d, 0x71, 0x20, 0x28, 0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 
-0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 
-0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 
-0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 
-0x6b, 0x65, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 
-0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 
-0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 
-0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 
-0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 
-0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 
-0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 
-0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 
-0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x73, 
-0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 
-0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 
-0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 
-0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x6e, 0x6f, 0x70, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 0x70, 
-0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 
-0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 
-0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 
-0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 
-0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x25, 0x72, 0x68, 0x3c, 0x36, 
-0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x25, 0x72, 
-0x3c, 0x36, 0x34, 0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x70, 0x72, 0x65, 
-0x64, 0x20, 0x25, 0x70, 0x3c, 0x31, 0x30, 0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 
-0x33, 0x09, 0x35, 0x33, 0x09, 0x30, 0x0a, 0x24, 0x4c, 0x44, 0x57, 0x62, 0x65, 0x67, 0x69, 0x6e, 
-0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 
-0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 
-0x72, 0x68, 0x31, 0x2c, 0x20, 0x25, 0x63, 0x74, 0x61, 0x69, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 
-0x6d, 0x75, 0x6c, 0x2e, 0x77, 0x69, 0x64, 0x65, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 
-0x31, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x3b, 0x0a, 0x09, 0x63, 0x76, 
-0x74, 0x2e, 0x75, 0x33, 0x32, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 0x32, 0x2c, 0x20, 
-0x25, 0x74, 0x69, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x3b, 
-0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x34, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 
-0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 
-0x44, 0x4d, 0x71, 0x5f, 0x6e, 0x6f, 0x70, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 
-0x67, 0x74, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x2c, 0x20, 0x25, 0x72, 0x33, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x31, 0x20, 0x62, 0x72, 0x61, 
-0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x35, 0x36, 0x33, 0x34, 0x3b, 0x0a, 0x09, 0x62, 
-0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x42, 0x42, 0x31, 0x37, 0x5f, 0x42, 
-0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 
-0x71, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x35, 0x36, 0x33, 0x34, 0x3a, 0x0a, 0x09, 
-0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x32, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 
-0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x2c, 0x20, 0x25, 0x72, 
-0x33, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 
-0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 
-0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 
-0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x37, 0x2c, 0x20, 
-0x25, 0x72, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 
-0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x38, 0x2c, 0x20, 0x5b, 
-0x25, 0x72, 0x37, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 
-0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x39, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 
-0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 
-0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 
-0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x39, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x33, 
-0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x30, 0x2b, 0x30, 
-0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x35, 0x09, 0x30, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x31, 0x32, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x30, 0x2b, 0x38, 0x5d, 0x3b, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 
-0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x30, 0x2b, 0x34, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 
-0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x37, 0x09, 0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 
-0x31, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 
-0x35, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x34, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 
-0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 
-0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 
-0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 
-0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 
-0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x37, 0x2c, 0x20, 
-0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 
-0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 
-0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 
-0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 
-0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x38, 0x2c, 0x20, 0x25, 
-0x72, 0x31, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 
-0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x39, 0x2c, 0x20, 
-0x5b, 0x25, 0x72, 0x31, 0x38, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x39, 0x2c, 0x20, 
-0x25, 0x72, 0x33, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x32, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x30, 0x2c, 0x20, 0x32, 0x3b, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x32, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x75, 
-0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x31, 
-0x32, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x6c, 0x74, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 
-0x72, 0x31, 0x34, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x32, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x39, 0x34, 0x37, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x30, 
-0x2c, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x32, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x32, 0x2c, 0x20, 0x32, 0x3b, 0x0a, 0x09, 
-0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x32, 0x36, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 
-0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 
-0x4d, 0x71, 0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 
-0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5d, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x31, 
-0x36, 0x20, 0x09, 0x25, 0x72, 0x68, 0x32, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 
-0x3e, 0x20, 0x4c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 
-0x20, 0x38, 0x33, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x38, 0x33, 0x09, 0x30, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x37, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x32, 0x38, 
-0x2c, 0x20, 0x5b, 0x25, 0x72, 0x32, 0x37, 0x2b, 0x31, 0x32, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 
-0x6f, 0x63, 0x09, 0x33, 0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 
-0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x36, 0x2c, 0x20, 0x5b, 
-0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 
-0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x67, 0x5f, 
-0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 0x61, 0x62, 0x6c, 
-0x65, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x38, 0x33, 0x09, 0x30, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x39, 0x2c, 
-0x20, 0x25, 0x72, 0x32, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x30, 
-0x2c, 0x20, 0x5b, 0x25, 0x72, 0x32, 0x39, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 
-0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x31, 0x2c, 
-0x20, 0x5b, 0x25, 0x72, 0x32, 0x37, 0x2b, 0x31, 0x31, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x31, 
-0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 
-0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 
-0x33, 0x32, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x33, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x33, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 
-0x09, 0x6f, 0x72, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x35, 0x2c, 0x20, 0x25, 
-0x72, 0x33, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 
-0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x36, 0x2c, 0x20, 0x25, 0x72, 
-0x33, 0x35, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x33, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x33, 
-0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x33, 0x37, 0x2b, 0x30, 
-0x5d, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 
-0x39, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x25, 
-0x72, 0x33, 0x39, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x33, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 
-0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 
-0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 0x33, 0x2c, 0x20, 
-0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 
-0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 
-0x38, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 
-0x09, 0x33, 0x09, 0x38, 0x37, 0x09, 0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x34, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x2c, 0x20, 0x25, 0x72, 
-0x31, 0x31, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x34, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x31, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 
-0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 
-0x70, 0x3e, 0x20, 0x4c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 
-0x65, 0x20, 0x39, 0x30, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x30, 0x09, 
-0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x30, 
-0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x72, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x34, 0x34, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 
-0x65, 0x71, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x33, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x34, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x34, 0x20, 0x62, 
-0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3b, 0x0a, 
-0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 
-0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 
-0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 
-0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x73, 0x65, 
-0x74, 0x70, 0x2e, 0x6c, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x35, 0x2c, 0x20, 
-0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 
-0x35, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x37, 0x30, 
-0x36, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 
-0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 
-0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 
-0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x6f, 
-0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x30, 0x3b, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x74, 
-0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 
-0x37, 0x30, 0x36, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 
-0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 
-0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 
-0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 
-0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x35, 0x09, 0x30, 0x0a, 0x09, 
-0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 0x68, 0x33, 0x2c, 0x20, 0x25, 
-0x72, 0x68, 0x32, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 
-0x72, 0x68, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x33, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x6d, 
-0x6f, 0x76, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 0x68, 0x32, 0x2c, 0x20, 0x25, 0x72, 
-0x68, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x77, 0x69, 0x64, 0x65, 0x2e, 0x75, 0x31, 
-0x36, 0x20, 0x09, 0x25, 0x72, 0x34, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x33, 0x2c, 0x20, 0x32, 
-0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x36, 
-0x2c, 0x20, 0x25, 0x72, 0x32, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x35, 0x3b, 0x0a, 0x09, 0x73, 
-0x74, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x5b, 0x25, 
-0x72, 0x34, 0x36, 0x2b, 0x32, 0x5d, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3a, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 
-0x37, 0x39, 0x33, 0x38, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 
-0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 
-0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 
-0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 
-0x38, 0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x30, 0x09, 0x30, 
-0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x37, 0x2c, 
-0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x70, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 
-0x37, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x36, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 
-0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 
-0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 
-0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 
-0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 
-0x33, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x34, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x3b, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 
-0x72, 0x34, 0x39, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x34, 0x38, 0x2b, 0x31, 0x32, 0x5d, 0x3b, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x36, 
-0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 
-0x61, 0x62, 0x6c, 0x65, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 
-0x30, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x35, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 
-0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 
-0x25, 0x72, 0x35, 0x31, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x35, 0x30, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 
-0x72, 0x35, 0x32, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x34, 0x38, 0x2b, 0x31, 0x31, 0x5d, 0x3b, 0x0a, 
-0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x33, 0x2c, 0x20, 
-0x25, 0x72, 0x35, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 
-0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x35, 0x34, 0x2c, 
-0x20, 0x5b, 0x25, 0x72, 0x35, 0x33, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 
-0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x34, 0x2c, 
-0x20, 0x34, 0x3b, 0x0a, 0x09, 0x6f, 0x72, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 
-0x36, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x35, 0x3b, 0x0a, 0x09, 
-0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x37, 
-0x2c, 0x20, 0x25, 0x72, 0x35, 0x36, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x33, 0x2c, 
-0x20, 0x25, 0x72, 0x35, 0x37, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 
-0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x39, 0x2c, 0x20, 0x5b, 0x25, 0x72, 
-0x35, 0x38, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x36, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 
-0x09, 0x61, 0x6e, 0x64, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 
-0x25, 0x72, 0x35, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x30, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 
-0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x31, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 
-0x73, 0x65, 0x74, 0x70, 0x2e, 0x6e, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x37, 
-0x2c, 0x20, 0x25, 0x72, 0x33, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x31, 0x3b, 0x0a, 0x09, 0x40, 
-0x25, 0x70, 0x37, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 
-0x36, 0x38, 0x32, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 0x3a, 0x0a, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x39, 0x31, 0x34, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 
-0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 
-0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 0x33, 0x2c, 
-0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 
-0x09, 0x31, 0x30, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x36, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x31, 
-0x35, 0x3b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 
-0x35, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x32, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 
-0x70, 0x2e, 0x67, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x38, 0x2c, 0x20, 0x25, 
-0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x38, 
-0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 
-0x3b, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x36, 0x31, 0x34, 0x36, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x39, 0x34, 
-0x37, 0x34, 0x3a, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x25, 0x72, 
-0x68, 0x32, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x31, 0x34, 
-0x36, 0x3a, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x39, 0x09, 0x30, 
-0x0a, 0x09, 0x73, 0x74, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x31, 0x36, 0x20, 
-0x09, 0x5b, 0x25, 0x72, 0x32, 0x32, 0x2b, 0x30, 0x5d, 0x2c, 0x20, 0x25, 0x72, 0x68, 0x32, 0x3b, 
-0x0a, 0x24, 0x4c, 0x42, 0x42, 0x31, 0x37, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 
-0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 
-0x63, 0x09, 0x33, 0x09, 0x31, 0x31, 0x31, 0x09, 0x30, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x3b, 
-0x0a, 0x24, 0x4c, 0x44, 0x57, 0x65, 0x6e, 0x64, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 
-0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x7d, 0x20, 
-0x2f, 0x2f, 0x20, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 
-0x42, 0x4e, 0x44, 0x4d, 0x71, 0x0a, 0x0a, 0x00
-};
-
-const unsigned char util_mpm_b2g_cuda_kernel_sm_20[6506] = {
-0x09, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x2e, 0x32, 0x0a, 0x09, 0x2e, 
-0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x73, 0x6d, 0x5f, 0x32, 0x30, 0x0a, 0x09, 0x2f, 0x2f, 
-0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x6f, 
-0x70, 0x65, 0x6e, 0x36, 0x34, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x2f, 0x62, 0x65, 0x0a, 0x09, 0x2f, 
-0x2f, 0x20, 0x6e, 0x76, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x63, 0x20, 0x33, 0x2e, 0x32, 0x20, 0x62, 
-0x75, 0x69, 0x6c, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x2d, 
-0x30, 0x33, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x69, 0x6e, 0x67, 
-0x20, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x74, 0x6d, 0x70, 0x78, 0x66, 0x74, 0x5f, 0x30, 0x30, 0x30, 
-0x30, 0x30, 0x63, 0x66, 0x37, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x39, 
-0x5f, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x70, 0x70, 0x33, 0x2e, 0x69, 
-0x20, 0x28, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x63, 0x63, 0x42, 0x49, 0x23, 0x2e, 0x41, 0x63, 0x44, 
-0x65, 0x43, 0x4c, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 
-0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 
-0x09, 0x2f, 0x2f, 0x20, 0x20, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3a, 0x70, 0x74, 0x78, 0x2c, 
-0x20, 0x49, 0x53, 0x41, 0x3a, 0x73, 0x6d, 0x5f, 0x32, 0x30, 0x2c, 0x20, 0x45, 0x6e, 0x64, 0x69, 
-0x61, 0x6e, 0x3a, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x2c, 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 
-0x65, 0x72, 0x20, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0x33, 0x32, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x20, 
-0x2d, 0x4f, 0x33, 0x09, 0x28, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 
-0x6e, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x67, 
-0x30, 0x09, 0x28, 0x44, 0x65, 0x62, 0x75, 0x67, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x29, 0x0a, 
-0x09, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x6d, 0x32, 0x09, 0x28, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 
-0x20, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x09, 0x2e, 0x66, 
-0x69, 0x6c, 0x65, 0x09, 0x31, 0x09, 0x22, 0x3c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2d, 
-0x6c, 0x69, 0x6e, 0x65, 0x3e, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x09, 
-0x22, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x74, 0x6d, 0x70, 0x78, 0x66, 0x74, 0x5f, 0x30, 0x30, 0x30, 
-0x30, 0x30, 0x63, 0x66, 0x37, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x38, 
-0x5f, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x75, 0x64, 0x61, 0x66, 0x65, 
-0x32, 0x2e, 0x67, 0x70, 0x75, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x33, 0x09, 
-0x22, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x75, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x34, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x69, 0x62, 
-0x2f, 0x67, 0x63, 0x63, 0x2f, 0x69, 0x36, 0x38, 0x36, 0x2d, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2d, 
-0x67, 0x6e, 0x75, 0x2f, 0x34, 0x2e, 0x34, 0x2e, 0x35, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 
-0x65, 0x2f, 0x73, 0x74, 0x64, 0x64, 0x65, 0x66, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 
-0x6c, 0x65, 0x09, 0x35, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x72, 0x74, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 
-0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x36, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 
-0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 
-0x75, 0x64, 0x65, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x37, 0x09, 0x22, 0x2f, 0x75, 
-0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 
-0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x62, 0x75, 0x69, 
-0x6c, 0x74, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 
-0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 
-0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 
-0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x39, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x30, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 
-0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x31, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 
-0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x32, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x33, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 
-0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 
-0x72, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x34, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x63, 0x72, 0x74, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 
-0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x35, 0x09, 0x22, 
-0x2f, 0x75, 0x73, 0x72, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x62, 0x69, 0x74, 
-0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x36, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 
-0x64, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x37, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x66, 0x65, 0x74, 
-0x63, 0x68, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 
-0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x39, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 
-0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 
-0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x66, 0x75, 0x6e, 
-0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 
-0x09, 0x32, 0x30, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 
-0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 
-0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 
-0x74, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x31, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x32, 0x09, 0x22, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 
-0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 
-0x5f, 0x31, 0x31, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 
-0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 
-0x33, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 
-0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 
-0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x31, 0x32, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 
-0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 
-0x6c, 0x65, 0x09, 0x32, 0x34, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 
-0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 
-0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x31, 0x33, 0x5f, 0x64, 0x6f, 0x75, 0x62, 
-0x6c, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x35, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x32, 0x30, 0x5f, 
-0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x36, 0x09, 0x22, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 
-0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 
-0x5f, 0x32, 0x30, 0x5f, 0x69, 0x6e, 0x74, 0x72, 0x69, 0x6e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x68, 
-0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x37, 0x09, 0x22, 0x2f, 0x75, 0x73, 
-0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 
-0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x75, 0x72, 0x66, 
-0x61, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 
-0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 
-0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 
-0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 
-0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x64, 0x62, 0x6c, 0x5f, 0x70, 0x74, 
-0x78, 0x33, 0x2e, 0x68, 0x22, 0x0a, 0x0a, 0x0a, 0x09, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 
-0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 
-0x4d, 0x71, 0x20, 0x28, 0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 
-0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 
-0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 
-0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 
-0x6b, 0x65, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 
-0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 
-0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 
-0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 
-0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 
-0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 
-0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 
-0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 
-0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x73, 
-0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 
-0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 
-0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 
-0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x6e, 0x6f, 0x70, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 0x70, 
-0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 
-0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 
-0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 
-0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 
-0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x25, 0x72, 0x3c, 0x36, 0x38, 
-0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x70, 0x72, 0x65, 0x64, 0x20, 0x25, 
-0x70, 0x3c, 0x31, 0x30, 0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x35, 
-0x33, 0x09, 0x30, 0x0a, 0x24, 0x4c, 0x44, 0x57, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x3a, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x2c, 
-0x20, 0x25, 0x63, 0x74, 0x61, 0x69, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 
-0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x31, 
-0x2c, 0x20, 0x33, 0x32, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x33, 0x2c, 0x20, 0x25, 0x74, 0x69, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 0x61, 0x64, 
-0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x2c, 
-0x20, 0x25, 0x72, 0x32, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 
-0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 
-0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x6e, 0x6f, 0x70, 0x5d, 0x3b, 0x0a, 0x09, 
-0x73, 0x65, 0x74, 0x70, 0x2e, 0x67, 0x74, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x31, 
-0x2c, 0x20, 0x25, 0x72, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 
-0x31, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x35, 0x36, 0x33, 
-0x34, 0x3b, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x42, 
-0x42, 0x31, 0x37, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 
-0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x35, 0x36, 
-0x33, 0x34, 0x3a, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x32, 0x09, 0x30, 
-0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x36, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 
-0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x37, 0x2c, 0x20, 0x5b, 
-0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 
-0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 
-0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 
-0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x3b, 0x0a, 0x09, 
-0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x39, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x38, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x30, 
-0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 
-0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x31, 
-0x2c, 0x20, 0x25, 0x72, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x30, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 
-0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 
-0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x32, 0x2c, 0x20, 
-0x5b, 0x25, 0x72, 0x31, 0x31, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 
-0x33, 0x09, 0x36, 0x35, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 
-0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 
-0x31, 0x31, 0x2b, 0x38, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 
-0x36, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x34, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x31, 0x2b, 
-0x34, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x37, 0x09, 0x30, 
-0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x35, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x32, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x37, 
-0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 
-0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x31, 0x38, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 
-0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 
-0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 
-0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 
-0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x31, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x3b, 
-0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x32, 0x30, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x39, 0x2b, 0x30, 0x5d, 0x3b, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x31, 0x2c, 
-0x20, 0x25, 0x72, 0x32, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 
-0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x32, 0x2c, 0x20, 0x25, 
-0x72, 0x32, 0x31, 0x2c, 0x20, 0x32, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x37, 0x2c, 0x20, 0x25, 0x72, 
-0x32, 0x32, 0x3b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x32, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x33, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x65, 
-0x74, 0x70, 0x2e, 0x6c, 0x74, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x32, 0x2c, 0x20, 
-0x25, 0x72, 0x32, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 
-0x32, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x39, 0x34, 0x37, 
-0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 
-0x35, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x09, 0x61, 0x64, 
-0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x32, 
-0x33, 0x2c, 0x20, 0x32, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x37, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 
-0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 
-0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 
-0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5d, 0x3b, 0x0a, 
-0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x38, 0x2c, 0x20, 
-0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x3a, 0x0a, 0x20, 
-0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x4c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 
-0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 0x33, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 
-0x09, 0x33, 0x09, 0x38, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x32, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x25, 0x72, 
-0x31, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 
-0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x30, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x32, 0x39, 0x2b, 0x31, 
-0x32, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x33, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x37, 0x3b, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 
-0x72, 0x33, 0x32, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x33, 0x31, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 
-0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 
-0x33, 0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x32, 0x39, 0x2b, 0x31, 0x31, 0x5d, 0x3b, 0x0a, 0x09, 
-0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x34, 0x2c, 0x20, 0x25, 
-0x72, 0x33, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x37, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 
-0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x35, 0x2c, 0x20, 
-0x5b, 0x25, 0x72, 0x33, 0x34, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x35, 0x2c, 0x20, 
-0x34, 0x3b, 0x0a, 0x09, 0x6f, 0x72, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x37, 
-0x2c, 0x20, 0x25, 0x72, 0x33, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x36, 0x3b, 0x0a, 0x09, 0x6d, 
-0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x33, 0x37, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x34, 0x2c, 0x20, 
-0x25, 0x72, 0x33, 0x38, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x34, 0x30, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x33, 0x39, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 
-0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x31, 0x2c, 0x20, 0x30, 
-0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x70, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x31, 0x3b, 
-0x0a, 0x09, 0x40, 0x25, 0x70, 0x33, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x32, 0x35, 0x38, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 
-0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 
-0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 0x33, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 
-0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 
-0x36, 0x35, 0x38, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x38, 0x36, 0x09, 0x30, 
-0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x32, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x38, 
-0x37, 0x09, 0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x34, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x32, 0x3b, 0x0a, 
-0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x34, 0x2c, 0x20, 
-0x25, 0x72, 0x34, 0x33, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 
-0x36, 0x38, 0x32, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x4c, 
-0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 
-0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x30, 0x09, 0x30, 0x0a, 0x09, 0x73, 
-0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x32, 0x2c, 0x20, 0x25, 0x72, 
-0x34, 0x32, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x72, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x34, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 
-0x35, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 
-0x36, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x35, 0x2c, 0x20, 0x25, 
-0x72, 0x34, 0x36, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x34, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 
-0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 
-0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 
-0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x6c, 
-0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 
-0x2c, 0x20, 0x25, 0x72, 0x34, 0x34, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x35, 0x20, 0x62, 0x72, 
-0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x37, 0x30, 0x36, 0x3b, 0x0a, 0x20, 
-0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 
-0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 
-0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 
-0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 
-0x63, 0x09, 0x33, 0x09, 0x39, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 0x3b, 0x0a, 0x09, 
-0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 
-0x34, 0x35, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x37, 0x30, 0x36, 0x3a, 
-0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 
-0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 
-0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 
-0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x2e, 
-0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x35, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 
-0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x38, 0x3b, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x34, 0x37, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x63, 0x76, 0x74, 0x2e, 0x75, 
-0x31, 0x36, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x38, 0x2c, 0x20, 0x25, 0x72, 
-0x34, 0x38, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x34, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x37, 0x2c, 0x20, 0x32, 0x3b, 0x0a, 
-0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x30, 0x2c, 0x20, 
-0x25, 0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x39, 0x3b, 0x0a, 0x09, 0x73, 0x74, 0x2e, 
-0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x5b, 0x25, 0x72, 0x35, 
-0x30, 0x2b, 0x32, 0x5d, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3a, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x39, 
-0x33, 0x38, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 
-0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 
-0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 
-0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 
-0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x30, 0x09, 0x30, 0x0a, 0x09, 
-0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x31, 0x2c, 0x20, 0x30, 
-0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x70, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x31, 0x3b, 
-0x0a, 0x09, 0x40, 0x25, 0x70, 0x36, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x32, 0x35, 0x38, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 
-0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 
-0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 
-0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 
-0x36, 0x38, 0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x33, 0x09, 
-0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x32, 
-0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 0x3b, 0x0a, 0x09, 0x6c, 
-0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x35, 
-0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x35, 0x32, 0x2b, 0x31, 0x32, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 
-0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x34, 0x2c, 0x20, 0x25, 0x72, 
-0x35, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x37, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 
-0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x35, 0x35, 0x2c, 0x20, 0x5b, 
-0x25, 0x72, 0x35, 0x34, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 
-0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x35, 0x36, 0x2c, 0x20, 0x5b, 0x25, 
-0x72, 0x35, 0x32, 0x2b, 0x31, 0x31, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x36, 0x2c, 0x20, 0x25, 
-0x72, 0x32, 0x37, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 
-0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x35, 0x38, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x35, 0x37, 0x2b, 
-0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x35, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x38, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x6f, 0x72, 
-0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x35, 
-0x2c, 0x20, 0x25, 0x72, 0x35, 0x39, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x30, 0x2c, 
-0x20, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x36, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x31, 0x3b, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x33, 0x2c, 0x20, 0x5b, 
-0x25, 0x72, 0x36, 0x32, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x31, 
-0x3b, 0x0a, 0x09, 0x61, 0x6e, 0x64, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x30, 
-0x2c, 0x20, 0x25, 0x72, 0x36, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 
-0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x35, 0x2c, 0x20, 0x30, 0x3b, 
-0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x6e, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x70, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x35, 0x3b, 0x0a, 
-0x09, 0x40, 0x25, 0x70, 0x37, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 
-0x5f, 0x37, 0x36, 0x38, 0x32, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 
-0x3a, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x39, 0x31, 0x34, 0x3a, 0x0a, 0x20, 0x2f, 
-0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 
-0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 
-0x33, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 
-0x09, 0x33, 0x09, 0x31, 0x30, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x32, 0x2c, 0x20, 0x25, 
-0x72, 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x31, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x36, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 
-0x65, 0x74, 0x70, 0x2e, 0x67, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x32, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x40, 0x25, 
-0x70, 0x38, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 
-0x35, 0x38, 0x3b, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x36, 0x31, 0x34, 0x36, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 
-0x39, 0x34, 0x37, 0x34, 0x3a, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x32, 0x38, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 
-0x31, 0x34, 0x36, 0x3a, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x39, 
-0x09, 0x30, 0x0a, 0x09, 0x73, 0x74, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x31, 
-0x36, 0x20, 0x09, 0x5b, 0x25, 0x72, 0x32, 0x33, 0x2b, 0x30, 0x5d, 0x2c, 0x20, 0x25, 0x72, 0x32, 
-0x38, 0x3b, 0x0a, 0x24, 0x4c, 0x42, 0x42, 0x31, 0x37, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 
-0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x2e, 
-0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x31, 0x31, 0x09, 0x30, 0x0a, 0x09, 0x65, 0x78, 0x69, 
-0x74, 0x3b, 0x0a, 0x24, 0x4c, 0x44, 0x57, 0x65, 0x6e, 0x64, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 
-0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 
-0x7d, 0x20, 0x2f, 0x2f, 0x20, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 
-0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x0a, 0x0a, 0x00
-};
-
-const unsigned char util_mpm_b2g_cuda_kernel_sm_21[6506] = {
-0x09, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x2e, 0x32, 0x0a, 0x09, 0x2e, 
-0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x73, 0x6d, 0x5f, 0x32, 0x30, 0x0a, 0x09, 0x2f, 0x2f, 
-0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x6f, 
-0x70, 0x65, 0x6e, 0x36, 0x34, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x2f, 0x62, 0x65, 0x0a, 0x09, 0x2f, 
-0x2f, 0x20, 0x6e, 0x76, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x63, 0x20, 0x33, 0x2e, 0x32, 0x20, 0x62, 
-0x75, 0x69, 0x6c, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x2d, 
-0x30, 0x33, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x69, 0x6e, 0x67, 
-0x20, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x74, 0x6d, 0x70, 0x78, 0x66, 0x74, 0x5f, 0x30, 0x30, 0x30, 
-0x30, 0x30, 0x64, 0x31, 0x62, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x39, 
-0x5f, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x70, 0x70, 0x33, 0x2e, 0x69, 
-0x20, 0x28, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x63, 0x63, 0x42, 0x49, 0x23, 0x2e, 0x75, 0x73, 0x58, 
-0x37, 0x67, 0x42, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 
-0x0a, 0x09, 0x2f, 0x2f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 
-0x09, 0x2f, 0x2f, 0x20, 0x20, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3a, 0x70, 0x74, 0x78, 0x2c, 
-0x20, 0x49, 0x53, 0x41, 0x3a, 0x73, 0x6d, 0x5f, 0x32, 0x30, 0x2c, 0x20, 0x45, 0x6e, 0x64, 0x69, 
-0x61, 0x6e, 0x3a, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x2c, 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 
-0x65, 0x72, 0x20, 0x53, 0x69, 0x7a, 0x65, 0x3a, 0x33, 0x32, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x20, 
-0x2d, 0x4f, 0x33, 0x09, 0x28, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 
-0x6e, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x67, 
-0x30, 0x09, 0x28, 0x44, 0x65, 0x62, 0x75, 0x67, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x29, 0x0a, 
-0x09, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x6d, 0x32, 0x09, 0x28, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 
-0x20, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 
-0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x09, 0x2e, 0x66, 
-0x69, 0x6c, 0x65, 0x09, 0x31, 0x09, 0x22, 0x3c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2d, 
-0x6c, 0x69, 0x6e, 0x65, 0x3e, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x09, 
-0x22, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x74, 0x6d, 0x70, 0x78, 0x66, 0x74, 0x5f, 0x30, 0x30, 0x30, 
-0x30, 0x30, 0x64, 0x31, 0x62, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2d, 0x38, 
-0x5f, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x75, 0x64, 0x61, 0x66, 0x65, 
-0x32, 0x2e, 0x67, 0x70, 0x75, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x33, 0x09, 
-0x22, 0x75, 0x74, 0x69, 0x6c, 0x2d, 0x6d, 0x70, 0x6d, 0x2d, 0x62, 0x32, 0x67, 0x2d, 0x63, 0x75, 
-0x64, 0x61, 0x2d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x2e, 0x63, 0x75, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x34, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x69, 0x62, 
-0x2f, 0x67, 0x63, 0x63, 0x2f, 0x69, 0x36, 0x38, 0x36, 0x2d, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x2d, 
-0x67, 0x6e, 0x75, 0x2f, 0x34, 0x2e, 0x34, 0x2e, 0x35, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 
-0x65, 0x2f, 0x73, 0x74, 0x64, 0x64, 0x65, 0x66, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 
-0x6c, 0x65, 0x09, 0x35, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x72, 0x74, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 
-0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x36, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 
-0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 
-0x75, 0x64, 0x65, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x37, 0x09, 0x22, 0x2f, 0x75, 
-0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 
-0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x62, 0x75, 0x69, 
-0x6c, 0x74, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 
-0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 
-0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 
-0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x39, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x30, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 
-0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x31, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 
-0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x32, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x33, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 
-0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 
-0x72, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x34, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x63, 0x72, 0x74, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 
-0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x35, 0x09, 0x22, 
-0x2f, 0x75, 0x73, 0x72, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x62, 0x69, 0x74, 
-0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x36, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 
-0x64, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 
-0x65, 0x09, 0x31, 0x37, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 
-0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 
-0x6c, 0x75, 0x64, 0x65, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x66, 0x65, 0x74, 
-0x63, 0x68, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 
-0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 
-0x66, 0x69, 0x6c, 0x65, 0x09, 0x31, 0x39, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 
-0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 
-0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x66, 0x75, 0x6e, 
-0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 
-0x09, 0x32, 0x30, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 
-0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 
-0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 
-0x74, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x31, 0x09, 
-0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 
-0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 
-0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x32, 0x09, 0x22, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 
-0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 
-0x5f, 0x31, 0x31, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 
-0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 
-0x33, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 
-0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 
-0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x31, 0x32, 0x5f, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 
-0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 
-0x6c, 0x65, 0x09, 0x32, 0x34, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 
-0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 
-0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x31, 0x33, 0x5f, 0x64, 0x6f, 0x75, 0x62, 
-0x6c, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 0x0a, 
-0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x35, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 0x2f, 
-0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x2e, 
-0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 0x5f, 0x32, 0x30, 0x5f, 
-0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 
-0x2e, 0x68, 0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x36, 0x09, 0x22, 0x2f, 
-0x75, 0x73, 0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 
-0x69, 0x6e, 0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x6d, 
-0x5f, 0x32, 0x30, 0x5f, 0x69, 0x6e, 0x74, 0x72, 0x69, 0x6e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x68, 
-0x22, 0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x37, 0x09, 0x22, 0x2f, 0x75, 0x73, 
-0x72, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 
-0x2f, 0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x73, 0x75, 0x72, 0x66, 
-0x61, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x68, 0x22, 
-0x0a, 0x09, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x32, 0x38, 0x09, 0x22, 0x2f, 0x75, 0x73, 0x72, 
-0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2f, 0x63, 0x75, 0x64, 0x61, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 
-0x2e, 0x2e, 0x2f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 
-0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x64, 0x62, 0x6c, 0x5f, 0x70, 0x74, 
-0x78, 0x33, 0x2e, 0x68, 0x22, 0x0a, 0x0a, 0x0a, 0x09, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 
-0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 
-0x4d, 0x71, 0x20, 0x28, 0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 
-0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 
-0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 
-0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 
-0x6b, 0x65, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 
-0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 
-0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 
-0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 
-0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 
-0x09, 0x09, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 
-0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 
-0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 
-0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x73, 
-0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 0x70, 0x61, 
-0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 
-0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 
-0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x6e, 0x6f, 0x70, 0x2c, 0x0a, 0x09, 0x09, 0x2e, 0x70, 
-0x61, 0x72, 0x61, 0x6d, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 
-0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 
-0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 0x6f, 0x77, 
-0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 
-0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x25, 0x72, 0x3c, 0x36, 0x38, 
-0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x72, 0x65, 0x67, 0x20, 0x2e, 0x70, 0x72, 0x65, 0x64, 0x20, 0x25, 
-0x70, 0x3c, 0x31, 0x30, 0x3e, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x35, 
-0x33, 0x09, 0x30, 0x0a, 0x24, 0x4c, 0x44, 0x57, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x3a, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x2c, 
-0x20, 0x25, 0x63, 0x74, 0x61, 0x69, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 
-0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x31, 
-0x2c, 0x20, 0x33, 0x32, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x33, 0x2c, 0x20, 0x25, 0x74, 0x69, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x09, 0x61, 0x64, 
-0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x2c, 
-0x20, 0x25, 0x72, 0x32, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 
-0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 
-0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x6e, 0x6f, 0x70, 0x5d, 0x3b, 0x0a, 0x09, 
-0x73, 0x65, 0x74, 0x70, 0x2e, 0x67, 0x74, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x31, 
-0x2c, 0x20, 0x25, 0x72, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 
-0x31, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x35, 0x36, 0x33, 
-0x34, 0x3b, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x42, 
-0x42, 0x31, 0x37, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 
-0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x35, 0x36, 
-0x33, 0x34, 0x3a, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x32, 0x09, 0x30, 
-0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x36, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 
-0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x37, 0x2c, 0x20, 0x5b, 
-0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 
-0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 
-0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 
-0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x3b, 0x0a, 0x09, 
-0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x39, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x38, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x30, 
-0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 
-0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x31, 
-0x2c, 0x20, 0x25, 0x72, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x30, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 
-0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 
-0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x32, 0x2c, 0x20, 
-0x5b, 0x25, 0x72, 0x31, 0x31, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 
-0x33, 0x09, 0x36, 0x35, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 
-0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 
-0x31, 0x31, 0x2b, 0x38, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 
-0x36, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x34, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x31, 0x2b, 
-0x34, 0x5d, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x36, 0x37, 0x09, 0x30, 
-0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x35, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x32, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 
-0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x37, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6c, 0x64, 
-0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x37, 
-0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 
-0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 
-0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5d, 
-0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x31, 0x38, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 0x64, 0x61, 0x70, 0x61, 
-0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 
-0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 
-0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x75, 0x66, 
-0x66, 0x65, 0x72, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x31, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x38, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x3b, 
-0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x32, 0x30, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x31, 0x39, 0x2b, 0x30, 0x5d, 0x3b, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x31, 0x2c, 
-0x20, 0x25, 0x72, 0x32, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 
-0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x32, 0x2c, 0x20, 0x25, 
-0x72, 0x32, 0x31, 0x2c, 0x20, 0x32, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x37, 0x2c, 0x20, 0x25, 0x72, 
-0x32, 0x32, 0x3b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x32, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x33, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x65, 
-0x74, 0x70, 0x2e, 0x6c, 0x74, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x32, 0x2c, 0x20, 
-0x25, 0x72, 0x32, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x35, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 
-0x32, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x39, 0x34, 0x37, 
-0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 
-0x35, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x09, 0x61, 0x64, 
-0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x32, 
-0x33, 0x2c, 0x20, 0x32, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x37, 0x2c, 0x20, 0x5b, 0x5f, 0x5f, 0x63, 0x75, 
-0x64, 0x61, 0x70, 0x61, 0x72, 0x6d, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 
-0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x5f, 0x67, 0x5f, 0x75, 0x38, 0x5f, 0x6c, 
-0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5d, 0x3b, 0x0a, 
-0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x38, 0x2c, 0x20, 
-0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x3a, 0x0a, 0x20, 
-0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x4c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 
-0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 0x33, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 
-0x09, 0x33, 0x09, 0x38, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 
-0x20, 0x09, 0x25, 0x72, 0x32, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x25, 0x72, 
-0x31, 0x36, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 
-0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x30, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x32, 0x39, 0x2b, 0x31, 
-0x32, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x33, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x37, 0x3b, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 
-0x72, 0x33, 0x32, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x33, 0x31, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 
-0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 
-0x33, 0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x32, 0x39, 0x2b, 0x31, 0x31, 0x5d, 0x3b, 0x0a, 0x09, 
-0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x34, 0x2c, 0x20, 0x25, 
-0x72, 0x33, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x37, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 
-0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x33, 0x35, 0x2c, 0x20, 
-0x5b, 0x25, 0x72, 0x33, 0x34, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x35, 0x2c, 0x20, 
-0x34, 0x3b, 0x0a, 0x09, 0x6f, 0x72, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x37, 
-0x2c, 0x20, 0x25, 0x72, 0x33, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x33, 0x36, 0x3b, 0x0a, 0x09, 0x6d, 
-0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x33, 0x37, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x33, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x34, 0x2c, 0x20, 
-0x25, 0x72, 0x33, 0x38, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x34, 0x30, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x33, 0x39, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 
-0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x31, 0x2c, 0x20, 0x30, 
-0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x70, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x31, 0x3b, 
-0x0a, 0x09, 0x40, 0x25, 0x70, 0x33, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x32, 0x35, 0x38, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 
-0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 
-0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 0x33, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 
-0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 
-0x36, 0x35, 0x38, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x38, 0x36, 0x09, 0x30, 
-0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x32, 0x2c, 
-0x20, 0x25, 0x72, 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x38, 
-0x37, 0x09, 0x30, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x34, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x32, 0x3b, 0x0a, 
-0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x34, 0x2c, 0x20, 
-0x25, 0x72, 0x34, 0x33, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 
-0x36, 0x38, 0x32, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x4c, 
-0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 
-0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x30, 0x09, 0x30, 0x0a, 0x09, 0x73, 
-0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x32, 0x2c, 0x20, 0x25, 0x72, 
-0x34, 0x32, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x72, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x34, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x31, 
-0x35, 0x3b, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 
-0x36, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 
-0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x35, 0x2c, 0x20, 0x25, 
-0x72, 0x34, 0x36, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x34, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 
-0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 
-0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 
-0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x6c, 
-0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x35, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 
-0x2c, 0x20, 0x25, 0x72, 0x34, 0x34, 0x3b, 0x0a, 0x09, 0x40, 0x25, 0x70, 0x35, 0x20, 0x62, 0x72, 
-0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x37, 0x30, 0x36, 0x3b, 0x0a, 0x20, 
-0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 
-0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 
-0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 
-0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 
-0x63, 0x09, 0x33, 0x09, 0x39, 0x33, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x73, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x31, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 0x3b, 0x0a, 0x09, 
-0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 
-0x34, 0x35, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x38, 0x37, 0x30, 0x36, 0x3a, 
-0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 
-0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 
-0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 
-0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 0x0a, 0x09, 0x2e, 
-0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x39, 0x35, 0x09, 0x30, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 
-0x73, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x38, 0x3b, 
-0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x34, 0x37, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x63, 0x76, 0x74, 0x2e, 0x75, 
-0x31, 0x36, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x32, 0x38, 0x2c, 0x20, 0x25, 0x72, 
-0x34, 0x38, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 0x75, 0x33, 0x32, 0x20, 
-0x09, 0x25, 0x72, 0x34, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x37, 0x2c, 0x20, 0x32, 0x3b, 0x0a, 
-0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x30, 0x2c, 0x20, 
-0x25, 0x72, 0x32, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x39, 0x3b, 0x0a, 0x09, 0x73, 0x74, 0x2e, 
-0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x31, 0x36, 0x20, 0x09, 0x5b, 0x25, 0x72, 0x35, 
-0x30, 0x2b, 0x32, 0x5d, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x38, 0x34, 0x35, 0x30, 0x3a, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x39, 
-0x33, 0x38, 0x3a, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 
-0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 
-0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 
-0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 0x36, 0x38, 0x32, 
-0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x30, 0x09, 0x30, 0x0a, 0x09, 
-0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x31, 0x2c, 0x20, 0x30, 
-0x3b, 0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x65, 0x71, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x70, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x31, 0x3b, 
-0x0a, 0x09, 0x40, 0x25, 0x70, 0x36, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 
-0x30, 0x5f, 0x32, 0x35, 0x38, 0x3b, 0x0a, 0x20, 0x2f, 0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 
-0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 
-0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x39, 0x30, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 
-0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x37, 
-0x36, 0x38, 0x32, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x33, 0x09, 
-0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x32, 
-0x2c, 0x20, 0x25, 0x72, 0x31, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x32, 0x3b, 0x0a, 0x09, 0x6c, 
-0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x35, 
-0x33, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x35, 0x32, 0x2b, 0x31, 0x32, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 
-0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x34, 0x2c, 0x20, 0x25, 0x72, 
-0x35, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x32, 0x37, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 
-0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x35, 0x35, 0x2c, 0x20, 0x5b, 
-0x25, 0x72, 0x35, 0x34, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 
-0x62, 0x61, 0x6c, 0x2e, 0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x35, 0x36, 0x2c, 0x20, 0x5b, 0x25, 
-0x72, 0x35, 0x32, 0x2b, 0x31, 0x31, 0x5d, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x35, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x36, 0x2c, 0x20, 0x25, 
-0x72, 0x32, 0x37, 0x3b, 0x0a, 0x09, 0x6c, 0x64, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 
-0x75, 0x38, 0x20, 0x09, 0x25, 0x72, 0x35, 0x38, 0x2c, 0x20, 0x5b, 0x25, 0x72, 0x35, 0x37, 0x2b, 
-0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x35, 0x39, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x38, 0x2c, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x6f, 0x72, 
-0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x35, 0x35, 
-0x2c, 0x20, 0x25, 0x72, 0x35, 0x39, 0x3b, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x2e, 0x6c, 0x6f, 0x2e, 
-0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x31, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x30, 0x2c, 
-0x20, 0x34, 0x3b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 
-0x36, 0x32, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x31, 0x3b, 0x0a, 
-0x09, 0x6c, 0x64, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x33, 0x2c, 0x20, 0x5b, 
-0x25, 0x72, 0x36, 0x32, 0x2b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, 0x73, 0x68, 0x6c, 0x2e, 0x62, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x31, 
-0x3b, 0x0a, 0x09, 0x61, 0x6e, 0x64, 0x2e, 0x62, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x34, 0x30, 
-0x2c, 0x20, 0x25, 0x72, 0x36, 0x33, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x34, 0x3b, 0x0a, 0x09, 0x6d, 
-0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x35, 0x2c, 0x20, 0x30, 0x3b, 
-0x0a, 0x09, 0x73, 0x65, 0x74, 0x70, 0x2e, 0x6e, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x70, 0x37, 0x2c, 0x20, 0x25, 0x72, 0x34, 0x30, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x35, 0x3b, 0x0a, 
-0x09, 0x40, 0x25, 0x70, 0x37, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 
-0x5f, 0x37, 0x36, 0x38, 0x32, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x32, 0x35, 0x38, 
-0x3a, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x39, 0x31, 0x34, 0x3a, 0x0a, 0x20, 0x2f, 
-0x2f, 0x3c, 0x6c, 0x6f, 0x6f, 0x70, 0x3e, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 
-0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x38, 
-0x33, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 
-0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 0x35, 0x38, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 
-0x09, 0x33, 0x09, 0x31, 0x30, 0x36, 0x09, 0x30, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x75, 0x33, 
-0x32, 0x20, 0x09, 0x25, 0x72, 0x36, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x32, 0x2c, 0x20, 0x25, 
-0x72, 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 
-0x72, 0x31, 0x36, 0x2c, 0x20, 0x25, 0x72, 0x36, 0x36, 0x2c, 0x20, 0x31, 0x3b, 0x0a, 0x09, 0x73, 
-0x65, 0x74, 0x70, 0x2e, 0x67, 0x65, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 0x25, 0x70, 0x38, 0x2c, 
-0x20, 0x25, 0x72, 0x32, 0x34, 0x2c, 0x20, 0x25, 0x72, 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x40, 0x25, 
-0x70, 0x38, 0x20, 0x62, 0x72, 0x61, 0x20, 0x09, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 0x36, 
-0x35, 0x38, 0x3b, 0x0a, 0x09, 0x62, 0x72, 0x61, 0x2e, 0x75, 0x6e, 0x69, 0x20, 0x09, 0x24, 0x4c, 
-0x74, 0x5f, 0x30, 0x5f, 0x36, 0x31, 0x34, 0x36, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 
-0x39, 0x34, 0x37, 0x34, 0x3a, 0x0a, 0x09, 0x6d, 0x6f, 0x76, 0x2e, 0x75, 0x33, 0x32, 0x20, 0x09, 
-0x25, 0x72, 0x32, 0x38, 0x2c, 0x20, 0x30, 0x3b, 0x0a, 0x24, 0x4c, 0x74, 0x5f, 0x30, 0x5f, 0x36, 
-0x31, 0x34, 0x36, 0x3a, 0x0a, 0x09, 0x2e, 0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x30, 0x39, 
-0x09, 0x30, 0x0a, 0x09, 0x73, 0x74, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x75, 0x31, 
-0x36, 0x20, 0x09, 0x5b, 0x25, 0x72, 0x32, 0x33, 0x2b, 0x30, 0x5d, 0x2c, 0x20, 0x25, 0x72, 0x32, 
-0x38, 0x3b, 0x0a, 0x24, 0x4c, 0x42, 0x42, 0x31, 0x37, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 
-0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 0x2e, 
-0x6c, 0x6f, 0x63, 0x09, 0x33, 0x09, 0x31, 0x31, 0x31, 0x09, 0x30, 0x0a, 0x09, 0x65, 0x78, 0x69, 
-0x74, 0x3b, 0x0a, 0x24, 0x4c, 0x44, 0x57, 0x65, 0x6e, 0x64, 0x5f, 0x42, 0x32, 0x67, 0x43, 0x75, 
-0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x3a, 0x0a, 0x09, 
-0x7d, 0x20, 0x2f, 0x2f, 0x20, 0x42, 0x32, 0x67, 0x43, 0x75, 0x64, 0x61, 0x53, 0x65, 0x61, 0x72, 
-0x63, 0x68, 0x42, 0x4e, 0x44, 0x4d, 0x71, 0x0a, 0x0a, 0x00
-};
-
-const unsigned char* SCCudaPtxDumpGetModule(const char* module){
-       if (!strcmp(module, "util-mpm-b2g-cuda-kernel_sm_10"))
-               return util_mpm_b2g_cuda_kernel_sm_10;
-       if (!strcmp(module, "util-mpm-b2g-cuda-kernel_sm_11"))
-               return util_mpm_b2g_cuda_kernel_sm_11;
-       if (!strcmp(module, "util-mpm-b2g-cuda-kernel_sm_12"))
-               return util_mpm_b2g_cuda_kernel_sm_12;
-       if (!strcmp(module, "util-mpm-b2g-cuda-kernel_sm_13"))
-               return util_mpm_b2g_cuda_kernel_sm_13;
-       if (!strcmp(module, "util-mpm-b2g-cuda-kernel_sm_20"))
-               return util_mpm_b2g_cuda_kernel_sm_20;
-       if (!strcmp(module, "util-mpm-b2g-cuda-kernel_sm_21"))
-               return util_mpm_b2g_cuda_kernel_sm_21;
-       SCLogError(SC_ERR_FATAL, "Error in SCCudaPtxDumpGetModule, module %s not found. Exiting...",module);
-       exit(EXIT_FAILURE);
-};
-#endif /* __ptxdump_h__ */
-#endif /* __SC_CUDA_SUPPORT__ */
index 5b4452d7a7b4672eee13154e3eea184987ab15f2..59d34d9338669ec353e5924d488e11b25368a349 100644 (file)
@@ -77,10 +77,6 @@ enum {
 
 #include "app-layer-protos.h"
 
-#ifdef __SC_CUDA_SUPPORT__
-#define CUDA_MAX_PAYLOAD_SIZE 1500
-#endif
-
 /* forward declaration */
 struct DetectionEngineThreadCtx_;
 
@@ -488,26 +484,6 @@ typedef struct Packet_
                            * It should always point to the lowest
                            * packet in a encapsulated packet */
 
-    /* required for cuda support */
-#ifdef __SC_CUDA_SUPPORT__
-    /* indicates if the cuda mpm would be conducted or a normal cpu mpm would
-     * be conduced on this packet.  If it is set to 0, the cpu mpm; else cuda mpm */
-    uint8_t cuda_mpm_enabled;
-    /* indicates if the cuda mpm has finished running the mpm and processed the
-     * results for this packet, assuming if cuda_mpm_enabled has been set for this
-     * packet */
-    uint16_t cuda_done;
-    /* used by the detect thread and the cuda mpm dispatcher thread.  The detect
-     * thread would wait on this cond var, if the cuda mpm dispatcher thread
-     * still hasn't processed the packet.  The dispatcher would use this cond
-     * to inform the detect thread(in case it is waiting on this packet), once
-     * the dispatcher is done processing the packet results */
-    SCMutex cuda_mutex;
-    SCCondT cuda_cond;
-    /* the extra 1 in the 1481, is to hold the no_of_matches from the mpm run */
-    uint16_t mpm_offsets[CUDA_MAX_PAYLOAD_SIZE + 1];
-#endif
-
 #ifdef PROFILING
     PktProfiling profile;
 #endif
@@ -610,23 +586,12 @@ typedef struct DecodeThreadVars_
 /**
  *  \brief Initialize a packet structure for use.
  */
-#ifndef __SC_CUDA_SUPPORT__
 #define PACKET_INITIALIZE(p) { \
     SCMutexInit(&(p)->tunnel_mutex, NULL); \
     PACKET_RESET_CHECKSUMS((p)); \
     (p)->pkt = ((uint8_t *)(p)) + sizeof(Packet); \
     (p)->livedev = NULL; \
 }
-#else
-#define PACKET_INITIALIZE(p) { \
-    SCMutexInit(&(p)->tunnel_mutex, NULL); \
-    PACKET_RESET_CHECKSUMS((p)); \
-    SCMutexInit(&(p)->cuda_mutex, NULL); \
-    SCCondInit(&(p)->cuda_cond, NULL); \
-    (p)->pkt = ((uint8_t *)(p)) + sizeof(Packet); \
-    (p)->livedev = NULL; \
-}
-#endif
 
 /**
  *  \brief Recycle a packet structure for reuse.
@@ -699,39 +664,17 @@ typedef struct DecodeThreadVars_
         PACKET_PROFILING_RESET((p));            \
     } while (0)
 
-#ifndef __SC_CUDA_SUPPORT__
 #define PACKET_RECYCLE(p) PACKET_DO_RECYCLE((p))
-#else
-#define PACKET_RECYCLE(p) do {                  \
-    PACKET_DO_RECYCLE((p));                     \
-    SCMutexDestroy(&(p)->cuda_mutex);           \
-    SCCondDestroy(&(p)->cuda_cond);             \
-    SCMutexInit(&(p)->cuda_mutex, NULL);        \
-    SCCondInit(&(p)->cuda_cond, NULL);          \
-    PACKET_RESET_CHECKSUMS((p));                \
-} while(0)
-#endif
 
 /**
  *  \brief Cleanup a packet so that we can free it. No memset needed..
  */
-#ifndef __SC_CUDA_SUPPORT__
 #define PACKET_CLEANUP(p) do {                  \
         if ((p)->pktvar != NULL) {              \
             PktVarFree((p)->pktvar);            \
         }                                       \
         SCMutexDestroy(&(p)->tunnel_mutex);     \
     } while (0)
-#else
-#define PACKET_CLEANUP(p) do {                  \
-    if ((p)->pktvar != NULL) {                  \
-        PktVarFree((p)->pktvar);                \
-    }                                           \
-    SCMutexDestroy(&(p)->tunnel_mutex);         \
-    SCMutexDestroy(&(p)->cuda_mutex);           \
-    SCCondDestroy(&(p)->cuda_cond);             \
-} while(0)
-#endif
 
 
 /* macro's for setting the action
index cf458214be80ea96702646c9c589db80db34c468..87dc7cf1f3af3d76e51fb9a2616ce54bf9d297e0 100644 (file)
@@ -49,9 +49,6 @@
 
 #include "stream.h"
 
-#include "util-cuda-handlers.h"
-#include "util-mpm-b2g-cuda.h"
-
 #include "util-enum.h"
 #include "util-debug.h"
 #include "util-print.h"
 
 /** \todo make it possible to use multiple pattern matcher algorithms next to
           eachother. */
-#ifdef __SC_CUDA_SUPPORT__
-#define PM   MPM_B2G_CUDA
-#else
 #define PM   MPM_AC
-#endif
 
 #define POPULATE_MPM_AVOID_PACKET_MPM_PATTERNS 0x01
 #define POPULATE_MPM_AVOID_STREAM_MPM_PATTERNS 0x02
@@ -228,36 +221,11 @@ uint32_t PacketPatternSearch(DetectEngineThreadCtx *det_ctx, Packet *p)
     if (mpm_ctx == NULL)
         SCReturnInt(0);
 
-#ifndef __SC_CUDA_SUPPORT__
     ret = mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
                                               &det_ctx->mtc,
                                               &det_ctx->pmq,
                                               p->payload,
                                               p->payload_len);
-#else
-    /* if the user has enabled cuda support, but is not using the cuda mpm
-     * algo, then we shouldn't take the path of the dispatcher.  Call the mpm
-     * directly */
-    if (mpm_ctx->mpm_type != MPM_B2G_CUDA) {
-        ret = mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
-                                                  &det_ctx->mtc,
-                                                  &det_ctx->pmq,
-                                                  p->payload,
-                                                  p->payload_len);
-        SCReturnInt(ret);
-    }
-
-    if (p->cuda_mpm_enabled) {
-        ret = B2gCudaResultsPostProcessing(p, mpm_ctx, &det_ctx->mtc,
-                                           &det_ctx->pmq);
-    } else {
-        ret = mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
-                                                  &det_ctx->mtc,
-                                                  &det_ctx->pmq,
-                                                  p->payload,
-                                                  p->payload_len);
-    }
-#endif
 
     SCReturnInt(ret);
 }
@@ -2125,13 +2093,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             SCLogDebug("sh->mpm_proto_tcp_ctx == NULL. This should never happen");
             exit(EXIT_FAILURE);
         }
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_proto_tcp_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_proto_tcp_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_proto_tcp_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_proto_tcp_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
 
         if (de_ctx->sgh_mpm_context == ENGINE_SGH_MPM_FACTORY_CONTEXT_SINGLE) {
             sh->mpm_proto_udp_ctx_ts = MpmFactoryGetMpmCtxForProfile(de_ctx, de_ctx->sgh_mpm_context_proto_udp_packet, 0);
@@ -2144,13 +2107,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             SCLogDebug("sh->mpm_proto_udp_ctx == NULL. This should never happen");
             exit(EXIT_FAILURE);
         }
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_proto_udp_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_proto_udp_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_proto_udp_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_proto_udp_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
 
         if (de_ctx->sgh_mpm_context == ENGINE_SGH_MPM_FACTORY_CONTEXT_SINGLE) {
             sh->mpm_proto_other_ctx =
@@ -2163,11 +2121,7 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             SCLogDebug("sh->mpm_proto_other_ctx == NULL. This should never happen");
             exit(EXIT_FAILURE);
         }
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_proto_other_ctx, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_proto_other_ctx, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     } /* if (has_co_packet) */
 
     if (has_co_stream) {
@@ -2182,14 +2136,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             SCLogDebug("sh->mpm_stream_ctx == NULL. This should never happen");
             exit(EXIT_FAILURE);
         }
-
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_stream_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_stream_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_stream_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_stream_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_uri) {
@@ -2205,13 +2153,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_uri_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_uri_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_uri_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_uri_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_hcbd) {
@@ -2227,13 +2170,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_hcbd_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_hcbd_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_hcbd_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_hcbd_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_hsbd) {
@@ -2249,13 +2187,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_hsbd_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_hsbd_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_hsbd_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_hsbd_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_hhd) {
@@ -2271,13 +2204,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_hhd_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_hhd_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_hhd_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_hhd_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_hrhd) {
@@ -2293,13 +2221,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_hrhd_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_hrhd_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_hrhd_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_hrhd_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_hmd) {
@@ -2315,13 +2238,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_hmd_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_hmd_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_hmd_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_hmd_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_hcd) {
@@ -2337,13 +2255,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_hcd_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_hcd_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_hcd_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_hcd_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_hrud) {
@@ -2359,13 +2272,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_hrud_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_hrud_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_hrud_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_hrud_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_hsmd) {
@@ -2381,13 +2289,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_hsmd_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_hsmd_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_hsmd_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_hsmd_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_hscd) {
@@ -2403,13 +2306,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_hscd_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_hscd_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_hscd_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_hscd_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_huad) {
@@ -2425,13 +2323,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_huad_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_huad_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_huad_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_huad_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_hhhd) {
@@ -2447,13 +2340,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_hhhd_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_hhhd_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_hhhd_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_hhhd_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_hrhhd) {
@@ -2469,13 +2357,8 @@ int PatternMatchPrepareGroup(DetectEngineCtx *de_ctx, SigGroupHead *sh)
             exit(EXIT_FAILURE);
         }
 
-#ifndef __SC_CUDA_SUPPORT__
         MpmInitCtx(sh->mpm_hrhhd_ctx_ts, de_ctx->mpm_matcher, -1);
         MpmInitCtx(sh->mpm_hrhhd_ctx_tc, de_ctx->mpm_matcher, -1);
-#else
-        MpmInitCtx(sh->mpm_hrhhd_ctx_ts, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-        MpmInitCtx(sh->mpm_hrhhd_ctx_tc, de_ctx->mpm_matcher, de_ctx->cuda_rc_mod_handle);
-#endif
     }
 
     if (has_co_packet ||
index c232c0792eaf4731e8ed6a83e941f3ab68dea1ac..1a7b2e8d2389beb5d3db3b64e45277dcfb981953 100644 (file)
 #include "util-unittest-helper.h"
 #include "util-debug.h"
 #include "util-hashlist.h"
-#include "util-cuda-handlers.h"
-#include "util-mpm-b2g-cuda.h"
 #include "util-cuda.h"
 #include "util-privs.h"
 #include "util-profiling.h"
@@ -4431,31 +4429,6 @@ int SigGroupBuild(DetectEngineCtx *de_ctx)
         exit(EXIT_FAILURE);
     }
 
-#ifdef __SC_CUDA_SUPPORT__
-    size_t cuda_total = 0;
-    size_t cuda_free_before_alloc = 0;
-    /* we register a module that would require cuda handler service.  This
-     * module would hold the context for all the patterns in the rules */
-    de_ctx->cuda_rc_mod_handle = SCCudaHlRegisterModule("SC_RULES_CONTENT_B2G_CUDA");
-    if (de_ctx->mpm_matcher == MPM_B2G_CUDA) {
-        CUcontext dummy_context;
-        if (SCCudaHlGetCudaContext(&dummy_context, "mpm",
-                                   de_ctx->cuda_rc_mod_handle) == -1) {
-            SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error getting a cuda context for the "
-                       "module SC_RULES_CONTENT_B2G_CUDA");
-        }
-        SCCudaCtxPushCurrent(dummy_context);
-        if (SCCudaMemGetInfo(&cuda_free_before_alloc, &cuda_total) == 0) {
-            SCLogInfo("Total Memory available in the CUDA context used for mpm "
-                      "with b2g: %.2f MB", cuda_total/(1024.0 * 1024.0));
-            SCLogInfo("Free Memory available in the CUDA context used for b2g "
-                      "mpm before any allocation is made on the GPU for the "
-                      "context: %.2f MB", cuda_free_before_alloc/(1024.0 * 1024.0));
-        }
-    }
-
-#endif
-
     if (SigAddressPrepareStage3(de_ctx) != 0) {
         SCLogError(SC_ERR_DETECT_PREPARE, "initializing the detection engine failed");
         exit(EXIT_FAILURE);
@@ -4465,32 +4438,6 @@ int SigGroupBuild(DetectEngineCtx *de_ctx)
         exit(EXIT_FAILURE);
     }
 
-#ifdef __SC_CUDA_SUPPORT__
-    size_t cuda_free_after_alloc = 0;
-    /* if a user has selected some other mpm algo other than b2g_cuda, inspite of
-     * enabling cuda support, then no cuda contexts or cuda vars would be created.
-     * Pop the cuda context, only on confirming that the MPM algo selected is the
-     * CUDA mpm algo */
-    if (de_ctx->mpm_matcher == MPM_B2G_CUDA) {
-        if (SCCudaMemGetInfo(&cuda_free_after_alloc, &cuda_total) == 0) {
-            SCLogInfo("Free Memory available in the CUDA context used for b2g mpm "
-                      "after allocation is made on the GPU for the context: %.2f MB",
-                      cuda_free_after_alloc/(1024.0 * 1024.0));
-            SCLogInfo("Total memory consumed by the CUDA context for the b2g mpm: "
-                      "%.2f MB", (cuda_free_before_alloc/(1024.0 * 1024.0)) -
-                      (cuda_free_after_alloc/(1024.0 * 1024.0)));
-        }
-        /* the AddressPrepareStage3 actually handles the creation of device
-         * pointers on the gpu.  The cuda context that stage3 used would still be
-         * attached to this host thread.  We need to pop this cuda context so that
-         * the dispatcher thread that we are going to create for the above module
-         * we registered can attach to this cuda context */
-        CUcontext context;
-        if (SCCudaCtxPopCurrent(&context) == -1)
-            exit(EXIT_FAILURE);
-    }
-#endif
-
     if (de_ctx->sgh_mpm_context == ENGINE_SGH_MPM_FACTORY_CONTEXT_SINGLE) {
         MpmCtx *mpm_ctx = NULL;
         mpm_ctx = MpmFactoryGetMpmCtxForProfile(de_ctx, de_ctx->sgh_mpm_context_proto_tcp_packet, 0);
index 0513e639f12eddfe81a11b13360b68142c1536aa..0dbdd6581552044bc360c2d5694687a924104a47 100644 (file)
@@ -622,13 +622,6 @@ typedef struct DetectEngineCtx_ {
 
     uint16_t mpm_matcher; /**< mpm matcher this ctx uses */
 
-#ifdef __SC_CUDA_SUPPORT__
-    /* cuda rules content module handle.  Holds the handler serivice's
-     * (util-cuda-handler.c) handle for a module.  This module would
-     * hold the cuda context for all the rules content */
-    int cuda_rc_mod_handle;
-#endif
-
     /* Config options */
 
     uint16_t max_uniq_toclient_src_groups;
@@ -843,12 +836,6 @@ typedef struct DetectionEngineThreadCtx_ {
     } filestore[DETECT_FILESTORE_MAX];
 
     DetectEngineCtx *de_ctx;
-#ifdef __SC_CUDA_SUPPORT__
-    /* each detection thread would have it's own queue where the cuda dispatcher
-     * thread can dump the packets once it has processed them */
-    Tmq *cuda_mpm_rc_disp_outq;
-#endif
-
     /** store for keyword contexts that need a per thread storage because of
      *  thread safety issues */
     void **keyword_ctxs_array;
index 0b05ae086747568c00eed52b7b398f7d0cebc264..03972e2d0102e9537e3f2a6f6c0ba5be72de84c2 100644 (file)
@@ -48,8 +48,6 @@
 #include "util-unittest.h"
 #include "util-unittest-helper.h"
 #include "util-classification-config.h"
-#include "util-mpm-b2g-cuda.h"
-#include "util-cuda-handlers.h"
 #include "util-privs.h"
 #include "util-print.h"
 #include "util-proto-name.h"
index 281b09326709c2a049241f006955551d72ea16e9..bfaf832c1c84c771510f5506b21864f2e8c7e01c 100644 (file)
@@ -39,7 +39,6 @@
 #include "runmode-af-packet.h"
 #include "log-httplog.h"
 #include "output.h"
-#include "cuda-packet-batcher.h"
 #include "detect-engine-mpm.h"
 
 #include "alert-fastlog.h"
index 8d87d5e0993f6dc00f01a739257b06d5b14e33c4..4fa9a6fccb927d3e562c479623eda334f768f600 100644 (file)
@@ -22,7 +22,6 @@
 #include "runmode-erf-dag.h"
 #include "log-httplog.h"
 #include "output.h"
-#include "cuda-packet-batcher.h"
 #include "source-pfring.h"
 
 #include "alert-fastlog.h"
index 4e70e0713576e38695909d706efdacb4dcffd02f..c8a1f95de6a3b29ed5b9f98b982d335b5eda9756 100644 (file)
@@ -22,7 +22,6 @@
 #include "runmode-erf-file.h"
 #include "log-httplog.h"
 #include "output.h"
-#include "cuda-packet-batcher.h"
 #include "source-pfring.h"
 
 #include "alert-fastlog.h"
index c79ab61caae76c078af3911d8ca78a0f551a7926..5ba9e92a4fbd6169f8e2d64e0c2ecf1c3240e260 100644 (file)
@@ -33,7 +33,6 @@
 #include "runmode-ipfw.h"
 #include "log-httplog.h"
 #include "output.h"
-#include "cuda-packet-batcher.h"
 #include "source-pfring.h"
 
 #include "alert-fastlog.h"
index 58a58b9890860c2c7e5d0d6b74219dd568354226..3f750414bf0e35cf74ec13a442c1361517a2ca48 100644 (file)
@@ -32,7 +32,6 @@
 #include "runmode-nfq.h"
 #include "log-httplog.h"
 #include "output.h"
-#include "cuda-packet-batcher.h"
 #include "source-pfring.h"
 
 #include "alert-fastlog.h"
index 29e00b0710b125d6a5b67b424685bc4901002f91..d68618e04d3377eb2ec0252dc1c9ec23a9da4b9a 100644 (file)
@@ -22,7 +22,6 @@
 #include "runmode-pcap-file.h"
 #include "log-httplog.h"
 #include "output.h"
-#include "cuda-packet-batcher.h"
 #include "source-pfring.h"
 #include "detect-engine-mpm.h"
 
@@ -150,7 +149,6 @@ int RunModeFilePcapAuto(DetectEngineCtx *de_ctx)
     char tname[16];
     uint16_t cpu = 0;
     TmModule *tm_module;
-    int cuda = 0;
     RunModeInitialize();
 
     /* Available cpus */
@@ -165,116 +163,42 @@ int RunModeFilePcapAuto(DetectEngineCtx *de_ctx)
 
     TimeModeSetOffline();
 
-#if defined(__SC_CUDA_SUPPORT__)
-    if (PatternMatchDefaultMatcher() == MPM_B2G_CUDA) {
-        cuda = 1;
+    /* create the threads */
+    ThreadVars *tv_receivepcap =
+        TmThreadCreatePacketHandler("ReceivePcapFile",
+                                    "packetpool", "packetpool",
+                                    "detect-queue1", "simple",
+                                    "pktacqloop");
+    if (tv_receivepcap == NULL) {
+        printf("ERROR: TmThreadsCreate failed\n");
+        exit(EXIT_FAILURE);
     }
-#endif
-
-    if (cuda == 0) {
-        /* create the threads */
-        ThreadVars *tv_receivepcap =
-            TmThreadCreatePacketHandler("ReceivePcapFile",
-                    "packetpool", "packetpool",
-                    "detect-queue1", "simple",
-                    "pktacqloop");
-        if (tv_receivepcap == NULL) {
-            printf("ERROR: TmThreadsCreate failed\n");
-            exit(EXIT_FAILURE);
-        }
-        tm_module = TmModuleGetByName("ReceivePcapFile");
-        if (tm_module == NULL) {
-            printf("ERROR: TmModuleGetByName failed for ReceivePcap\n");
-            exit(EXIT_FAILURE);
-        }
-        TmSlotSetFuncAppend(tv_receivepcap, tm_module, file);
-
-        tm_module = TmModuleGetByName("DecodePcapFile");
-        if (tm_module == NULL) {
-            printf("ERROR: TmModuleGetByName DecodePcap failed\n");
-            exit(EXIT_FAILURE);
-        }
-        TmSlotSetFuncAppend(tv_receivepcap, tm_module, NULL);
-
-        tm_module = TmModuleGetByName("StreamTcp");
-        if (tm_module == NULL) {
-            printf("ERROR: TmModuleGetByName StreamTcp failed\n");
-            exit(EXIT_FAILURE);
-        }
-        TmSlotSetFuncAppend(tv_receivepcap, tm_module, (void *)de_ctx);
-
-        TmThreadSetCPU(tv_receivepcap, RECEIVE_CPU_SET);
-
-        if (TmThreadSpawn(tv_receivepcap) != TM_ECODE_OK) {
-            printf("ERROR: TmThreadSpawn failed\n");
-            exit(EXIT_FAILURE);
-        }
-#if defined(__SC_CUDA_SUPPORT__)
-    } else {
-        /* create the threads */
-        ThreadVars *tv_receivepcap =
-            TmThreadCreatePacketHandler("ReceivePcapFile",
-                                        "packetpool", "packetpool",
-                                        "cuda-pb", "simple",
-                                        "pktacqloop");
-        if (tv_receivepcap == NULL) {
-            printf("ERROR: TmThreadsCreate failed\n");
-            exit(EXIT_FAILURE);
-        }
-        tm_module = TmModuleGetByName("ReceivePcapFile");
-        if (tm_module == NULL) {
-            printf("ERROR: TmModuleGetByName failed for ReceivePcap\n");
-            exit(EXIT_FAILURE);
-        }
-        TmSlotSetFuncAppend(tv_receivepcap, tm_module, file);
-
-        TmThreadSetCPU(tv_receivepcap, RECEIVE_CPU_SET);
-
-        tm_module = TmModuleGetByName("DecodePcapFile");
-        if (tm_module == NULL) {
-            printf("ERROR: TmModuleGetByName DecodePcap failed\n");
-            exit(EXIT_FAILURE);
-        }
-        TmSlotSetFuncAppend(tv_receivepcap, tm_module, NULL);
-
-        TmThreadSetCPU(tv_receivepcap, RECEIVE_CPU_SET);
-
-        if (TmThreadSpawn(tv_receivepcap) != TM_ECODE_OK) {
-            printf("ERROR: TmThreadSpawn failed\n");
-            exit(EXIT_FAILURE);
-        }
-
-        ThreadVars *tv_cuda_PB =
-            TmThreadCreate("CUDA_PB",
-                           "cuda-pb", "simple",
-                           "detect-queue1", "simple",
-                           "custom", SCCudaPBTmThreadsSlot1, 0);
-        if (tv_cuda_PB == NULL) {
-            printf("ERROR: TmThreadsCreate failed for CUDA_PB\n");
-            exit(EXIT_FAILURE);
-        }
-        tv_cuda_PB->type = TVT_PPT;
+    tm_module = TmModuleGetByName("ReceivePcapFile");
+    if (tm_module == NULL) {
+        printf("ERROR: TmModuleGetByName failed for ReceivePcap\n");
+        exit(EXIT_FAILURE);
+    }
+    TmSlotSetFuncAppend(tv_receivepcap, tm_module, file);
 
-        tm_module = TmModuleGetByName("CudaPacketBatcher");
-        if (tm_module == NULL) {
-            printf("ERROR: TmModuleGetByName CudaPacketBatcher failed\n");
-            exit(EXIT_FAILURE);
-        }
-        TmSlotSetFuncAppend(tv_cuda_PB, tm_module, de_ctx);
+    tm_module = TmModuleGetByName("DecodePcapFile");
+    if (tm_module == NULL) {
+        printf("ERROR: TmModuleGetByName DecodePcap failed\n");
+        exit(EXIT_FAILURE);
+    }
+    TmSlotSetFuncAppend(tv_receivepcap, tm_module, NULL);
 
-        tm_module = TmModuleGetByName("StreamTcp");
-        if (tm_module == NULL) {
-            printf("ERROR: TmModuleGetByName StreamTcp failed\n");
-            exit(EXIT_FAILURE);
-        }
-        TmSlotSetFuncAppend(tv_cuda_PB, tm_module, NULL);
+    tm_module = TmModuleGetByName("StreamTcp");
+    if (tm_module == NULL) {
+        printf("ERROR: TmModuleGetByName StreamTcp failed\n");
+        exit(EXIT_FAILURE);
+    }
+    TmSlotSetFuncAppend(tv_receivepcap, tm_module, (void *)de_ctx);
 
-        if (TmThreadSpawn(tv_cuda_PB) != TM_ECODE_OK) {
-            printf("ERROR: TmThreadSpawn failed\n");
-            exit(EXIT_FAILURE);
-        }
+    TmThreadSetCPU(tv_receivepcap, RECEIVE_CPU_SET);
 
-#endif
+    if (TmThreadSpawn(tv_receivepcap) != TM_ECODE_OK) {
+        printf("ERROR: TmThreadSpawn failed\n");
+        exit(EXIT_FAILURE);
     }
 
     /* start with cpu 1 so that if we're creating an odd number of detect
index 08d8d1a717854f409b42a981584ae87d4f371c4a..1ea1ba5976a68dd55d92c0c077a7b070ba911972 100644 (file)
@@ -22,7 +22,6 @@
 #include "runmode-pcap.h"
 #include "log-httplog.h"
 #include "output.h"
-#include "cuda-packet-batcher.h"
 #include "source-pfring.h"
 #include "detect-engine-mpm.h"
 
index c1fa684502d86f575c08c2ba038f05365814275f..6acb24f84090f012faf022da4b25184ff827c0a0 100644 (file)
@@ -23,7 +23,6 @@
 #include "source-pfring.h"
 #include "log-httplog.h"
 #include "output.h"
-#include "cuda-packet-batcher.h"
 #include "source-pfring.h"
 
 #include "alert-fastlog.h"
index 8fb15d53c0d4b04a54db3cb70fba118107db766c..d58923324546e217f345d7e689eb05c14f9f63dc 100644 (file)
@@ -22,7 +22,6 @@
 #include "runmode-pcap-file.h"
 #include "log-httplog.h"
 #include "output.h"
-#include "cuda-packet-batcher.h"
 #include "source-pfring.h"
 #include "detect-engine-mpm.h"
 
index 3f0380075298960386979b59e2ef35b5d3d40568..560c1591005578d327fb2cd2782f4ab1f4e219ff 100644 (file)
@@ -46,8 +46,6 @@
 
 #include "output.h"
 
-#include "cuda-packet-batcher.h"
-
 #include "source-pfring.h"
 
 int debuglog_enabled = 0;
index a5a91b81d86f8e62c2476294e66730b3176f017a..217c03690b4a47f0dbe4d3b8cf582990daf219c1 100644 (file)
 #include "util-daemon.h"
 #include "reputation.h"
 
-/* holds the cuda b2g module */
-#include "util-mpm-b2g-cuda.h"
-#include "util-cuda-handlers.h"
-#include "cuda-packet-batcher.h"
-
 #include "output.h"
 #include "util-privs.h"
 
@@ -1455,11 +1450,6 @@ int main(int argc, char **argv)
      * logging module. */
     SCLogLoadConfig(daemon);
 
-#ifdef __SC_CUDA_SUPPORT__
-    /* load the cuda configuration */
-    SCCudaHlGetYamlConf();
-#endif /* __SC_CUDA_SUPPORT__ */
-
     /* Load the Host-OS lookup. */
     SCHInfoLoadFromConfig();
     if (!list_keywords && !list_app_layer_protocols &&
@@ -1598,11 +1588,6 @@ int main(int argc, char **argv)
     /* file log */
     TmModuleLogFileLogRegister();
     TmModuleLogFilestoreRegister();
-    /* cuda */
-#ifdef __SC_CUDA_SUPPORT__
-    TmModuleCudaMpmB2gRegister();
-    TmModuleCudaPacketBatcherRegister();
-#endif
     TmModuleDebugList();
 
     AppLayerHtpNeedFileInspection();
@@ -1724,15 +1709,6 @@ int main(int argc, char **argv)
         else {
             uint32_t failed = UtRunTests(regex_arg);
             UtCleanup();
-#ifdef __SC_CUDA_SUPPORT__
-            /* need this in case any of the cuda dispatcher threads are still
-             * running, kill them, so that we can free the cuda contexts.  We
-             * need to free those cuda contexts so that next when we call
-             * deregister functions, we will need to attach to those contexts
-             * the contexts and its associated data */
-            TmThreadKillThreads();
-            SCCudaHlDeRegisterAllRegisteredModules();
-#endif
             if (failed) {
                 exit(EXIT_FAILURE);
             }
@@ -1897,10 +1873,6 @@ int main(int argc, char **argv)
     if (sig_file == NULL && rule_reload == 1)
         UtilSignalHandlerSetup(SIGUSR2, SignalHandlerSigusr2);
 
-#ifdef __SC_CUDA_SUPPORT__
-    SCCudaPBSetUpQueuesAndBuffers();
-#endif /* __SC_CUDA_SUPPORT__ */
-
     SCThresholdConfInitContext(de_ctx,NULL);
     SCAsn1LoadConfig();
 
@@ -1962,14 +1934,6 @@ int main(int argc, char **argv)
 
     RunModeDispatch(run_mode, runmode_custom_mode, de_ctx);
 
-#ifdef __SC_CUDA_SUPPORT__
-    if (PatternMatchDefaultMatcher() == MPM_B2G_CUDA) {
-        /* start the dispatcher thread for this module */
-        if (B2gCudaStartDispatcherThreadRC("SC_RULES_CONTENT_B2G_CUDA") == -1)
-            exit(EXIT_FAILURE);
-    }
-#endif
-
     /* In Unix socket runmode, Flow manager is started on demand */
     if (run_mode != RUNMODE_UNIX_SOCKET) {
         /* Spawn the unix socket manager thread */
@@ -2050,10 +2014,6 @@ int main(int argc, char **argv)
     /* Update the engine stage/status flag */
     (void) SC_ATOMIC_CAS(&engine_stage, SURICATA_RUNTIME, SURICATA_DEINIT);
 
-#ifdef __SC_CUDA_SUPPORT__
-    SCCudaPBKillBatchingPackets();
-#endif
-
     UnixSocketKillSocketThread();
 
     if (run_mode != RUNMODE_UNIX_SOCKET) {
@@ -2119,30 +2079,6 @@ int main(int argc, char **argv)
 
     SCPidfileRemove(pid_filename);
 
-    /** \todo review whats needed here */
-#ifdef __SC_CUDA_SUPPORT__
-    if (PatternMatchDefaultMatcher() == MPM_B2G_CUDA) {
-        /* all threadvars related to cuda should be free by now, which means
-         * the cuda contexts would be floating */
-        if (SCCudaHlPushCudaContextFromModule("SC_RULES_CONTENT_B2G_CUDA") == -1) {
-            SCLogError(SC_ERR_CUDA_HANDLER_ERROR, "Call to "
-                       "SCCudaHlPushCudaContextForModule() failed during the "
-                       "shutdown phase just before the call to SigGroupCleanup()");
-        }
-    }
-#endif
-#ifdef __SC_CUDA_SUPPORT__
-    if (PatternMatchDefaultMatcher() == MPM_B2G_CUDA) {
-        /* pop the cuda context we just pushed before the call to SigGroupCleanup() */
-        if (SCCudaCtxPopCurrent(NULL) == -1) {
-            SCLogError(SC_ERR_CUDA_HANDLER_ERROR, "Call to SCCudaCtxPopCurrent() "
-                       "during the shutdown phase just before the call to "
-                       "SigGroupCleanup()");
-            return 0;
-        }
-    }
-#endif
-
     AppLayerHtpPrintStats();
 
     if (global_de_ctx) {
@@ -2174,13 +2110,6 @@ int main(int argc, char **argv)
     SCProfilingDestroy();
 #endif
 
-#ifdef __SC_CUDA_SUPPORT__
-    /* all cuda contexts attached to any threads should be free by now.
-     * if any host_thread is still attached to any cuda_context, they need
-     * to pop them by the time we reach here, if they aren't using those
-     * cuda contexts in any way */
-    SCCudaHlDeRegisterAllRegisteredModules();
-#endif
 #ifdef OS_WIN32
        if (daemon) {
                return 0;
index 9757b663bb55995ae1cd9c1fbafd72f3104b6ae2..908938b3acbd7501ffe3b82b0bc4d138338685fa 100644 (file)
@@ -255,10 +255,6 @@ const char * TmModuleTmmIdToString(TmmId id)
         CASE_CODE (TMM_DECODEIPFW);
         CASE_CODE (TMM_VERDICTIPFW);
         CASE_CODE (TMM_RECEIVEIPFW);
-#ifdef __SC_CUDA_SUPPORT__
-        CASE_CODE (TMM_CUDA_MPM_B2G);
-        CASE_CODE (TMM_CUDA_PACKET_BATCHER);
-#endif
         CASE_CODE (TMM_RECEIVEERFFILE);
         CASE_CODE (TMM_DECODEERFFILE);
         CASE_CODE (TMM_RECEIVEERFDAG);
index 53e53d0e55f4afced0ec4d36840225e5103d92f3..2a59a7d73fca0bdb2d8851c2211606172e139c76 100644 (file)
@@ -65,10 +65,6 @@ typedef enum {
     TMM_DECODEIPFW,
     TMM_VERDICTIPFW,
     TMM_RECEIVEIPFW,
-#ifdef __SC_CUDA_SUPPORT__
-    TMM_CUDA_MPM_B2G,
-    TMM_CUDA_PACKET_BATCHER,
-#endif
     TMM_RECEIVEERFFILE,
     TMM_DECODEERFFILE,
     TMM_RECEIVEERFDAG,
diff --git a/src/util-cuda-handlers.c b/src/util-cuda-handlers.c
deleted file mode 100644 (file)
index e500f40..0000000
+++ /dev/null
@@ -1,1068 +0,0 @@
-/* Copyright (C) 2007-2010 Open Information Security Foundation
- *
- * You can copy, redistribute or modify this Program under the terms of
- * the GNU General Public License version 2 as published by the Free
- * Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * version 2 along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-/**
- * \file Provides cuda utility functions.
- *
- * \author Anoop Saldanha <anoopsaldanha@gmail.com>
- *
- *       A module in the engine that wants to use the cuda engine, might need
- *       some utilities to handle contexts, modules and device_pointers.
- *
- *       Let us say we have a module that needs to share a context among various
- *       sections inside it.  To enable it share contexts within various
- *       sections the module first register itself using the function
- *       SCCudaHlRegisterModule() and receive a unique handle.  Once it has
- *       retrieved the unique handle, it can then call SCCudaHlGetCudaContext(),
- *       with the handle.  A new cuda context would be created and the internal
- *       data structures would be updated to associate this newly created
- *       context with this module handle.  Any future calls to
- *       SCCudaHlGetCudaContext() with the same handle will return the
- *       cuda_context, which has already been created and associated with the
- *       handle.  Any calls to SCCudaHlGetCudaContext() with a new handle,
- *       would result in the creation of a new cuda context.
- *
- *       Similarly if we want to create a new cuda_module against a particular
- *       context, we can call SCCudaHlGetCudaModule() with the handle and it
- *       should work as above.  Please do note that a cuda module can't be
- *       created against a handle using SCCudaHlGetCudaModule(), unless
- *       a cuda_context has been associated with the handle by a previous call
- *       to SCCudaHlGetCudaContext().  Also do note that, a cuda module is
- *       created against a cuda context that is associated with the current
- *       host thread.  So do takecare to associate your host thread with the
- *       cuda_context that is associated with the handle, against which you
- *       want to call SCCudaHlGetCudaModule().
- *
- * \todo Provide support for multiple cuda context storage, although it is
- *       highly unlikely we would need this feature.
- *
- *       We also need to use a mutex for module_data.
- */
-
-#include "suricata-common.h"
-#include "suricata.h"
-#include "detect.h"
-#include "decode.h"
-
-#include "util-cuda.h"
-#include "util-cuda-handlers.h"
-#include "util-mpm-b2g-cuda.h"
-
-#include "tmqh-simple.h"
-
-#include "conf.h"
-#include "util-error.h"
-#include "util-debug.h"
-#include "util-unittest.h"
-#include "packet-queue.h"
-#include "util-mpm.h"
-
-/* macros decides if cuda is enabled for the platform or not */
-#ifdef __SC_CUDA_SUPPORT__
-
-/* file only exists if cuda is enabled */
-#include "cuda-ptxdump.h"
-
-static SCCudaHlModuleData *module_data = NULL;
-
-static uint8_t module_handle = 1;
-
-/* holds the parsed cuda configuration from our yaml file */
-static SCCudaHlCudaProfile *cuda_profiles = NULL;
-
-/* used by unittests only */
-static SCCudaHlCudaProfile *backup_cuda_profiles = NULL;
-
-/**
- * \brief Needed by unittests.  Backup the existing cuda profile in handlers.
- */
-void SCCudaHlBackupRegisteredProfiles(void)
-{
-    backup_cuda_profiles = cuda_profiles;
-    cuda_profiles = NULL;
-
-    return;
-}
-
-/**
- * \brief Needed by unittests.  Restore the previous backup of handlers'
- *        cuda profile.
- */
-void SCCudaHlRestoreBackupRegisteredProfiles(void)
-{
-    cuda_profiles = backup_cuda_profiles;
-
-    return;
-}
-
-/**
- * \brief Parse the "cuda" subsection config from our conf file.
- */
-void SCCudaHlGetYamlConf(void)
-{
-    SCCudaHlCudaProfile *profile = NULL;
-
-    /* "mpm" profile, found under "cuda.mpm" in the conf file */
-    profile = SCMalloc(sizeof(SCCudaHlCudaProfile));
-    if (unlikely(profile == NULL)) {
-        SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
-        exit(EXIT_FAILURE);
-    }
-    memset(profile, 0, sizeof(SCCudaHlCudaProfile));
-    profile->name = "mpm";
-    profile->data = MpmCudaConfParse();
-    if (cuda_profiles == NULL) {
-        cuda_profiles = profile;
-    } else {
-        profile->next = cuda_profiles;
-        cuda_profiles = profile;
-    }
-
-    return;
-}
-
-/**
- * \brief Get a particular cuda profile specified as arg.
- *
- * \param profile_name Name of the the profile to retrieve.
- *
- * \retval Data associated with the profile.
- */
-void *SCCudaHlGetProfile(char *profile_name)
-{
-    SCCudaHlCudaProfile *profile = cuda_profiles;
-
-    if (cuda_profiles == NULL ) {
-        SCLogInfo("No cuda profile registered");
-        return NULL;
-    }
-
-    if (profile_name == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENTS, "argument profile NULL");
-        return NULL;
-    }
-
-    while (profile != NULL && strcasecmp(profile->name, profile_name) != 0) {
-        profile = profile->next;
-    }
-
-    if (profile != NULL)
-        return profile->data;
-    else
-        return NULL;
-}
-
-/**
- * \brief Clean the cuda profiles, held in cuda_profiles.
- */
-void SCCudaHlCleanProfiles(void)
-{
-    SCCudaHlCudaProfile *profile = cuda_profiles;
-    SCCudaHlCudaProfile *profile_next = NULL;
-
-    while (profile != NULL) {
-        profile_next = profile->next;
-        if (profile->data != NULL) {
-            if (strcasecmp(profile->name, "mpm") == 0) {
-                MpmCudaConfCleanup(profile->data);
-            }
-        }
-        SCFree(profile);
-        profile = profile_next;
-    }
-    cuda_profiles = NULL;
-
-    return;
-}
-
-/**
- * \internal
- * \brief Get a unique handle for a new module registration.  This new handle
- *        returned uniquely represents a module.  All future calls to functions
- *        requires suppling this handle.
- *
- * \param module_handle A unique module handle that needs to used to refer
- *                      to data(like cuda_contexts, cuda_modules, device pointers).
- */
-static int SCCudaHlGetUniqueHandle(void)
-{
-    return module_handle++;
-}
-
-/**
- * \internal
- * \brief Returns a SCCudaHlModuleData instance from the global data store
- *        that matches the handle sent as arg.
- *
- * \param handle The handle for the SCCudaHlModuleData that has to be returned.
- *
- * \retval data The SCCudaHlModuleData instance that matches the handle.
- */
-SCCudaHlModuleData *SCCudaHlGetModuleData(uint8_t handle)
-{
-    SCCudaHlModuleData *data = module_data;
-
-    if (data == NULL)
-        return NULL;
-
-    while (data != NULL && data->handle != handle) {
-        data = data->next;
-    }
-
-    return data;
-}
-
-/**
- * \internal
- * \brief Returns a SCCudaHlModuleCUmodule instance that matches the cumodule_handle
- *        from a SCCudaHlModuleData.
- *
- * \param data             The module data this CUmodule belongs to, obtained by a call to
- *                         SCCudaHlGetModuleData()
- * \param cumodule_handle  The handle for the SCCudaHlModuleCUmodule that has to be returned.
- *
- * \retval The SCCudaHlModuleCUmodule instance that matches the handle.
- */
-static SCCudaHlModuleCUmodule *SCCudaHlGetModuleCUmodule(SCCudaHlModuleData *data, uint8_t cumodule_handle)
-{
-    SCCudaHlModuleCUmodule *cumodule = NULL;
-
-    if (data == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENT, "Argument data cannot be NULL");
-        return NULL;
-    }
-
-    cumodule = data->cuda_modules;
-    if (cumodule == NULL) {
-        SCLogError(SC_ERR_CUDA_HANDLER_ERROR,
-                   "No cumodule registered by the cumodule_handle %"PRIu8, cumodule_handle);
-        return NULL;
-    }
-
-    while (cumodule != NULL && cumodule->cuda_module_handle != cumodule_handle) {
-        cumodule = cumodule->next;
-    }
-
-    return cumodule;
-}
-
-/**
- * \brief Returns a cuda_module against the handle in the argument.
- *
- *        If a cuda_module is not present for a handle, it is created
- *        and associated with this handle and the cuda_module is returned
- *        in the argument.
- *
- * \param p_module  Pointer to a cuda module instance that should be updated
- *                  with a cuda module.
- * \param handle    A unique handle which identifies a module.  Obtained from
- *                  a call to SCCudaHlGetUniqueHandle().
- *
- * \retval  A unique handle within the module that is associated with the
- *          loaded CUmodule. Needed for future API calls.
- * \retval  -1 on failure.
- */
-int SCCudaHlGetCudaModuleFromFile(CUmodule *p_module, const char *filename, int handle)
-{
-    SCCudaHlModuleData *data = NULL;
-    SCCudaHlModuleCUmodule *new_module_cumodule = NULL;
-    SCCudaHlModuleCUmodule *module_cumodules = NULL;
-
-    if (p_module == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENTS, "Error invalid arguments"
-                   "p_module NULL");
-        return -1;
-    }
-
-    /* check if the particular module that wants a CUDA module is already
-     * registered or not.  If it is registered, check if a context has
-     * been associated with the module.  If yes, then we can go ahead and
-     * create a cuda module and associate it with the module referenced by
-     * the handle in the functions arguments. If no, log warning and get
-     * out of here */
-    if ( ((data = SCCudaHlGetModuleData(handle)) == NULL) ||
-         (data->cuda_context == 0)) {
-        SCLogDebug("Module not registered or no cuda context associated with "
-                   "this module.  You can't create a CUDA module without"
-                   "associating a context with a module first. To use this "
-                   "registration facility, first register a module using "
-                   "context using SCCudaHlRegisterModule(), and then register "
-                   "a cuda context with that module using "
-                   "SCCudaHlGetCudaContext(), after which you can call this "
-                   "function ");
-        return -1;
-    }
-
-    /* Register new CUmodule in the module */
-    new_module_cumodule = SCMalloc(sizeof(SCCudaHlModuleCUmodule));
-    if (unlikely(new_module_cumodule == NULL)) {
-        exit(EXIT_FAILURE);
-    }
-    memset(new_module_cumodule, 0, sizeof(SCCudaHlModuleCUmodule));
-
-    /* Create a cuda module, update the module with this cuda module reference
-     * and then return the module reference back to the calling function using
-     * the argument */
-    if (SCCudaModuleLoad(p_module, filename) == -1)
-        goto error;
-
-    new_module_cumodule->cuda_module = p_module[0];
-    new_module_cumodule->cuda_module_handle = SCCudaHlGetUniqueHandle();
-
-    /* insert it into the cuda_modules list for the module instance */
-    if (data->cuda_modules == NULL) {
-        data->cuda_modules = new_module_cumodule;
-        return new_module_cumodule->cuda_module_handle;
-    }
-
-    module_cumodules = data->cuda_modules;
-    while (module_cumodules->next != NULL)
-        module_cumodules = module_cumodules->next;
-    module_cumodules->next = new_module_cumodule;
-
-    return new_module_cumodule->cuda_module_handle;
-
- error:
-    return -1;
-}
-
-/**
- * \brief Returns a cuda context against the handle in the argument.
- *
- *        If a cuda_context is not present for a handle, it is created
- *        and associated with this handle and the context is returned
- *        in the argument.  If a cuda_context is already present for
- *        a handle, it is returned.
- *
- * \param p_context    Pointer to a cuda context instance that should be updated
- *                     with a cuda context.
- * \param cuda_profile The cuda profile, supplied as a string.
- * \param handle       A unique handle which identifies a module.  Obtained from
- *                     a call to SCCudaHlGetUniqueHandle().
- *
- * \retval  0 On success.
- * \retval -1 On failure.
- */
-int SCCudaHlGetCudaContext(CUcontext *p_context, char *cuda_profile, int handle)
-{
-    SCCudaHlModuleData *data = NULL;
-    SCCudaDevices *devices = NULL;
-
-    if (p_context == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENTS, "Error invalid arguments.  "
-                   "p_context NULL");
-        return -1;
-    }
-
-    /* check if the particular module that wants a CUDA context
-     * is already registered or not.  If it is not registered
-     * log a warning and get out of here */
-    if ( (data = SCCudaHlGetModuleData(handle)) == NULL) {
-        SCLogDebug("Module not registered.  You can't create a CUDA context "
-                   "without registering a module first.  To use this "
-                   "registration facility, first register a module using "
-                   "SCCudaHlRegisterModule(), and then register "
-                   "a cuda context with that module hanle using "
-                   "SCCudaHlGetCudaContext(), after which you can call this "
-                   "function ");
-        return -1;
-    }
-
-    if (data->cuda_context != 0) {
-        p_context[0] = data->cuda_context;
-        return 0;
-    }
-
-    int device_id = SC_CUDA_DEFAULT_DEVICE;
-    if (cuda_profile != NULL) {
-        /* Get default log level and format. */
-        MpmCudaConf *profile = SCCudaHlGetProfile(cuda_profile);
-        if (profile != NULL) {
-            if (SCCudaIsCudaDeviceIdValid(profile->device_id)) {
-                device_id = profile->device_id;
-            } else {
-                SCLogError(SC_ERR_CUDA_ERROR, "Invalid device id \"%d\" supplied.  "
-                           "Using the first device.", profile->device_id);
-            }
-        }
-    }
-
-    /* Get the device list for this CUDA platform and create a new cuda context */
-    devices = SCCudaGetDeviceList();
-    if (SCCudaCtxCreate(p_context, 0, devices->devices[device_id]->device) == -1)
-        goto error;
-    data->cuda_context = p_context[0];
-
-    return 0;
-
- error:
-    return -1;
-}
-
-/**
- * \brief Returns a cuda_module against the handle in the argument.
- *
- *        If a cuda_module is not present for a handle, it is created
- *        and associated with this handle and the cuda_module is returned
- *        in the argument.
- *
- * \param p_module The loaded CUmodule that is returned.
- * \param ptx_image Name of the module source file, w/o the .cu extension
- * \param handle    A unique handle which identifies a module.  Obtained from
- *                  a call to SCCudaHlGetUniqueHandle().
- *
- * \retval  A unique handle within the module that is associated with the
- *          loaded CUmodule. Needed for future API calls.
- * \retval  -1 on failure.
- */
-int SCCudaHlGetCudaModule(CUmodule *p_module, const char *ptx_image, int handle)
-{
-    SCCudaHlModuleData *data = NULL;
-    SCCudaHlModuleCUmodule *new_module_cumodule = NULL;
-    SCCudaHlModuleCUmodule *module_cumodules = NULL;
-
-    if (p_module == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENTS, "Error invalid arguments"
-                   "p_module NULL");
-        return -1;
-    }
-
-    /* check if the particular module that wants a CUDA module is already
-     * registered or not.  If it is registered, check if a context has
-     * been associated with the module.  If yes, then we can go ahead and
-     * create a cuda module and associate it with the module referenced by
-     * the handle in the functions arguments. If no, log warning and get
-     * out of here */
-    if ( ((data = SCCudaHlGetModuleData(handle)) == NULL) ||
-         (data->cuda_context == 0)) {
-        SCLogDebug("Module not registered or no cuda context associated with "
-                   "this module.  You can't create a CUDA module without"
-                   "associating a context with a module first. To use this "
-                   "registration facility, first register a module using "
-                   "context using SCCudaHlRegisterModule(), and then register "
-                   "a cuda context with that module using "
-                   "SCCudaHlGetCudaContext(), after which you can call this "
-                   "function ");
-        return -1;
-    }
-
-    /* Register new CUmodule in the module */
-    new_module_cumodule = SCMalloc(sizeof(SCCudaHlModuleCUmodule));
-    if (unlikely(new_module_cumodule == NULL)) {
-        exit(EXIT_FAILURE);
-    }
-    memset(new_module_cumodule, 0, sizeof(SCCudaHlModuleCUmodule));
-
-    /* select the ptx image based on the compute capability supported by all
-     * devices (i.e. the lowest) */
-    char* image = SCMalloc(strlen(ptx_image)+15);
-    if (unlikely(image == NULL)) {
-        exit(EXIT_FAILURE);
-    }
-    memset(image, 0x0, strlen(ptx_image)+15);
-
-    int major = INT_MAX;
-    int minor = INT_MAX;
-    SCCudaDevices *devices = SCCudaGetDeviceList();
-    int i=0;
-    for (; i<devices->count; i++){
-        if (devices->devices[i]->major_rev < major){
-            major = devices->devices[i]->major_rev;
-            minor = devices->devices[i]->minor_rev;
-        }
-        if (devices->devices[i]->major_rev == major &&
-            devices->devices[i]->minor_rev < minor){
-            minor = devices->devices[i]->minor_rev;
-        }
-    }
-    snprintf(image, strlen(ptx_image) + 15, "%s_sm_%u%u",
-             ptx_image, major, minor);
-
-    /* we don't have a cuda module associated with this module.  Create a
-     * cuda module, update the module with this cuda module reference and
-     * then return the module refernce back to the calling function using
-     * the argument */
-    SCLogDebug("Loading kernel module: %s\n",image);
-    if (SCCudaModuleLoadData(p_module, (void *)SCCudaPtxDumpGetModule(image)) == -1)
-        goto error;
-    SCFree(image);
-
-    new_module_cumodule->cuda_module = p_module[0];
-    new_module_cumodule->cuda_module_handle = SCCudaHlGetUniqueHandle();
-
-    /* insert it into the cuda_modules list for the module instance */
-    if (data->cuda_modules == NULL) {
-        data->cuda_modules = new_module_cumodule;
-        return new_module_cumodule->cuda_module_handle;
-    }
-
-    module_cumodules = data->cuda_modules;
-    while (module_cumodules->next != NULL)
-        module_cumodules = module_cumodules->next;
-    module_cumodules->next = new_module_cumodule;
-
-    return new_module_cumodule->cuda_module_handle;
-
- error:
-    SCFree(image);
-    return -1;
-}
-
-/**
- * \brief Verify if a device pointer by a particular name is registered under
- *        a module.  If it is registered, return this device pointer instance
- *        back; else return NULL.
- *
- * \param data Pointer to the module SCCudaHlModuleData instance which has to
- *             checked for the registration of the device pointer.
- * \param name Name of the device pointer to search in the module.
- *
- * \retval module_device_ptr Pointer to the device pointer instance on finding
- *                           it; NULL otherwise.
- */
-SCCudaHlModuleDevicePointer *SCCudaHlCudaDevicePtrAvailable(SCCudaHlModuleCUmodule *cumodule,
-                                                            const char *name)
-{
-    SCCudaHlModuleDevicePointer *module_device_ptr = cumodule->device_ptrs;
-
-    while (module_device_ptr != NULL &&
-           strcmp(module_device_ptr->name, name) != 0) {
-        module_device_ptr = module_device_ptr->next;
-    }
-
-    return module_device_ptr;
-}
-
-/**
- * \brief Returns a cuda_device_pointer against the handle in the argument.
- *
- *        If a device pointer by the name \"name\"  is not registered for the
- *        handle, it is created and associated with this handle and cuda mem is
- *        alloted and the cuda_device_pointer is returned in the argument.
- *        If a device pointer by the name \"name\" is already registered with
- *        the handle, the cuda_device_pointer is returned in the argument.
- *
- * \param device_ptr Pointer to the device pointer instance which should be
- *                   with the cuda_device_pointer that has to be returned back.
- * \param name       Name of the device pointer by which we have to search
- *                   module for its existance.
- * \param size       Size of the cuda device memory to be alloted.
- * \param host_ptr   If any host memory has to be transferred to the cuda device
- *                   memory, it can sent using this argument.  host_ptr should
- *                   hold atleast size bytes in memory.
- * \param handle     A unique handle which identifies a module.  Obtained from
- *                   a call to SCCudaHlGetUniqueHandle().
- * \param cumodule_handle   A handle that identifies the CUmodule within the above module.
- *                   Obtained from a call to SCCudaHlGetCudaModule() or
- *                   SCCudaHlGetCudaModuleFromFile().
- *
- * \retval  0 On success.
- * \retval -1 On failure.
- */
-int SCCudaHlGetCudaDevicePtr(CUdeviceptr *device_ptr, const char *name,
-                             size_t size, void *host_ptr, int handle,
-                             int cumodule_handle)
-{
-    SCCudaHlModuleData *data = NULL;
-    SCCudaHlModuleCUmodule *cumodule = NULL;
-    SCCudaHlModuleDevicePointer *new_module_device_ptr = NULL;
-    SCCudaHlModuleDevicePointer *module_device_ptr = NULL;
-
-    if (device_ptr == NULL || name == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENTS, "Error invalid arguments"
-                   "device_ptr is NULL or name is NULL");
-        goto error;
-    }
-
-    /* check if the particular module that wants to allocate device memory is
-     * already registered or not.  If it is registered, check if a context has
-     * been associated with the module.  If yes, then we can go ahead and
-     * create the device memory or return the reference to the device memory if
-     * we already have the device memory associated with the module.  If no, "
-     * log warning and get out of here */
-    if ( ((data = SCCudaHlGetModuleData(handle)) == NULL) ||
-         (data->cuda_context == 0)) {
-        SCLogDebug("Module not registered or no cuda context associated with "
-                   "this module.  You can't create a CUDA module without"
-                   "associating a context with a module first. To use this "
-                   "registration facility, first register a module using "
-                   "context using SCCudaHlRegisterModule(), and then register "
-                   "a cuda context with that module using "
-                   "SCCudaHlGetCudaContext(), after which you can call this "
-                   "function ");
-        goto error;
-    }
-
-    if ( (cumodule = SCCudaHlGetModuleCUmodule(data, cumodule_handle)) == NULL ) {
-        SCLogDebug("CUmodule not registered with the module. Before you can request"
-                   "a device pointer for a module you need to load the CUmodule into"
-                   "the engine module using SCCudaHlGetCudaModule() or"
-                   "SCCudaHlGetCudaModuleFromFile().");
-        goto error;
-    }
-
-    /* if we already have a device pointer registered by this name return the
-     * cuda device pointer instance */
-    if ( (module_device_ptr = SCCudaHlCudaDevicePtrAvailable(cumodule, name)) != NULL) {
-        device_ptr[0] = module_device_ptr->d_ptr;
-        return 0;
-    }
-
-    new_module_device_ptr = SCMalloc(sizeof(SCCudaHlModuleDevicePointer));
-    if (unlikely(new_module_device_ptr == NULL))
-        goto error;
-    memset(new_module_device_ptr, 0, sizeof(SCCudaHlModuleDevicePointer));
-
-    if ( (new_module_device_ptr->name = SCStrdup(name)) == NULL) {
-        SCLogError(SC_ERR_FATAL, "Fatal error encountered in SCCudaHlGetCudaDevicePtr. Exiting...");
-        exit(EXIT_FAILURE);
-    }
-
-    /* allocate the cuda memory */
-    if (SCCudaMemAlloc(&new_module_device_ptr->d_ptr, size) == -1)
-        goto error;
-
-    /* if the user has supplied a host buffer, copy contents to the device mem */
-    if (host_ptr != NULL) {
-        if (SCCudaMemcpyHtoD(new_module_device_ptr->d_ptr, host_ptr,
-                             size) == -1) {
-            goto error;
-        }
-    }
-
-    /* send the newly assigned device pointer back to the caller */
-    device_ptr[0] = new_module_device_ptr->d_ptr;
-
-    /* insert it into the device_ptr list for the module instance */
-    if (cumodule->device_ptrs == NULL) {
-        cumodule->device_ptrs = new_module_device_ptr;
-        return 0;
-    }
-
-    module_device_ptr = cumodule->device_ptrs;
-    while (module_device_ptr->next != NULL)
-        module_device_ptr = module_device_ptr->next;
-    module_device_ptr->next = new_module_device_ptr;
-
-    return 0;
-
- error:
-    if (new_module_device_ptr != NULL)
-        SCFree(new_module_device_ptr);
-    return -1;
-}
-
-/**
- * \brief Frees a Cuda Device Pointer.
- *
- *        If a device pointer by the name \"name\"  is registered for this
- *        handle, it is freed.
- *
- * \param name       Name of the device pointer by which we have to search
- *                   module for its existance.
- * \param handle     A unique handle which identifies a module.  Obtained from
- *                   a call to SCCudaHlGetUniqueHandle().
- * \param cumodule   A handle that identifies the CUmodule within the above module.
- *                   Obtained from a call to SCCudaHlGetCudaModule() or
- *                   SCCudaHlGetCudaModuleFromFile().
- * \retval  0 On success.
- * \retval -1 On failure.
- */
-int SCCudaHlFreeCudaDevicePtr(const char *name, int handle, int cumodule_handle)
-{
-    SCCudaHlModuleData *data = NULL;
-    SCCudaHlModuleCUmodule *cumodule = NULL;
-    SCCudaHlModuleDevicePointer *module_device_ptr = NULL;
-    SCCudaHlModuleDevicePointer *temp_module_device_ptr = NULL;
-
-    if (name == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENTS, "Error invalid arguments"
-                   "device_ptr is NULL or name is NULL");
-        goto error;
-    }
-
-    /* check if the particular module that wants to free device memory is
-     * already registered or not.  If it is registered, check if a context has
-     * been associated with the module.  If yes, then we can go ahead and
-     * free the device memory.
-     */
-    if ( ((data = SCCudaHlGetModuleData(handle)) == NULL) ||
-         (data->cuda_context == 0)) {
-        SCLogDebug("Module not registered or no cuda context associated with "
-                   "this module.  You can't create a CUDA module without"
-                   "associating a context with a module first. To use this "
-                   "registration facility, first register a module using "
-                   "context using SCCudaHlRegisterModule(), and then register "
-                   "a cuda context with that module using "
-                   "SCCudaHlGetCudaContext(), after which you can call this "
-                   "function ");
-        goto error;
-    }
-
-    if ( (cumodule = SCCudaHlGetModuleCUmodule(data, cumodule_handle)) == NULL ) {
-        SCLogDebug("CUmodule not registered with the module. Before you can request"
-                   "a device pointer for a module you need to load the CUmodule into"
-                   "the engine module using SCCudaHlGetCudaModule() or"
-                   "SCCudaHlGetCudaModuleFromFile().");
-        goto error;
-    }
-
-    /* if we do not have a device pointer registered by this name get out */
-    if ( (module_device_ptr = SCCudaHlCudaDevicePtrAvailable(cumodule, name)) == NULL) {
-        goto error;
-    }
-
-    SCCudaMemFree(module_device_ptr->d_ptr);
-    module_device_ptr->d_ptr = 0;
-    if (module_device_ptr == cumodule->device_ptrs) {
-        cumodule->device_ptrs = cumodule->device_ptrs->next;
-    } else {
-        temp_module_device_ptr = cumodule->device_ptrs;
-        while (strcmp(temp_module_device_ptr->next->name, name) != 0) {
-            temp_module_device_ptr = temp_module_device_ptr->next;
-        }
-        temp_module_device_ptr->next = temp_module_device_ptr->next->next;
-    }
-    SCFree(module_device_ptr->name);
-    SCFree(module_device_ptr);
-
-    return 0;
-
- error:
-    return -1;
-}
-
-/**
- * \brief Registers a Dispatcher function against this handle.
- *
- * \param SCCudaHlDispFunc Pointer to a dispatcher function to be registered
- *                         for this handle.
- * \param handle           A unique handle which identifies a module.  Obtained
- *                         from a call to SCCudaHlGetUniqueHandle().
- *
- * \retval  0 On success.
- * \retval -1 On failure.
- */
-int SCCudaHlRegisterDispatcherFunc(void *(*SCCudaHlDispFunc)(void *), int handle)
-{
-    SCCudaHlModuleData *data = NULL;
-
-    if (SCCudaHlDispFunc == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENTS, "Error invalid arguments"
-                   "SCCudaHlDispFunc NULL");
-        return -1;
-    }
-
-    if ( (data = SCCudaHlGetModuleData(handle)) == NULL) {
-        SCLogDebug("Module not registered.  To avail the benefits of this "
-                   "registration facility, first register a module using "
-                   "context using SCCudaHlRegisterModule(), after which you "
-                   "can call this function");
-        return -1;
-    }
-
-    data->SCCudaHlDispFunc = SCCudaHlDispFunc;
-
-    return 0;
-}
-
-/**
- * \brief Get the name of the module associated with the module whose handle is
- *        sent as the arg.
- *
- * \param handle The handle of the module which has to be searched.
- *
- * \retval data->name The name of the module on finding a module that matches
- *                    the handle sent as argument; NULL on failure.
- */
-const char *SCCudaHlGetModuleName(int handle)
-{
-    SCCudaHlModuleData *data = module_data;
-
-    while (data != NULL && data->handle != handle) {
-        data = data->next;
-    }
-
-    if (data == NULL)
-        return NULL;
-
-    return data->name;
-}
-
-/**
- * \brief Get the handle associated with this module who name is sent as the arg.
- *
- * \param name The name of the module which has to be searched.
- *
- * \retval data->handle The handle to the module on finding a module that
- *                      matches the name sent as argument; -1 on failure.
- */
-int SCCudaHlGetModuleHandle(const char *name)
-{
-    SCCudaHlModuleData *data = module_data;
-
-    while (data != NULL &&
-           strcmp(data->name, name) != 0) {
-        data = data->next;
-    }
-
-    if (data == NULL) {
-        SCLogError(SC_ERR_CUDA_HANDLER_ERROR, "A cuda module by the name \"%s\" "
-                   "hasn't been registered", name);
-        return -1;
-    }
-
-    return data->handle;
-}
-
-/**
- * \brief Register a new module.  To understand what exactly these utilities are
- *        needed for please look at the file comments.
- *
- * \param name A unique name to register the module with.  No module should have
- *             registered itself previously with this name.
- *
- * \retval handle A unique handle that is associated with this module and all
- *                future use of API would require supplying this handle.
- */
-int SCCudaHlRegisterModule(const char *name)
-{
-    SCCudaHlModuleData *data = module_data;
-    SCCudaHlModuleData *new_data = NULL;
-
-    while (data != NULL &&
-           strcmp(data->name, name) != 0) {
-        data = data->next;
-    }
-
-    if (data != NULL) {
-        SCLogInfo("Module \"%s\" already registered.  Returning the handle "
-                  "for the already registered module", name);
-        return data->handle;
-    }
-
-    /* the module is not already registered.  Register the module */
-    new_data = SCMalloc(sizeof(SCCudaHlModuleData));
-    if (unlikely(new_data == NULL)) {
-        exit(EXIT_FAILURE);
-    }
-    memset(new_data, 0, sizeof(SCCudaHlModuleData));
-
-    if ( (new_data->name = SCStrdup(name)) == NULL) {
-        SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
-        exit(EXIT_FAILURE);
-    }
-
-    new_data->handle = SCCudaHlGetUniqueHandle();
-
-    /* first module to be registered */
-    if (module_data == NULL) {
-        module_data = new_data;
-        return new_data->handle;
-    }
-
-    /* add this new module_data instance to the global module_data list */
-    data = module_data;
-    while (data->next != NULL)
-        data = data->next;
-    data->next = new_data;
-
-    return new_data->handle;
-}
-
-/**
- * \brief DeRegister a registered module.
- *
- * \param name Name of the module to deregister.
- *
- * \retval  0 On success.
- * \retval -1 On failure.
- */
-int SCCudaHlDeRegisterModule(const char *name)
-{
-    SCCudaHlModuleData *data = NULL;
-    SCCudaHlModuleData *prev_data = NULL;
-    SCCudaHlModuleCUmodule *cumodule = NULL;
-    SCCudaHlModuleCUmodule *temp_cumodule = NULL;
-    SCCudaHlModuleDevicePointer *device_ptr = NULL;
-    SCCudaHlModuleDevicePointer *temp_device_ptr = NULL;
-    int module_handle = SCCudaHlGetModuleHandle(name);
-
-    /* get the module */
-    data = (module_handle == -1) ? NULL : SCCudaHlGetModuleData(module_handle);
-
-    /* a module by this name doesn't exist.  Log Error and return */
-    if (data == NULL) {
-        SCLogError(SC_ERR_CUDA_HANDLER_ERROR, "Module \"%s\" not "
-                   "registered", name);
-        return -1;
-    }
-
-    /* the application must take care to check that the following cuda context
-     * which is being freed is floating(not attached to any host thread) */
-    if (data->cuda_context != 0)
-        SCCudaCtxPushCurrent(data->cuda_context);
-
-    /* looks like we do have a module registered by this name.
-     * Go through all CUmodules registered in this module and
-     * free cuda device pointers and unload the module.
-     */
-    cumodule = data->cuda_modules;
-    while (cumodule != NULL) {
-        /* free all device pointers */
-        device_ptr = cumodule->device_ptrs;
-        while (device_ptr != NULL) {
-            temp_device_ptr = device_ptr;
-            device_ptr = device_ptr->next;
-            if (SCCudaMemFree(temp_device_ptr->d_ptr) == -1)
-                goto error;
-            SCFree(temp_device_ptr->name);
-            SCFree(temp_device_ptr);
-        }
-        cumodule->device_ptrs = NULL;
-
-        /* unload the cuda module */
-        temp_cumodule = cumodule;
-        cumodule = cumodule->next;
-        if (SCCudaModuleUnload(temp_cumodule->cuda_module) == -1)
-            goto error;
-        SCFree(temp_cumodule);
-    }
-    data->cuda_modules = NULL;
-
-    if (data->name != NULL)
-        SCFree((void *)data->name);
-
-    /* clean the dispatcher function registered */
-    data->SCCudaHlDispFunc = NULL;
-
-    /* destroy the cuda context */
-    if (data->cuda_context != 0) {
-        if (SCCudaCtxDestroy(data->cuda_context) == -1)
-            goto error;
-    }
-
-    /* find the previous module data instance */
-    if (module_data == data) {
-        module_data = module_data->next;
-    } else {
-        prev_data = module_data;
-        while (prev_data->next != data)
-            prev_data = prev_data->next;
-        prev_data->next = data->next;
-    }
-
-    /* delete the module data instance */
-    SCFree(data);
-
-    /* mission accomplished.  let's go */
-    return 0;
- error:
-    return -1;
-}
-
-/**
- * \brief DeRegister all the modules registered under cuda handlers.
- */
-void SCCudaHlDeRegisterAllRegisteredModules(void)
-{
-    SCCudaHlModuleData *data = module_data;
-    SCCudaHlModuleData *next_data = NULL;
-
-    next_data = data;
-    while (data != NULL) {
-        next_data = data->next;
-        if (SCCudaHlDeRegisterModule(data->name) == -1) {
-            SCLogError(SC_ERR_CUDA_HANDLER_ERROR, "Error de-registering module "
-                       "\"%s\"", data->name);
-        }
-        data = next_data;
-    }
-
-    module_data = NULL;
-
-    return;
-}
-
-/**
- * \brief Pushes a cuda context for the calling thread.
- *
- *        Before calling this function make sure that the cuda context belonging
- *        to the registered module, is floating(not attached to any host thread).
- *
- * \param name Name of the registered module whose cuda context has to be
- *             pushed for the calling thread.
- *
- * \retval  0 On success.
- * \retval -1 On failure.
- */
-int SCCudaHlPushCudaContextFromModule(const char *name)
-{
-    SCCudaHlModuleData *data = SCCudaHlGetModuleData(SCCudaHlGetModuleHandle(name));
-
-    if (data == NULL) {
-        SCLogError(SC_ERR_CUDA_HANDLER_ERROR, "No module registered by the "
-                   "name \"%s\"", name);
-        return -1;
-    }
-
-    if (SCCudaCtxPushCurrent(data->cuda_context) == -1) {
-        SCLogError(SC_ERR_CUDA_HANDLER_ERROR, "Error pushing cuda context from "
-                   "module \"%s\" for this calling thread\n", name);
-        return -1;
-    }
-
-    return 0;
-}
-
-/**
- * \brief Used for testing purposes.  Running tests with cuda enabled
- *        requires some hacks, which is what this function does.
- *
- * \retval 1 Always.
- */
-int SCCudaHlTestEnvCudaContextInit(void)
-{
-    CUcontext context;
-    int module_handle = SCCudaHlRegisterModule("SC_RULES_CONTENT_B2G_CUDA");
-    if (SCCudaHlGetCudaContext(&context, NULL, module_handle) == -1) {
-        printf("Error getting a cuda context");
-    }
-    if (SCCudaHlPushCudaContextFromModule("SC_RULES_CONTENT_B2G_CUDA") == -1) {
-        printf("Call to SCCudaHlPushCudaContextForModule() failed\n");
-    }
-
-    return 1;
-}
-
-/**
- * \brief Used for testing purposes.  Running tests with cuda enabled
- *        requires some hacks, which is what this function does.
- *
- * \retval 1 Always.
- */
-int SCCudaHlTestEnvCudaContextDeInit(void)
-{
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        printf("Call to SCCudaCtxPopCurrent() failed\n");
-        return 0;
-    }
-
-    return 1;
-}
-
-#endif /* __SC_CUDA_SUPPORT */
diff --git a/src/util-cuda-handlers.h b/src/util-cuda-handlers.h
deleted file mode 100644 (file)
index b014663..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Copyright (C) 2007-2010 Open Information Security Foundation
- *
- * You can copy, redistribute or modify this Program under the terms of
- * the GNU General Public License version 2 as published by the Free
- * Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * version 2 along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-/**
- * \file Provides cuda utility functions.
- *
- * \author Anoop Saldanha <anoopsaldanha@gmail.com>
- */
-
-/* macros decides if cuda is enabled for the platform or not */
-#ifdef __SC_CUDA_SUPPORT__
-
-#include <cuda.h>
-
-#ifndef __UTIL_MPM_CUDA_HANDLERS_H__
-#define __UTIL_MPM_CUDA_HANDLERS_H__
-
-typedef enum {
-    SC_CUDA_HL_MTYPE_RULE_NONE = -1,
-    SC_CUDA_HL_MTYPE_RULE_CONTENTS = 0,
-    SC_CUDA_HL_MTYPE_RULE_URICONTENTS,
-    SC_CUDA_HL_MTYPE_APP_LAYER,
-    SC_CUDA_HL_MTYPE_RULE_CUSTOM,
-    SC_CUDA_HL_MTYPE_MAX,
-} SCCudaHlModuleType;
-
-typedef struct SCCudaHlModuleDevicePointer_ {
-    /* device pointer name.  This is a primary key.  For the same module you
-     * can't register different device pointers */
-    char *name;
-    CUdeviceptr d_ptr;
-
-    struct SCCudaHlModuleDevicePointer_ *next;
-} SCCudaHlModuleDevicePointer;
-
-typedef struct SCCudaHlModuleCUmodule_ {
-    /* Handle for this CUmodule.  This has to be first obtained from the
-     * call to SCCudaHlGetCudaModule() or SCCudaHlGetCudaModuleFromFile() */
-    int cuda_module_handle;
-
-    CUmodule cuda_module;
-    SCCudaHlModuleDevicePointer *device_ptrs;
-
-    struct SCCudaHlModuleCUmodule_ *next;
-} SCCudaHlModuleCUmodule;
-
-typedef struct SCCudaHlModuleData_ {
-    /* The unique module handle.  This has to be first obtained from the
-     * call to SCCudaHlGetUniqueHandle() */
-    const char *name;
-    int handle;
-
-    CUcontext cuda_context;
-    SCCudaHlModuleCUmodule *cuda_modules;
-    void *(*SCCudaHlDispFunc)(void *);
-
-    struct SCCudaHlModuleData_ *next;
-} SCCudaHlModuleData;
-
-/**
- * \brief Used to hold the cuda configuration from our conf yaml file
- */
-typedef struct SCCudaHlCudaProfile_ {
-    /* profile name.  Should be unique */
-    char *name;
-    /* the data associated with this profile */
-    void *data;
-
-    struct SCCudaHlCudaProfile_ *next;
-} SCCudaHlCudaProfile;
-
-void SCCudaHlGetYamlConf(void);
-void *SCCudaHlGetProfile(char *);
-void SCCudaHlCleanProfiles(void);
-void SCCudaHlBackupRegisteredProfiles(void);
-void SCCudaHlRestoreBackupRegisteredProfiles(void);
-
-int SCCudaHlGetCudaContext(CUcontext *, char *, int);
-int SCCudaHlGetCudaModule(CUmodule *, const char *, int);
-int SCCudaHlGetCudaModuleFromFile(CUmodule *, const char *, int);
-int SCCudaHlGetCudaDevicePtr(CUdeviceptr *, const char *, size_t, void *, int, int);
-int SCCudaHlFreeCudaDevicePtr(const char *, int, int);
-int SCCudaHlRegisterDispatcherFunc(void *(*SCCudaHlDispFunc)(void *), int);
-
-SCCudaHlModuleData *SCCudaHlGetModuleData(uint8_t);
-const char *SCCudaHlGetModuleName(int);
-int SCCudaHlGetModuleHandle(const char *);
-
-int SCCudaHlRegisterModule(const char *);
-int SCCudaHlDeRegisterModule(const char *);
-void SCCudaHlDeRegisterAllRegisteredModules(void);
-
-int SCCudaHlPushCudaContextFromModule(const char *);
-
-int SCCudaHlTestEnvCudaContextInit(void);
-int SCCudaHlTestEnvCudaContextDeInit(void);
-
-void SCCudaHlProcessPacketWithDispatcher(Packet *, DetectEngineThreadCtx *,
-                                         void *);
-void SCCudaHlProcessUriWithDispatcher(uint8_t *, uint16_t, DetectEngineThreadCtx *,
-                                      void *);
-
-#endif /* __UTIL_CUDA_HANDLERS__ */
-
-#endif /* __SC_CUDA_SUPPORT__ */
diff --git a/src/util-mpm-b2g-cuda.c b/src/util-mpm-b2g-cuda.c
deleted file mode 100644 (file)
index ed35500..0000000
+++ /dev/null
@@ -1,3752 +0,0 @@
-/* Copyright (C) 2007-2013 Open Information Security Foundation
- *
- * You can copy, redistribute or modify this Program under the terms of
- * the GNU General Public License version 2 as published by the Free
- * Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * version 2 along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-/**
- * \file
- *
- * \author Victor Julien <victor@inliniac.net>
- * \author Anoop Saldanha <anoopsaldanha@gmail.com>
- * \author Martin Beyer <martin.beyer@marasystems.de>
- */
-
-#include "suricata-common.h"
-#include "suricata.h"
-#include "detect.h"
-#include "detect-engine-mpm.h"
-#include "util-bloomfilter.h"
-#include "util-mpm-b2g-cuda.h"
-#include "util-mpm.h"
-#include "util-print.h"
-
-#include "threadvars.h"
-
-#include "util-error.h"
-#include "util-debug.h"
-#include "util-unittest.h"
-#include "conf.h"
-
-#include "util-cuda-handlers.h"
-#include "util-cuda.h"
-#include "util-cpu.h"
-#include "tm-threads.h"
-#include "threads.h"
-#include "tmqh-simple.h"
-
-#include "detect-engine-address.h"
-#include "detect-engine-port.h"
-#include "detect-engine.h"
-#include "detect-parse.h"
-
-#include "cuda-packet-batcher.h"
-
-/* macros decides if cuda is enabled for the platform or not */
-#ifdef __SC_CUDA_SUPPORT__
-
-#define INIT_HASH_SIZE 65536
-
-#ifdef B2G_CUDA_COUNTERS
-#define COUNT(counter) (counter)
-#else
-#define COUNT(counter)
-#endif /* B2G_CUDA_COUNTERS */
-
-static uint32_t b2g_hash_size = 0;
-static uint32_t b2g_bloom_size = 0;
-static void *b2g_func;
-
-/* threadvars Cuda(C) Mpm(M) B2G(B) Rules(R) Content(C) */
-ThreadVars *tv_CMB2_RC = NULL;
-
-void B2gCudaInitCtx(MpmCtx *, int);
-void B2gCudaThreadInitCtx(MpmCtx *, MpmThreadCtx *, uint32_t);
-void B2gCudaDestroyCtx(MpmCtx *);
-void B2gCudaThreadDestroyCtx(MpmCtx *, MpmThreadCtx *);
-int B2gCudaAddPatternCI(MpmCtx *, uint8_t *, uint16_t, uint16_t, uint16_t,
-                        uint32_t, uint32_t, uint8_t);
-int B2gCudaAddPatternCS(MpmCtx *, uint8_t *, uint16_t, uint16_t, uint16_t,
-                        uint32_t, uint32_t, uint8_t);
-int B2gCudaPreparePatterns(MpmCtx *mpm_ctx);
-uint32_t B2gCudaSearchWrap(MpmCtx *, MpmThreadCtx *,
-                                  PatternMatcherQueue *, uint8_t *,
-                                  uint16_t);
-uint32_t B2gCudaSearch1(MpmCtx *, MpmThreadCtx *, PatternMatcherQueue *,
-                        uint8_t *, uint16_t);
-#ifdef B2G_CUDA_SEARCH2
-uint32_t B2gCudaSearch2(MpmCtx *, MpmThreadCtx *, PatternMatcherQueue *,
-                        uint8_t *, uint16_t);
-#endif
-uint32_t B2gCudaSearch(MpmCtx *, MpmThreadCtx *, PatternMatcherQueue *,
-                       uint8_t *, uint16_t);
-uint32_t B2gCudaSearchBNDMq(MpmCtx *, MpmThreadCtx *, PatternMatcherQueue *,
-                            uint8_t *, uint16_t);
-void B2gCudaPrintInfo(MpmCtx *);
-void B2gCudaPrintSearchStats(MpmThreadCtx *);
-void B2gCudaRegisterTests(void);
-
-/**
- * \brief Register the CUDA B2g Mpm.
- */
-void MpmB2gCudaRegister(void)
-{
-    mpm_table[MPM_B2G_CUDA].name = "b2g_cuda";
-    mpm_table[MPM_B2G_CUDA].max_pattern_length = B2G_CUDA_WORD_SIZE;
-    mpm_table[MPM_B2G_CUDA].InitCtx = B2gCudaInitCtx;
-    mpm_table[MPM_B2G_CUDA].InitThreadCtx = B2gCudaThreadInitCtx;
-    mpm_table[MPM_B2G_CUDA].DestroyCtx = B2gCudaDestroyCtx;
-    mpm_table[MPM_B2G_CUDA].DestroyThreadCtx = B2gCudaThreadDestroyCtx;
-    mpm_table[MPM_B2G_CUDA].AddPattern = B2gCudaAddPatternCS;
-    mpm_table[MPM_B2G_CUDA].AddPatternNocase = B2gCudaAddPatternCI;
-    mpm_table[MPM_B2G_CUDA].Prepare = B2gCudaPreparePatterns;
-    mpm_table[MPM_B2G_CUDA].Search = B2gCudaSearchWrap;
-    mpm_table[MPM_B2G_CUDA].Cleanup = NULL;
-    mpm_table[MPM_B2G_CUDA].PrintCtx = B2gCudaPrintInfo;
-    mpm_table[MPM_B2G_CUDA].PrintThreadCtx = B2gCudaPrintSearchStats;
-    mpm_table[MPM_B2G_CUDA].RegisterUnittests = B2gCudaRegisterTests;
-}
-
-void B2gCudaPrintInfo(MpmCtx *mpm_ctx)
-{
-#ifdef DEBUG
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-    SCLogDebug("MPM B2g Cuda Information:");
-    SCLogDebug("Memory allocs:    %" PRIu32, mpm_ctx->memory_cnt);
-    SCLogDebug("Memory alloced:   %" PRIu32, mpm_ctx->memory_size);
-    SCLogDebug(" Sizeofs:");
-    SCLogDebug("  MpmCtx          %" PRIuMAX, (uintmax_t)sizeof(MpmCtx));
-    SCLogDebug("  B2gCudaCtx      %" PRIuMAX, (uintmax_t)sizeof(B2gCudaCtx));
-    SCLogDebug("  B2gCudaPattern  %" PRIuMAX, (uintmax_t)sizeof(B2gCudaPattern));
-    SCLogDebug("  B2gCudaHashItem %" PRIuMAX, (uintmax_t)sizeof(B2gCudaHashItem));
-    SCLogDebug("Unique Patterns:  %" PRIu32, mpm_ctx->pattern_cnt);
-    SCLogDebug("Smallest:         %" PRIu32, mpm_ctx->minlen);
-    SCLogDebug("Largest:          %" PRIu32, mpm_ctx->maxlen);
-    SCLogDebug("Hash size:        %" PRIu32, ctx->hash_size);
-#endif
-
-    return;
-}
-
-static inline B2gCudaPattern *B2gCudaAllocPattern(MpmCtx *mpm_ctx)
-{
-    B2gCudaPattern *p = SCMalloc(sizeof(B2gCudaPattern));
-    if (unlikely(p == NULL))
-        return NULL;
-    memset(p, 0, sizeof(B2gCudaPattern));
-
-    mpm_ctx->memory_cnt++;
-    mpm_ctx->memory_size += sizeof(B2gCudaPattern);
-
-    return p;
-}
-
-static inline B2gCudaHashItem *B2gCudaAllocHashItem(MpmCtx *mpm_ctx)
-{
-    B2gCudaHashItem *hi = SCMalloc(sizeof(B2gCudaHashItem));
-    if (unlikely(hi == NULL))
-        return NULL;
-    memset(hi, 0, sizeof(B2gCudaHashItem));
-
-    mpm_ctx->memory_cnt++;
-    mpm_ctx->memory_size += sizeof(B2gCudaHashItem);
-
-    return hi;
-}
-
-static void B2gCudaHashFree(MpmCtx *mpm_ctx, B2gCudaHashItem *hi)
-{
-    if (hi == NULL)
-        return;
-
-    B2gCudaHashItem *t = hi->nxt;
-    B2gCudaHashFree(mpm_ctx, t);
-
-    mpm_ctx->memory_cnt--;
-    mpm_ctx->memory_size -= sizeof(B2gCudaHashItem);
-    SCFree(hi);
-
-    return;
-}
-
-static inline void memcpy_tolower(uint8_t *d, uint8_t *s, uint16_t len)
-{
-    uint16_t i;
-    for (i = 0; i < len; i++)
-        d[i] = u8_tolower(s[i]);
-
-    return;
-}
-
-static inline uint32_t B2gCudaInitHash(B2gCudaPattern *p)
-{
-    uint32_t hash = p->len * p->original_pat[0];
-    if (p->len > 1)
-        hash += p->original_pat[1];
-
-    return (hash % INIT_HASH_SIZE);
-}
-
-static inline uint32_t B2gCudaInitHashRaw(uint8_t *pat, uint16_t patlen)
-{
-    uint32_t hash = patlen * pat[0];
-    if (patlen > 1)
-        hash += pat[1];
-
-    return (hash % INIT_HASH_SIZE);
-}
-
-static inline int B2gCudaInitHashAdd(B2gCudaCtx *ctx, B2gCudaPattern *p)
-{
-    uint32_t hash = B2gCudaInitHash(p);
-
-    if (ctx->init_hash[hash] == NULL) {
-        ctx->init_hash[hash] = p;
-        return 0;
-    }
-
-    B2gCudaPattern *tt = NULL;
-    B2gCudaPattern *t = ctx->init_hash[hash];
-
-    /* get the list tail */
-    do {
-        tt = t;
-        t = t->next;
-    } while (t != NULL);
-
-    tt->next = p;
-
-    return 0;
-}
-
-static inline int B2gCudaCmpPattern(B2gCudaPattern *p, uint8_t *pat,
-                                    uint16_t patlen, char flags)
-{
-    if (p->len != patlen)
-        return 0;
-
-    if (p->flags != flags)
-        return 0;
-
-    if (memcmp(p->cs, pat, patlen) != 0)
-        return 0;
-
-    return 1;
-}
-
-static inline B2gCudaPattern *B2gCudaInitHashLookup(B2gCudaCtx *ctx, uint8_t *pat,
-                                                    uint16_t patlen, char flags,
-                                                    uint32_t pid)
-{
-    uint32_t hash = B2gCudaInitHashRaw(pat, patlen);
-
-    if (ctx->init_hash[hash] == NULL)
-        return NULL;
-
-    B2gCudaPattern *t = ctx->init_hash[hash];
-    for ( ; t != NULL; t = t->next) {
-        //if (B2gCudaCmpPattern(t, pat, patlen, flags) == 1)
-        if (t->flags == flags && t->id == pid)
-            return t;
-    }
-
-    return NULL;
-}
-
-void B2gCudaFreePattern(MpmCtx *mpm_ctx, B2gCudaPattern *p)
-{
-    if (p != NULL && p->cs != NULL && p->cs != p->ci) {
-        SCFree(p->cs);
-        mpm_ctx->memory_cnt--;
-        mpm_ctx->memory_size -= p->len;
-    }
-
-    if (p != NULL && p->ci != NULL) {
-        SCFree(p->ci);
-        mpm_ctx->memory_cnt--;
-        mpm_ctx->memory_size -= p->len;
-    }
-
-    if (p != NULL) {
-        SCFree(p);
-        mpm_ctx->memory_cnt--;
-        mpm_ctx->memory_size -= sizeof(B2gCudaPattern);
-    }
-
-    return;
-}
-
-static inline int B2gCudaAddPattern(MpmCtx *mpm_ctx, uint8_t *pat,
-                                    uint16_t patlen, uint16_t offset,
-                                    uint16_t depth, uint32_t pid,
-                                    uint32_t sid, uint8_t flags)
-{
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-
-    SCLogDebug("ctx %p len %"PRIu16" pid %" PRIu32, ctx, patlen, pid);
-
-    if (patlen == 0)
-        return 0;
-
-    /* get a memory piece */
-    B2gCudaPattern *p = B2gCudaInitHashLookup(ctx, pat, patlen, flags, pid);
-    if (p == NULL) {
-        SCLogDebug("allocing new pattern");
-
-        p = B2gCudaAllocPattern(mpm_ctx);
-        if (p == NULL)
-            goto error;
-
-        p->len = patlen;
-        p->flags = flags;
-        p->id = pid;
-
-        p->original_pat = SCMalloc(patlen);
-        if (p->original_pat == NULL)
-            goto error;
-        mpm_ctx->memory_cnt++;
-        mpm_ctx->memory_size += patlen;
-        memcpy(p->original_pat, pat, patlen);
-
-        /* setup the case insensitive part of the pattern */
-        p->ci = SCMalloc(patlen);
-        if (p->ci == NULL)
-            goto error;
-
-        mpm_ctx->memory_cnt++;
-        mpm_ctx->memory_size += patlen;
-        memcpy_tolower(p->ci, pat, patlen);
-
-        /* setup the case sensitive part of the pattern */
-        if (p->flags & MPM_PATTERN_FLAG_NOCASE) {
-            /* nocase means no difference between cs and ci */
-            p->cs = p->ci;
-        } else {
-            if (memcmp(p->ci,pat,p->len) == 0) {
-                /* no diff between cs and ci: pat is lowercase */
-                p->cs = p->ci;
-            } else {
-                p->cs = SCMalloc(patlen);
-                if (p->cs == NULL)
-                    goto error;
-
-                mpm_ctx->memory_cnt++;
-                mpm_ctx->memory_size += patlen;
-                memcpy(p->cs, pat, patlen);
-            }
-        }
-
-        //printf("B2gAddPattern: ci \""); prt(p->ci,p->len);
-        //printf("\" cs \""); prt(p->cs,p->len);
-        //printf("\"\n");
-
-        /* put in the pattern hash */
-        B2gCudaInitHashAdd(ctx, p);
-
-        if (mpm_ctx->pattern_cnt == 65535) {
-            printf("Max search words reached\n");
-            exit(1);
-        }
-
-        mpm_ctx->pattern_cnt++;
-
-        if (mpm_ctx->maxlen < patlen) mpm_ctx->maxlen = patlen;
-        if (mpm_ctx->minlen == 0) mpm_ctx->minlen = patlen;
-        else if (mpm_ctx->minlen > patlen) mpm_ctx->minlen = patlen;
-    }
-
-    return 0;
-
-error:
-    B2gCudaFreePattern(mpm_ctx, p);
-    return -1;
-}
-
-int B2gCudaAddPatternCI(MpmCtx *mpm_ctx, uint8_t *pat, uint16_t patlen,
-                        uint16_t offset, uint16_t depth, uint32_t pid,
-                        uint32_t sid, uint8_t flags)
-{
-    flags |= MPM_PATTERN_FLAG_NOCASE;
-    return B2gCudaAddPattern(mpm_ctx, pat, patlen, offset, depth, pid, sid, flags);
-}
-
-int B2gCudaAddPatternCS(MpmCtx *mpm_ctx, uint8_t *pat, uint16_t patlen,
-                        uint16_t offset, uint16_t depth, uint32_t pid,
-                        uint32_t sid, uint8_t flags)
-{
-    return B2gCudaAddPattern(mpm_ctx, pat, patlen, offset, depth, pid, sid, flags);
-}
-
-static inline uint32_t B2gCudaBloomHash(void *data, uint16_t datalen, uint8_t iter,
-                                        uint32_t hash_size)
-{
-     uint8_t *d = (uint8_t *)data;
-     uint16_t i;
-     uint32_t hash = (uint32_t)u8_tolower(*d);
-
-     for (i = 1; i < datalen; i++) {
-         d++;
-         hash += (u8_tolower(*d)) ^ i;
-     }
-     hash <<= (iter+1);
-     hash %= hash_size;
-
-     return hash;
-}
-
-static void B2gCudaPrepareHash(MpmCtx *mpm_ctx)
-{
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-    uint16_t i = 0;
-    uint16_t idx = 0;
-    uint8_t idx8 = 0;
-
-    ctx->hash = (B2gCudaHashItem **)SCMalloc(sizeof(B2gCudaHashItem *) *
-                                             ctx->hash_size);
-    if (ctx->hash == NULL)
-        goto error;
-    memset(ctx->hash, 0, sizeof(B2gCudaHashItem *) * ctx->hash_size);
-
-    mpm_ctx->memory_cnt++;
-    mpm_ctx->memory_size += (sizeof(B2gCudaHashItem *) * ctx->hash_size);
-
-#ifdef B2G_CUDA_SEARCH2
-    ctx->hash2 = (B2gCudaHashItem **)SCMalloc(sizeof(B2gCudaHashItem *) *
-                                              ctx->hash_size);
-    if (ctx->hash2 == NULL)
-        goto error;
-    memset(ctx->hash2, 0, sizeof(B2gCudaHashItem *) * ctx->hash_size);
-
-    mpm_ctx->memory_cnt++;
-    mpm_ctx->memory_size += (sizeof(B2gCudaHashItem *) * ctx->hash_size);
-#endif
-
-    /* alloc the pminlen array */
-    ctx->pminlen = (uint8_t *)SCMalloc(sizeof(uint8_t) * ctx->hash_size);
-    if (ctx->pminlen == NULL)
-        goto error;
-    memset(ctx->pminlen, 0, sizeof(uint8_t) * ctx->hash_size);
-
-    mpm_ctx->memory_cnt++;
-    mpm_ctx->memory_size += (sizeof(uint8_t) * ctx->hash_size);
-
-    for (i = 0; i < mpm_ctx->pattern_cnt; i++)
-    {
-        if(ctx->parray[i]->len == 1) {
-            idx8 = (uint8_t)ctx->parray[i]->ci[0];
-            if (ctx->hash1[idx8].flags == 0) {
-                ctx->hash1[idx8].idx = i;
-                ctx->hash1[idx8].flags |= 0x01;
-            } else {
-                B2gCudaHashItem *hi = B2gCudaAllocHashItem(mpm_ctx);
-                if (hi == NULL)
-                    goto error;
-                hi->idx = i;
-                hi->flags |= 0x01;
-
-                /* Append this HashItem to the list */
-                B2gCudaHashItem *thi = &ctx->hash1[idx8];
-                while (thi->nxt)
-                    thi = thi->nxt;
-                thi->nxt = hi;
-            }
-            ctx->pat_1_cnt++;
-#ifdef B2G_CUDA_SEARCH2
-        } else if(ctx->parray[i]->len == 2) {
-            idx = B2G_CUDA_HASH16(ctx->parray[i]->ci[0], ctx->parray[i]->ci[1]);
-            if (ctx->hash2[idx] == NULL) {
-                B2gCudaHashItem *hi = B2gCudaAllocHashItem(mpm_ctx);
-                if (hi == NULL)
-                    goto error;
-                hi->idx = i;
-                hi->flags |= 0x01;
-
-                ctx->hash2[idx] = hi;
-            } else {
-                B2gCudaHashItem *hi = B2gCudaAllocHashItem(mpm_ctx);
-                if (hi == NULL)
-                    goto error;
-                hi->idx = i;
-                hi->flags |= 0x01;
-
-                /* Append this HashItem to the list */
-                B2gCudaHashItem *thi = ctx->hash2[idx];
-                while (thi->nxt)
-                    thi = thi->nxt;
-                thi->nxt = hi;
-            }
-            ctx->pat_2_cnt++;
-#endif
-        } else {
-            idx = B2G_CUDA_HASH16(ctx->parray[i]->ci[ctx->m - 2],
-                             ctx->parray[i]->ci[ctx->m - 1]);
-            SCLogDebug("idx %" PRIu32 ", %c.%c", idx, ctx->parray[i]->ci[ctx->m - 2],
-                       ctx->parray[i]->ci[ctx->m - 1]);
-
-            if (ctx->hash[idx] == NULL) {
-                B2gCudaHashItem *hi = B2gCudaAllocHashItem(mpm_ctx);
-                if (hi == NULL)
-                    goto error;
-                hi->idx = i;
-                hi->flags |= 0x01;
-                ctx->pminlen[idx] = ctx->parray[i]->len;
-
-                ctx->hash[idx] = hi;
-            } else {
-                B2gCudaHashItem *hi = B2gCudaAllocHashItem(mpm_ctx);
-                if (hi == NULL)
-                    goto error;
-                hi->idx = i;
-                hi->flags |= 0x01;
-
-                if (ctx->parray[i]->len < ctx->pminlen[idx])
-                    ctx->pminlen[idx] = ctx->parray[i]->len;
-
-                /* Append this HashItem to the list */
-                B2gCudaHashItem *thi = ctx->hash[idx];
-                while (thi->nxt)
-                    thi = thi->nxt;
-                thi->nxt = hi;
-            }
-            ctx->pat_x_cnt++;
-        }
-    }
-
-    /* alloc the bloom array */
-    ctx->bloom = (BloomFilter **)SCMalloc(sizeof(BloomFilter *) * ctx->hash_size);
-    if (ctx->bloom == NULL)
-        goto error;
-    memset(ctx->bloom, 0, sizeof(BloomFilter *) * ctx->hash_size);
-
-    mpm_ctx->memory_cnt++;
-    mpm_ctx->memory_size += (sizeof(BloomFilter *) * ctx->hash_size);
-
-    uint32_t h;
-    for (h = 0; h < ctx->hash_size; h++) {
-        B2gCudaHashItem *hi = ctx->hash[h];
-        if (hi == NULL)
-            continue;
-
-        ctx->bloom[h] = BloomFilterInit(b2g_bloom_size, 2, B2gCudaBloomHash);
-        if (ctx->bloom[h] == NULL)
-            continue;
-
-        mpm_ctx->memory_cnt += BloomFilterMemoryCnt(ctx->bloom[h]);
-        mpm_ctx->memory_size += BloomFilterMemorySize(ctx->bloom[h]);
-
-        if (ctx->pminlen[h] > 8)
-            ctx->pminlen[h] = 8;
-
-        B2gCudaHashItem *thi = hi;
-        do {
-            SCLogDebug("adding \"%c%c\" to the bloom", ctx->parray[thi->idx]->ci[0],
-                       ctx->parray[thi->idx]->ci[1]);
-            BloomFilterAdd(ctx->bloom[h], ctx->parray[thi->idx]->ci,
-                           ctx->pminlen[h]);
-            thi = thi->nxt;
-        } while (thi != NULL);
-    }
-
-    return;
-
-error:
-    return;
-}
-
-int B2gCudaBuildMatchArray(MpmCtx *mpm_ctx)
-{
-    SCEnter();
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-
-    ctx->B2G = SCMalloc(sizeof(B2G_CUDA_TYPE) * ctx->hash_size);
-    if (ctx->B2G == NULL)
-        return -1;
-
-    mpm_ctx->memory_cnt++;
-    mpm_ctx->memory_size += (sizeof(B2G_CUDA_TYPE) * ctx->hash_size);
-
-    memset(ctx->B2G, 0, b2g_hash_size * sizeof(B2G_CUDA_TYPE));
-
-    uint32_t j;
-    uint32_t a;
-
-    /* fill the match array */
-    for (j = 0; j <= (ctx->m - B2G_CUDA_Q); j++) {
-        for (a = 0; a < mpm_ctx->pattern_cnt; a++) {
-            if (ctx->parray[a]->len < ctx->m)
-                continue;
-
-            uint16_t h = B2G_CUDA_HASH16(u8_tolower(ctx->parray[a]->ci[j]),
-                                         u8_tolower(ctx->parray[a]->ci[j + 1]));
-            ctx->B2G[h] = ctx->B2G[h] | (1 << (ctx->m - j));
-
-            SCLogDebug("h %" PRIu16 ", ctx->B2G[h] %" PRIu32, h, ctx->B2G[h]);
-        }
-    }
-
-    ctx->s0 = 1;
-
-    SCReturnInt(0);
-}
-
-int B2gCudaSetDeviceBuffers(MpmCtx *mpm_ctx)
-{
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-
-    /* search kernel */
-    if (SCCudaMemAlloc(&ctx->cuda_B2G,
-                       sizeof(B2G_CUDA_TYPE) * ctx->hash_size) == -1) {
-        goto error;
-    }
-    if (SCCudaMemcpyHtoD(ctx->cuda_B2G, ctx->B2G,
-                         sizeof(B2G_CUDA_TYPE) * ctx->hash_size) == -1) {
-        goto error;
-    }
-
-    return 0;
-
- error:
-    return -1;
-}
-
-int B2gCudaSetKernelArgs(MpmCtx *mpm_ctx)
-{
-    return 0;
-}
-
-int B2gCudaPreparePatterns(MpmCtx *mpm_ctx)
-{
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-
-    if (mpm_ctx->pattern_cnt == 0 || ctx->init_hash == NULL) {
-        SCLogDebug("no patterns supplied to this mpm_ctx");
-        return 0;
-    }
-
-    /* alloc the pattern array */
-    ctx->parray = (B2gCudaPattern **)SCMalloc(mpm_ctx->pattern_cnt *
-                                              sizeof(B2gCudaPattern *));
-    if (ctx->parray == NULL)
-        goto error;
-    memset(ctx->parray, 0, mpm_ctx->pattern_cnt * sizeof(B2gCudaPattern *));
-
-    mpm_ctx->memory_cnt++;
-    mpm_ctx->memory_size += (mpm_ctx->pattern_cnt * sizeof(B2gCudaPattern *));
-
-    /* populate it with the patterns in the hash */
-    uint32_t i = 0, p = 0;
-    for (i = 0; i < INIT_HASH_SIZE; i++) {
-        B2gCudaPattern *node = ctx->init_hash[i];
-        B2gCudaPattern *nnode = NULL;
-        for ( ; node != NULL; ) {
-            nnode = node->next;
-            node->next = NULL;
-
-            ctx->parray[p] = node;
-
-            p++;
-            node = nnode;
-        }
-    }
-    /* we no longer need the hash, so free it's memory */
-    SCFree(ctx->init_hash);
-    ctx->init_hash = NULL;
-
-    /* set 'm' to the smallest pattern size */
-    ctx->m = mpm_ctx->minlen;
-
-    /* make sure 'm' stays in bounds
-       m can be max WORD_SIZE - 1 */
-    if (ctx->m >= B2G_CUDA_WORD_SIZE) {
-        ctx->m = B2G_CUDA_WORD_SIZE - 1;
-    }
-    if (ctx->m < 2)
-        ctx->m = 2;
-
-    ctx->hash_size = b2g_hash_size;
-    B2gCudaPrepareHash(mpm_ctx);
-    B2gCudaBuildMatchArray(mpm_ctx);
-
-    if (B2gCudaSetDeviceBuffers(mpm_ctx) == -1)
-        goto error;
-
-    if (B2gCudaSetKernelArgs(mpm_ctx) == -1)
-        goto error;
-
-    SCLogDebug("ctx->pat_1_cnt %" PRIu16, ctx->pat_1_cnt);
-    if (ctx->pat_1_cnt) {
-        ctx->Search = B2gCudaSearch1;
-#ifdef B2G_CUDA_SEARCH2
-        ctx->Search = B2gCudaSearch2;
-        if (ctx->pat_2_cnt) {
-            ctx->MBSearch2 = B2gCudaSearch2;
-        }
-#endif
-        ctx->MBSearch = b2g_func;
-#ifdef B2G_SEARCH2
-    } else if (ctx->pat_2_cnt) {
-        ctx->Search = B2gSearch2;
-        ctx->MBSearch = b2g_cuda_func;
-#endif
-    }
-
-    return 0;
-
- error:
-    return -1;
-}
-
-void B2gCudaPrintSearchStats(MpmThreadCtx *mpm_thread_ctx)
-{
-#ifdef B2G_CUDA_COUNTERS
-    B2gCudaThreadCtx *tctx = (B2gCudaThreadCtx *)mpm_thread_ctx->ctx;
-
-    printf("B2g Thread Search stats (tctx %p)\n", tctx);
-    printf("Total calls: %" PRIu32 "\n", tctx->stat_calls);
-    printf("Avg m/search: %0.2f\n", (tctx->stat_calls ?
-                                     (float)((float)tctx->stat_m_total /
-                                             (float)tctx->stat_calls) : 0));
-    printf("D != 0 (possible match): %" PRIu32 "\n", tctx->stat_d0);
-    printf("Avg hash items per bucket %0.2f (%" PRIu32 ")\n",
-           tctx->stat_d0 ? (float)((float)tctx->stat_d0_hashloop /
-                                   (float)tctx->stat_d0) : 0,
-           tctx->stat_d0_hashloop);
-    printf("Loop match: %" PRIu32 "\n", tctx->stat_loop_match);
-    printf("Loop no match: %" PRIu32 "\n", tctx->stat_loop_no_match);
-    printf("Num shifts: %" PRIu32 "\n", tctx->stat_num_shift);
-    printf("Total shifts: %" PRIu32 "\n", tctx->stat_total_shift);
-    printf("Avg shifts: %0.2f\n", (tctx->stat_num_shift ?
-                                   (float)((float)tctx->stat_total_shift /
-                                           (float)tctx->stat_num_shift)) : 0);
-    printf("Total BloomFilter checks: %" PRIu32 "\n", tctx->stat_bloom_calls);
-    printf("BloomFilter hits: %0.4f%% (%" PRIu32 ")\n",
-           (tctx->stat_bloom_calls ? ((float)tctx->stat_bloom_hits /
-                                      (float)tctx->stat_bloom_calls) * 100) : 0,
-           tctx->stat_bloom_hits);
-    printf("Avg pminlen: %0.2f\n\n",
-           (tctx->stat_pminlen_calls ? ((float)tctx->stat_pminlen_total /
-                                        (float)tctx->stat_pminlen_calls)) : 0);
-#endif /* B2G_CUDA_COUNTERS */
-
-}
-
-static inline int memcmp_lowercase(uint8_t *s1, uint8_t *s2, uint16_t n)
-{
-    size_t i;
-
-    /* check backwards because we already tested the first
-     * 2 to 4 chars. This way we are more likely to detect
-     * a miss and thus speed up a little... */
-    for (i = n - 1; i; i--) {
-        if (u8_tolower(*(s2 + i)) != s1[i])
-            return 1;
-    }
-
-    return 0;
-}
-
-/**
- * \brief   Function to get the user defined values for b2g algorithm from the
- *          config file 'suricata.yaml'
- */
-static void B2gGetConfig()
-{
-    ConfNode *b2g_conf;
-    const char *hash_val = NULL;
-    const char *bloom_val = NULL;
-    const char *algo = NULL;
-
-    /* init defaults */
-    b2g_hash_size = HASHSIZE_LOW;
-    b2g_bloom_size = BLOOMSIZE_MEDIUM;
-    b2g_func = B2G_CUDA_SEARCHFUNC;
-
-    ConfNode *pm = ConfGetNode("pattern-matcher");
-
-    if (pm != NULL) {
-
-        TAILQ_FOREACH(b2g_conf, &pm->head, next) {
-            if (strncmp(b2g_conf->val, "b2g", 3) == 0) {
-
-                algo = ConfNodeLookupChildValue
-                        (b2g_conf->head.tqh_first, "algo");
-                hash_val = ConfNodeLookupChildValue
-                        (b2g_conf->head.tqh_first, "hash_size");
-                bloom_val = ConfNodeLookupChildValue
-                        (b2g_conf->head.tqh_first, "bf_size");
-
-                if (algo != NULL) {
-                    if (strcmp(algo, "B2gSearch") == 0) {
-                        b2g_func = B2gCudaSearch;
-                    } else if (strcmp(algo, "B2gSearchBNDMq") == 0) {
-                        b2g_func = B2gCudaSearchBNDMq;
-                    }
-                }
-
-                if (hash_val != NULL)
-                    b2g_hash_size = MpmGetHashSize(hash_val);
-
-                if (bloom_val != NULL)
-                    b2g_bloom_size = MpmGetBloomSize(bloom_val);
-
-                SCLogDebug("hash size is %"PRIu32" and bloom size is %"PRIu32"",
-                b2g_hash_size, b2g_bloom_size);
-            }
-        }
-    }
-}
-
-void B2gCudaInitCtx(MpmCtx *mpm_ctx, int module_handle)
-{
-    if (mpm_ctx->ctx != NULL)
-        return;
-
-    SCLogDebug("mpm_ctx %p, ctx %p", mpm_ctx, mpm_ctx->ctx);
-
-    mpm_ctx->ctx = SCMalloc(sizeof(B2gCudaCtx));
-    if (mpm_ctx->ctx == NULL)
-        return;
-
-    memset(mpm_ctx->ctx, 0, sizeof(B2gCudaCtx));
-
-    mpm_ctx->memory_cnt++;
-    mpm_ctx->memory_size += sizeof(B2gCudaCtx);
-
-    /* initialize the hash we use to speed up pattern insertions */
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-
-    /* hold the cuda module handle against which we are registered.  This is our
-     * only reference to know our place of birth */
-    ctx->module_handle = module_handle;
-
-    ctx->init_hash = SCMalloc(sizeof(B2gCudaPattern *) * INIT_HASH_SIZE);
-    if (ctx->init_hash == NULL)
-        return;
-
-    memset(ctx->init_hash, 0, sizeof(B2gCudaPattern *) * INIT_HASH_SIZE);
-
-    /* Initialize the defaults value from the config file. The given check make
-       sure that we query config file only once for config values */
-    if (b2g_hash_size == 0)
-        B2gGetConfig();
-
-    /* init defaults search functions */
-    ctx->Search = b2g_func;
-
-    return;
-}
-
-void B2gCudaDestroyCtx(MpmCtx *mpm_ctx)
-{
-    SCLogDebug("mpm_ctx %p", mpm_ctx);
-
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-    if (ctx == NULL)
-        return;
-
-    if (ctx->init_hash) {
-        SCFree(ctx->init_hash);
-        mpm_ctx->memory_cnt--;
-        mpm_ctx->memory_size -= (INIT_HASH_SIZE * sizeof(B2gCudaPattern *));
-    }
-
-    if (ctx->parray) {
-        uint32_t i;
-        for (i = 0; i < mpm_ctx->pattern_cnt; i++) {
-            if (ctx->parray[i] != NULL) {
-                B2gCudaFreePattern(mpm_ctx, ctx->parray[i]);
-            }
-        }
-
-        SCFree(ctx->parray);
-        mpm_ctx->memory_cnt--;
-        mpm_ctx->memory_size -= (mpm_ctx->pattern_cnt * sizeof(B2gCudaPattern));
-    }
-
-    if (ctx->B2G) {
-        SCFree(ctx->B2G);
-        mpm_ctx->memory_cnt--;
-        mpm_ctx->memory_size -= (sizeof(B2G_CUDA_TYPE) * ctx->hash_size);
-    }
-
-    if (ctx->bloom) {
-        uint32_t h;
-        for (h = 0; h < ctx->hash_size; h++) {
-            if (ctx->bloom[h] == NULL)
-                continue;
-
-            mpm_ctx->memory_cnt -= BloomFilterMemoryCnt(ctx->bloom[h]);
-            mpm_ctx->memory_size -= BloomFilterMemorySize(ctx->bloom[h]);
-
-            BloomFilterFree(ctx->bloom[h]);
-        }
-
-        SCFree(ctx->bloom);
-
-        mpm_ctx->memory_cnt--;
-        mpm_ctx->memory_size -= (sizeof(BloomFilter *) * ctx->hash_size);
-    }
-
-    if (ctx->hash) {
-        uint32_t h;
-        for (h = 0; h < ctx->hash_size; h++) {
-            if (ctx->hash[h] == NULL)
-                continue;
-
-            B2gCudaHashFree(mpm_ctx, ctx->hash[h]);
-        }
-
-        SCFree(ctx->hash);
-        mpm_ctx->memory_cnt--;
-        mpm_ctx->memory_size -= (sizeof(B2gCudaHashItem) * ctx->hash_size);
-    }
-
-    if (ctx->pminlen) {
-        SCFree(ctx->pminlen);
-        mpm_ctx->memory_cnt--;
-        mpm_ctx->memory_size -= (sizeof(uint8_t) * ctx->hash_size);
-    }
-
-    CUcontext dummy_context;
-    SCCudaHlModuleData *module_data = SCCudaHlGetModuleData(ctx->module_handle);
-    if (module_data == NULL) {
-        SCLogError(SC_ERR_B2G_CUDA_ERROR, "How did we even fail to get a "
-                   "module_data if we are having a module_handle");
-        goto error;
-    }
-    if (SCCudaHlGetCudaContext(&dummy_context, "mpm", ctx->module_handle) == -1) {
-        SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error getting a cuda context for the "
-                   "module %s", module_data->name);
-        goto error;
-    }
-    SCCudaCtxPushCurrent(dummy_context);
-
-    if (ctx->cuda_B2G != 0) {
-        if (SCCudaMemFree(ctx->cuda_B2G) == -1) {
-            SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error freeing ctx->cuda_B2G ");
-            goto error;
-        }
-        ctx->cuda_B2G = 0;
-    }
-    SCCudaCtxPopCurrent(&dummy_context);
-
-    SCFree(mpm_ctx->ctx);
-    mpm_ctx->memory_cnt--;
-    mpm_ctx->memory_size -= sizeof(B2gCudaCtx);
-
-
- error:
-    return;
-}
-
-void B2gCudaThreadInitCtx(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
-                          uint32_t matchsize)
-{
-    memset(mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
-
-    /* size can be null when optimized */
-    if (sizeof(B2gCudaThreadCtx) > 0) {
-        mpm_thread_ctx->ctx = SCMalloc(sizeof(B2gCudaThreadCtx));
-        if (mpm_thread_ctx->ctx == NULL)
-            return;
-
-        memset(mpm_thread_ctx->ctx, 0, sizeof(B2gCudaThreadCtx));
-
-        mpm_thread_ctx->memory_cnt++;
-        mpm_thread_ctx->memory_size += sizeof(B2gCudaThreadCtx);
-    }
-
-    return;
-}
-
-void B2gCudaThreadDestroyCtx(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx)
-{
-    B2gCudaThreadCtx *ctx = (B2gCudaThreadCtx *)mpm_thread_ctx->ctx;
-
-    B2gCudaPrintSearchStats(mpm_thread_ctx);
-
-    /* can be NULL if B2gThreadCtx is optimized to 0 */
-    if (ctx != NULL) {
-        mpm_thread_ctx->memory_cnt--;
-        mpm_thread_ctx->memory_size -= sizeof(B2gCudaThreadCtx);
-        SCFree(mpm_thread_ctx->ctx);
-    }
-
-    return;
-}
-
-inline uint32_t B2gCudaSearchWrap(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
-                                  PatternMatcherQueue *pmq, uint8_t *buf,
-                                  uint16_t buflen)
-{
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-    return ctx ? ctx->Search(mpm_ctx, mpm_thread_ctx, pmq, buf, buflen) : 0;
-}
-
-uint32_t B2gCudaSearchBNDMq(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
-                            PatternMatcherQueue *pmq, uint8_t *buf,
-                            uint16_t buflen)
-{
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-#ifdef B2G_COUNTERS
-    B2gCudaThreadCtx *tctx = (B2gCudaThreadCtx *)mpm_thread_ctx->ctx;
-#endif
-    uint32_t pos = ctx->m - B2G_CUDA_Q + 1, matches = 0;
-    B2G_CUDA_TYPE d;
-
-    //printf("\n");
-    //PrintRawDataFp(stdout, buf, buflen);
-
-    SCLogDebug("buflen %"PRIu16", ctx->m %"PRIu32", pos %"PRIu32"", buflen,
-            ctx->m, pos);
-
-    COUNT(tctx->stat_calls++);
-    COUNT(tctx->stat_m_total+=ctx->m);
-
-    if (buflen < ctx->m)
-        return 0;
-
-    while (pos <= (uint32_t)(buflen - B2G_CUDA_Q + 1)) {
-        uint16_t h = B2G_CUDA_HASH16(u8_tolower(buf[pos - 1]),u8_tolower(buf[pos]));
-        d = ctx->B2G[h];
-
-        if (d != 0) {
-            COUNT(tctx->stat_d0++);
-            uint32_t j = pos;
-            uint32_t first = pos - (ctx->m - B2G_CUDA_Q + 1);
-
-            do {
-                j = j - 1;
-
-                if (d >= (uint32_t)(1 << (ctx->m - 1))) {
-                    if (j > first) pos = j;
-                    else {
-                        /* get our patterns from the hash */
-                        h = B2G_CUDA_HASH16(u8_tolower(buf[j + ctx->m - 2]),u8_tolower(buf[j + ctx->m - 1]));
-
-                        if (ctx->bloom[h] != NULL) {
-                            COUNT(tctx->stat_pminlen_calls++);
-                            COUNT(tctx->stat_pminlen_total+=ctx->pminlen[h]);
-
-                            if ((buflen - j) < ctx->pminlen[h]) {
-                                goto skip_loop;
-                            } else {
-                                COUNT(tctx->stat_bloom_calls++);
-
-                                if (BloomFilterTest(ctx->bloom[h], buf+j, ctx->pminlen[h]) == 0) {
-                                    COUNT(tctx->stat_bloom_hits++);
-
-                                    SCLogDebug("Bloom: %p, buflen %" PRIu32 ", pos %" PRIu32 ", p_min_len %" PRIu32 "",
-                                        ctx->bloom[h], buflen, pos, ctx->pminlen[h]);
-                                    goto skip_loop;
-                                }
-                            }
-                        }
-
-                        B2gCudaHashItem *hi = ctx->hash[h], *thi;
-                        for (thi = hi; thi != NULL; thi = thi->nxt) {
-                            COUNT(tctx->stat_d0_hashloop++);
-                            B2gCudaPattern *p = ctx->parray[thi->idx];
-
-                            if (p->flags & MPM_PATTERN_FLAG_NOCASE) {
-                                if ((buflen - j) < p->len) {
-                                    continue;
-                                }
-
-                                if (memcmp_lowercase(p->ci, buf+j, p->len) == 0) {
-#ifdef PRINTMATCH
-                                    printf("CI Exact match: "); prt(p->ci, p->len); printf("\n");
-#endif
-                                    COUNT(tctx->stat_loop_match++);
-
-                                    matches += MpmVerifyMatch(mpm_thread_ctx, pmq, p->id);
-                                } else {
-                                    COUNT(tctx->stat_loop_no_match++);
-                                }
-                            } else {
-                                if (buflen - j < p->len)
-                                    continue;
-
-                                if (memcmp(p->cs, buf+j, p->len) == 0) {
-#ifdef PRINTMATCH
-                                    printf("CS Exact match: "); prt(p->cs, p->len); printf("\n");
-#endif
-                                    COUNT(tctx->stat_loop_match++);
-
-                                    matches += MpmVerifyMatch(mpm_thread_ctx, pmq, p->id);
-                                } else {
-                                    COUNT(tctx->stat_loop_no_match++);
-                                }
-                            }
-                        }
-skip_loop:
-                        SCLogDebug("skipped");
-                        //SCLogDebug("output at pos %" PRIu32 ": ", j); prt(buf + (j), ctx->m); printf("\n");
-                        ;
-                    }
-                }
-
-                if (j == 0) {
-                    break;
-                }
-
-                h = B2G_CUDA_HASH16(u8_tolower(buf[j - 1]),u8_tolower(buf[j]));
-                d = (d << 1) & ctx->B2G[h];
-            } while (d != 0);
-        }
-        COUNT(tctx->stat_num_shift++);
-        COUNT(tctx->stat_total_shift += (ctx->m - B2G_Q + 1));
-        pos = pos + ctx->m - B2G_CUDA_Q + 1;
-
-        SCLogDebug("pos %"PRIu32"", pos);
-    }
-
-    SCLogDebug("matches %"PRIu32"", matches);
-    return matches;
-}
-
-uint32_t B2gCudaSearch(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
-                       PatternMatcherQueue *pmq, uint8_t *buf, uint16_t buflen)
-{
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-#ifdef B2G_CUDA_COUNTERS
-    B2gCudaThreadCtx *tctx = (B2gCudaThreadCtx *)mpm_thread_ctx->ctx;
-#endif
-    uint32_t pos = 0, matches = 0;
-    B2G_CUDA_TYPE d;
-    uint32_t j;
-
-    COUNT(tctx->stat_calls++);
-    COUNT(tctx->stat_m_total+=ctx->m);
-
-    if (buflen < ctx->m)
-        return 0;
-
-    while (pos <= (buflen - ctx->m)) {
-        j = ctx->m - 1;
-        d = ~0;
-
-        do {
-            uint16_t h = B2G_CUDA_HASH16(u8_tolower(buf[pos + j - 1]),u8_tolower(buf[pos + j]));
-            d = ((d << 1) & ctx->B2G[h]);
-            j = j - 1;
-        } while (d != 0 && j != 0);
-
-        /* (partial) match, move on to verification */
-        if (d != 0) {
-            COUNT(tctx->stat_d0++);
-            //printf("output at pos %" PRIu32 ": ", pos); prt(buf + pos, ctx->m); printf("\n");
-
-            /* get our patterns from the hash */
-            uint16_t h = B2G_CUDA_HASH16(u8_tolower(buf[pos + ctx->m - 2]),u8_tolower(buf[pos + ctx->m - 1]));
-
-            if (ctx->bloom[h] != NULL) {
-                COUNT(tctx->stat_pminlen_calls++);
-                COUNT(tctx->stat_pminlen_total+=ctx->pminlen[h]);
-
-                if ((buflen - pos) < ctx->pminlen[h]) {
-                    goto skip_loop;
-                } else {
-                    COUNT(tctx->stat_bloom_calls++);
-
-                    if (BloomFilterTest(ctx->bloom[h], buf+pos, ctx->pminlen[h]) == 0) {
-                        COUNT(tctx->stat_bloom_hits++);
-
-                        //printf("Bloom: %p, buflen %" PRIu32 ", pos %" PRIu32 ", p_min_len %" PRIu32 "\n", ctx->bloom[h], buflen, pos, ctx->pminlen[h]);
-                        goto skip_loop;
-                    }
-                }
-            }
-
-            B2gCudaHashItem *hi = ctx->hash[h], *thi;
-            for (thi = hi; thi != NULL; thi = thi->nxt) {
-                COUNT(tctx->stat_d0_hashloop++);
-                B2gCudaPattern *p = ctx->parray[thi->idx];
-
-                if (p->flags & MPM_PATTERN_FLAG_NOCASE) {
-                    if (buflen - pos < p->len)
-                        continue;
-
-                    if (memcmp_lowercase(p->ci, buf+pos, p->len) == 0) {
-                        COUNT(tctx->stat_loop_match++);
-
-                        matches += MpmVerifyMatch(mpm_thread_ctx, pmq, p->id);
-                    } else {
-                        COUNT(tctx->stat_loop_no_match++);
-                    }
-                } else {
-                    if (buflen - pos < p->len)
-                        continue;
-
-                    if (memcmp(p->cs, buf+pos, p->len) == 0) {
-                        COUNT(tctx->stat_loop_match++);
-
-                        matches += MpmVerifyMatch(mpm_thread_ctx, pmq, p->id);
-                    } else {
-                        COUNT(tctx->stat_loop_no_match++);
-                    }
-                }
-            }
-skip_loop:
-            //pos = pos + ctx->s0;
-            pos = pos + 1;
-        } else {
-            COUNT(tctx->stat_num_shift++);
-            COUNT(tctx->stat_total_shift += (j + 1));
-
-            pos = pos + j + 1;
-        }
-    }
-
-    //printf("Total matches %" PRIu32 "\n", matches);
-    return matches;
-}
-
-#ifdef B2G_CUDA_SEARCH2
-uint32_t B2gCudaSearch2(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
-                        PatternMatcherQueue *pmq, uint8_t *buf, uint16_t buflen)
-{
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-    uint8_t *bufmin = buf;
-    uint8_t *bufend = buf + buflen - 1;
-    uint32_t cnt = 0;
-    B2gCudaPattern *p;
-    B2gCudaHashItem *thi, *hi;
-
-    if (buflen < 2)
-        return 0;
-
-    //printf("BUF "); prt(buf,buflen); printf("\n");
-
-    while (buf <= bufend) {
-        uint8_t h8 = u8_tolower(*buf);
-        hi = &ctx->hash1[h8];
-
-        if (hi->flags & 0x01) {
-            for (thi = hi; thi != NULL; thi = thi->nxt) {
-                p = ctx->parray[thi->idx];
-
-                if (p->flags & MPM_PATTERN_FLAG_NOCASE) {
-                    if (h8 == p->ci[0]) {
-                        cnt += MpmVerifyMatch(mpm_thread_ctx, pmq, p->id);
-                    }
-                } else {
-                    if (*buf == p->cs[0]) {
-                        cnt += MpmVerifyMatch(mpm_thread_ctx, pmq, p->id);
-                    }
-                }
-            }
-        }
-
-        /* save one conversion by reusing h8 */
-        uint16_t h16 = B2G_HASH16(h8, u8_tolower(*(buf+1)));
-        hi = ctx->hash2[h16];
-
-        for (thi = hi; thi != NULL; thi = thi->nxt) {
-            p = ctx->parray[thi->idx];
-
-            if (p->flags & MPM_PATTERN_FLAG_NOCASE) {
-                if (h8 == p->ci[0] && u8_tolower(*(buf+1)) == p->ci[1]) {
-                    //printf("CI Exact match: "); prt(p->ci, p->len); printf(" in buf "); prt(buf, p->len);printf(" (B2gSearch1)\n");
-//                    for (em = p->em; em; em = em->next) {
-                        if (MpmVerifyMatch(mpm_thread_ctx, pmq, p->id))
-                            cnt++;
-//                    }
-                }
-            } else {
-                if (*buf == p->cs[0] && *(buf+1) == p->cs[1]) {
-                    //printf("CS Exact match: "); prt(p->cs, p->len); printf(" in buf "); prt(buf, p->len);printf(" (B2gSearch1)\n");
-//                    for (em = p->em; em; em = em->next) {
-                        if (MpmVerifyMatch(mpm_thread_ctx, pmq, p->id))
-                            cnt++;
-//                    }
-                }
-            }
-        }
-        buf += 1;
-    }
-
-    //printf("B2gSearch2: after 2byte cnt %" PRIu32 "\n", cnt);
-    if (ctx->pat_x_cnt > 0) {
-        /* Pass bufmin on because buf no longer points to the
-         * start of the buffer. */
-        cnt += ctx->MBSearch(mpm_ctx, mpm_thread_ctx, pmq, bufmin, buflen);
-        //printf("B2gSearch1: after 2+byte cnt %" PRIu32 "\n", cnt);
-    }
-    return cnt;
-}
-#endif
-
-uint32_t B2gCudaSearch1(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
-                        PatternMatcherQueue *pmq, uint8_t *buf, uint16_t buflen)
-{
-    SCEnter();
-
-    B2gCudaCtx *ctx = (B2gCudaCtx *)mpm_ctx->ctx;
-    uint8_t *bufmin = buf;
-    uint8_t *bufend = buf + buflen - 1;
-    uint32_t cnt = 0;
-    B2gCudaPattern *p;
-    B2gCudaHashItem *thi, *hi;
-
-    if (buflen == 0)
-        SCReturnUInt(0);
-
-    //printf("BUF "); prt(buf,buflen); printf("\n");
-
-    while (buf <= bufend) {
-        uint8_t h = u8_tolower(*buf);
-        hi = &ctx->hash1[h];
-
-        if (hi->flags & 0x01) {
-            for (thi = hi; thi != NULL; thi = thi->nxt) {
-                p = ctx->parray[thi->idx];
-
-                if (p->len != 1)
-                    continue;
-
-                if (p->flags & MPM_PATTERN_FLAG_NOCASE) {
-                    if (u8_tolower(*buf) == p->ci[0]) {
-                        cnt += MpmVerifyMatch(mpm_thread_ctx, pmq, p->id);
-                    }
-                } else {
-                    if (*buf == p->cs[0]) {
-                        cnt += MpmVerifyMatch(mpm_thread_ctx, pmq, p->id);
-                    }
-                }
-            }
-        }
-        buf += 1;
-    }
-
-    //printf("B2gSearch1: after 1byte cnt %" PRIu32 "\n", cnt);
-#ifdef B2G_CUDA_SEARCH2
-    if (ctx->pat_2_cnt) {
-        /* Pass bufmin on because buf no longer points to the
-         * start of the buffer. */
-        cnt += ctx->MBSearch2(mpm_ctx, mpm_thread_ctx, pmq, bufmin, buflen);
-        //printf("B2gSearch1: after 2+byte cnt %" PRIu32 "\n", cnt);
-    } else
-#endif
-    if (ctx->pat_x_cnt) {
-        cnt += ctx->MBSearch(mpm_ctx, mpm_thread_ctx, pmq, bufmin, buflen);
-    }
-    SCReturnUInt(cnt);
-}
-
-/*********************Cuda_Specific_Mgmt_Code_Starts_Here**********************/
-
-/*
- * \brief This data holds all resources needed by a cuda stream such as
- *        device pointers, host pointers, CUmodule and Kernel function. These
- *        are only valid within the context of the associated B2gCudaMpmThreadCtxData.
- */
-typedef struct B2gCudaMpmStreamData_ {
-    /* Stream used for asynchronous memcopy in the Cuda MPM dispatcher.
-     * This is != NULL if the memory is allocated page-locked, i.e. profile->page_locked
-     * is set. Only streams != NULL are used for async. processing. */
-    CUstream cuda_stream;
-
-    /* Flag that indicates if there is some asynchronous operation in progress */
-    uint8_t cuda_async;
-
-    /* The CUmodule for this stream and corresponding handle. We need to load the
-     * cuda module for every stream to avoid rebinding the kernel configuration
-     * with every kernel call. */
-    int b2g_cuda_cumodule_handle;
-    CUmodule b2g_cuda_cumodule;
-
-    /* the search kernel */
-    CUfunction b2g_cuda_search_kernel;
-
-    /* the cuda_search_kernel argument offsets */
-    uint8_t b2g_cuda_search_kernel_arg0_offset;
-    uint8_t b2g_cuda_search_kernel_arg1_offset;
-    uint8_t b2g_cuda_search_kernel_arg2_offset;
-    uint8_t b2g_cuda_search_kernel_arg3_offset;
-    uint8_t b2g_cuda_search_kernel_arg4_offset;
-    uint8_t b2g_cuda_search_kernel_arg5_offset;
-    uint8_t b2g_cuda_search_kernel_arg_total;
-
-    /* the results buffer to hold the match offsets for the packets */
-    uint16_t *results_buffer;
-    /* gpu buffer corresponding to the above buffer */
-    CUdeviceptr cuda_results_buffer;
-
-    /* gpu buffer corresponding to SCCudaPBPacketsBuffer->packets_buffer */
-    CUdeviceptr cuda_packets_buffer;
-    /* gpu buffer corresponding to SCCudaPBPacketsBuffer->packets_offset_buffer */
-    CUdeviceptr cuda_packets_offset_buffer;
-    /* gpu buffer corresponding to SCCudaPBPacketsBuffer->packets_payload_offset_buffer */
-    CUdeviceptr cuda_packets_payload_offset_buffer;
-    /* gpu buffer corresponding to the global symbol g_u8_lowercasetable
-     * XXX Remove this.  Store it as a constant buffer inside the kernel*/
-    CUdeviceptr cuda_g_u8_lowercasetable;
-} B2gCudaMpmStreamData;
-
-/*
- * \brief Cuda specific data for the MPM's thread context.
- */
-typedef struct B2gCudaMpmThreadCtxData_ {
-    int b2g_cuda_module_handle;
-    CUcontext b2g_cuda_context;
-
-    /* Data of the cuda streams of this context */
-    B2gCudaMpmStreamData *stream_data;
-    uint8_t no_of_streams;
-    /* Data store for packet buffers that are currently processed */
-    Tmq *tmq_streamq;
-} B2gCudaMpmThreadCtxData;
-
-/*
- * \brief Initialize data for the cuda streams.
- *
- * \param tctx    The thread context data of the Cuda MPM.
- * \param profile The cuda profile used by the MPM.
- *
- * \retval 0 on succes, -1 on failure.
- */
-static int B2gCudaMpmStreamDataInit(B2gCudaMpmThreadCtxData *tctx, MpmCudaConf *profile)
-{
-    SCCudaHlModuleData *module_data = NULL;
-    B2gCudaMpmStreamData *sd = NULL;
-    uint8_t i = 0;
-
-    module_data = SCCudaHlGetModuleData(tctx->b2g_cuda_module_handle);
-    if (module_data == NULL) {
-        SCLogError(SC_ERR_CUDA_HANDLER_ERROR,"No Cuda module data");
-        goto error;
-    }
-
-    SCLogDebug("Initializing data for %"PRIu16" cuda streams", tctx->no_of_streams);
-    for (i = 0; i < tctx->no_of_streams; ++i) {
-        sd = &tctx->stream_data[i];
-
-        /* Init cuda stream */
-        if (profile->page_locked) {
-            if (SCCudaStreamCreate(&sd->cuda_stream, 0) == -1) {
-                SCLogError(SC_ERR_CUDA_ERROR, "Error creating Cuda stream.");
-                exit(EXIT_FAILURE);
-            }
-        } else {
-            SCLogDebug("Disabled asynchronous cuda processing");
-            sd->cuda_stream = NULL;
-        }
-
-        /* Load the CUmodule */
-        sd->b2g_cuda_cumodule_handle = SCCudaHlGetCudaModule(&sd->b2g_cuda_cumodule,
-                                                             "util-mpm-b2g-cuda-kernel",
-                                                             module_data->handle);
-        if (sd->b2g_cuda_cumodule_handle == -1) {
-            SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error getting a cuda module");
-            goto error;
-        }
-
-        /* Get kernel from module */
-        if (SCCudaModuleGetFunction(&sd->b2g_cuda_search_kernel,
-                                    sd->b2g_cuda_cumodule,
-                                    B2G_CUDA_SEARCHFUNC_NAME) == -1) {
-            SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error getting a cuda function");
-            goto error;
-        }
-
-        /* Configure kernel execution */
-        if (SCCudaFuncSetBlockShape(sd->b2g_cuda_search_kernel, 32, 1, 1) == -1) {
-            SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error setting function block shape");
-            goto error;
-        }
-
-#define ALIGN_UP(offset, alignment) do { \
-                (offset) = ((offset) + (alignment) - 1) & ~((alignment) - 1); \
-        } while (0)
-
-        int offset = 0;
-
-        ALIGN_UP(offset, __alignof(void *));
-        sd->b2g_cuda_search_kernel_arg0_offset = offset;
-        offset += sizeof(void *);
-
-        ALIGN_UP(offset, __alignof(void *));
-        sd->b2g_cuda_search_kernel_arg1_offset = offset;
-        offset += sizeof(void *);
-
-        ALIGN_UP(offset, __alignof(void *));
-        sd->b2g_cuda_search_kernel_arg2_offset = offset;
-        offset += sizeof(void *);
-
-        ALIGN_UP(offset, __alignof(void *));
-        sd->b2g_cuda_search_kernel_arg3_offset = offset;
-        offset += sizeof(void *);
-
-        ALIGN_UP(offset, __alignof(uint16_t));
-        sd->b2g_cuda_search_kernel_arg4_offset = offset;
-        offset += sizeof(void *);
-
-        ALIGN_UP(offset, __alignof(void *));
-        sd->b2g_cuda_search_kernel_arg5_offset = offset;
-        offset += sizeof(void *);
-
-        tctx->stream_data[i].b2g_cuda_search_kernel_arg_total = offset;
-
-        /* buffer to hold the b2g cuda mpm match results for 4000 packets.  The
-         * extra 2 bytes(the extra + 1 ) is to hold the no of
-         * matches for the payload.  The remaining profile->packet_size_limit
-         * positions in the buffer is to hold the match offsets */
-        if (profile->page_locked) {
-            if (SCCudaMemHostAlloc((void**)&sd->results_buffer,
-                                   sizeof(uint16_t) * (profile->packet_size_limit + 1) *
-                                   profile->packet_buffer_limit,
-                                   CU_MEMHOSTALLOC_PORTABLE) == -1){
-                SCLogError(SC_ERR_CUDA_ERROR, "Error allocating page-locked memory\n");
-                exit(EXIT_FAILURE);
-            }
-        } else {
-            sd->results_buffer = SCMalloc(sizeof(uint16_t) *
-                                          (profile->packet_size_limit + 1) *
-                                          profile->packet_buffer_limit);
-            if (sd->results_buffer == NULL) {
-                SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
-                exit(EXIT_FAILURE);
-            }
-        }
-
-        if (SCCudaHlGetCudaDevicePtr(&sd->cuda_results_buffer,
-                                    "MPM_B2G_RESULTS",
-                                    sizeof(uint16_t) *
-                                    (profile->packet_size_limit + 1) *
-                                    profile->packet_buffer_limit,
-                                    NULL, module_data->handle,
-                                    sd->b2g_cuda_cumodule_handle) == -1) {
-            goto error;
-        }
-
-        if (SCCudaHlGetCudaDevicePtr(&sd->cuda_g_u8_lowercasetable,
-                                     "G_U8_LOWERCASETABLE", 256 * sizeof(char),
-                                     g_u8_lowercasetable, module_data->handle,
-                                     sd->b2g_cuda_cumodule_handle) == -1) {
-            goto error;
-        }
-
-        if (SCCudaHlGetCudaDevicePtr(&sd->cuda_packets_buffer,
-                                     "MPM_B2G_PACKETS_BUFFER",
-                                     profile->packet_buffer_limit *
-                                     (profile->packet_size_limit +
-                                      sizeof(SCCudaPBPacketDataForGPUNonPayload)),
-                                     NULL, module_data->handle,
-                                     sd->b2g_cuda_cumodule_handle) == -1) {
-            goto error;
-        }
-
-        if (SCCudaHlGetCudaDevicePtr(&sd->cuda_packets_offset_buffer,
-                                     "MPM_B2G_PACKETS_BUFFER_OFFSETS",
-                                     sizeof(uint32_t) * profile->packet_buffer_limit,
-                                     NULL, module_data->handle,
-                                     sd->b2g_cuda_cumodule_handle) == -1) {
-            goto error;
-        }
-
-        if (SCCudaHlGetCudaDevicePtr(&sd->cuda_packets_payload_offset_buffer,
-                                     "MPM_B2G_PACKETS_PAYLOAD_BUFFER_OFFSETS",
-                                     sizeof(uint32_t) * profile->packet_buffer_limit,
-                                     NULL, module_data->handle,
-                                     sd->b2g_cuda_cumodule_handle) == -1) {
-            goto error;
-        }
-
-
-        if (SCCudaParamSetv(sd->b2g_cuda_search_kernel,
-                            sd->b2g_cuda_search_kernel_arg0_offset,
-                            (void *)&sd->cuda_results_buffer,
-                            sizeof(void *)) == -1) {
-            goto error;
-        }
-
-        if (SCCudaParamSetv(sd->b2g_cuda_search_kernel,
-                            sd->b2g_cuda_search_kernel_arg1_offset,
-                            (void *)&sd->cuda_packets_buffer,
-                            sizeof(void *)) == -1) {
-            goto error;
-        }
-
-        if (SCCudaParamSetv(sd->b2g_cuda_search_kernel,
-                            sd->b2g_cuda_search_kernel_arg2_offset,
-                            (void *)&sd->cuda_packets_offset_buffer,
-                            sizeof(void *)) == -1) {
-            goto error;
-        }
-
-        if (SCCudaParamSetv(sd->b2g_cuda_search_kernel,
-                sd->b2g_cuda_search_kernel_arg3_offset,
-                            (void *)&sd->cuda_packets_payload_offset_buffer,
-                            sizeof(void *)) == -1) {
-            goto error;
-        }
-
-        if (SCCudaParamSetv(sd->b2g_cuda_search_kernel,
-                            sd->b2g_cuda_search_kernel_arg5_offset,
-                            (void *)&sd->cuda_g_u8_lowercasetable,
-                            sizeof(void *)) == -1) {
-            goto error;
-        }
-
-        if (SCCudaParamSetSize(sd->b2g_cuda_search_kernel,
-                               sd->b2g_cuda_search_kernel_arg_total) == -1) {
-            goto error;
-        }
-    }
-
-    return 0;
-
-  error:
-    return -1;
-}
-
-/*
- * \brief DeInitialize data for the cuda streams.
- *
- * \param tctx    The thread context data of the Cuda MPM.
- * \param profile The cuda profile used by the MPM.
- *
- * \retval 0 on succes, -1 on failure
- */
-static int B2gCudaMpmStreamDataDeInit(B2gCudaMpmThreadCtxData *tctx, MpmCudaConf *profile)
-{
-    B2gCudaMpmStreamData *sd = NULL;
-    uint8_t i = 0;
-
-    if (tctx == NULL || profile == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENT, "Arguments cannot be NULL");
-        goto error;
-    }
-
-    SCLogDebug("DeInitializing data for %"PRIu16" cuda streams", tctx->no_of_streams);
-    for (i = 0; i < tctx->no_of_streams; ++i) {
-        sd = &tctx->stream_data[i];
-
-        if (sd->cuda_stream != NULL) {
-            if (SCCudaStreamDestroy(sd->cuda_stream) == -1) {
-                SCLogError(SC_ERR_CUDA_ERROR, "Error deallocating Cuda stream ");
-                goto error;
-            }
-        }
-        if (profile->page_locked) {
-            if (SCCudaMemFreeHost(sd->results_buffer) == -1) {
-                SCLogError(SC_ERR_CUDA_ERROR, "Error deallocating pagelocked memory: "
-                                              "results_buffer\n");
-                goto error;
-            }
-        } else {
-            SCFree(sd->results_buffer);
-        }
-        SCCudaHlFreeCudaDevicePtr("MPM_B2G_RESULTS",
-                                  tctx->b2g_cuda_module_handle,
-                                  sd->b2g_cuda_cumodule_handle);
-        SCCudaHlFreeCudaDevicePtr("MPM_B2G_PACKETS_BUFFER",
-                                  tctx->b2g_cuda_module_handle,
-                                  sd->b2g_cuda_cumodule_handle);
-        SCCudaHlFreeCudaDevicePtr("MPM_B2G_PACKETS_BUFFER_OFFSETS",
-                                  tctx->b2g_cuda_module_handle,
-                                  sd->b2g_cuda_cumodule_handle);
-        SCCudaHlFreeCudaDevicePtr("MPM_B2G_PACKETS_PAYLOAD_BUFFER_OFFSETS",
-                                  tctx->b2g_cuda_module_handle,
-                                  sd->b2g_cuda_cumodule_handle);
-        SCCudaHlFreeCudaDevicePtr("G_U8_LOWERCASETABLE",
-                                  tctx->b2g_cuda_module_handle,
-                                  sd->b2g_cuda_cumodule_handle);
-    }
-
-    SCFree(tctx->stream_data);
-
-    return 0;
-
- error:
-    return -1;
-}
-
-/**
- * \brief The Cuda MPM B2G module's thread init function.
- *
- * \param tv       Pointer to the ThreadVars which has invoked this function.
- * \param initdata Pointer to some user sent data.
- * \param data     Pointer to a pointer which can be used to send data to the
- *                 dispatcher thread.
- *
- * \retval TM_ECODE_OK Always.
- */
-TmEcode B2gCudaMpmDispThreadInit(ThreadVars *tv, void *initdata, void **data)
-{
-    MpmCudaConf *profile = NULL;
-    SCCudaHlModuleData *module_data = (SCCudaHlModuleData *)initdata;
-
-    if (PatternMatchDefaultMatcher() != MPM_B2G_CUDA) {
-        SCLogError(SC_ERR_B2G_CUDA_ERROR, "b2g cuda mpm sees mpm that is "
-                   "not b2g_cuda");
-        exit(EXIT_FAILURE);
-    }
-
-    if (SCCudaCtxPushCurrent(module_data->cuda_context) == -1) {
-        SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error pushing cuda context");
-    }
-
-    B2gCudaMpmThreadCtxData *tctx = SCMalloc(sizeof(B2gCudaMpmThreadCtxData));
-    if (unlikely(tctx == NULL)) {
-        SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
-        exit(EXIT_FAILURE);
-    }
-    memset(tctx, 0, sizeof(B2gCudaMpmThreadCtxData));
-
-    tctx->b2g_cuda_module_handle = module_data->handle;
-
-    /* Check configuration if streams and async operations can be used.
-     * If (CC == 1.0 || page_locked is disabled) then one stream is used,
-     * else more streams are used. When using the stream for async processing
-     * please check if memory has been allocated page-locked. */
-    profile = SCCudaHlGetProfile("mpm");
-
-    SCCudaDevices *devices = SCCudaGetDeviceList();
-    if (devices == NULL) {
-        SCLogError(SC_ERR_CUDA_ERROR, "CUDA environment not initialized.  "
-                   "Please initialized the CUDA environment by calling "
-                   "SCCudaInitCudaEnvironment() before making any calls "
-                   "to the CUDA API.");
-        goto error;
-    }
-    if (profile->device_id >= devices->count) {
-        SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Cuda device does not exist.");
-        goto error;
-    }
-    tctx->no_of_streams = profile->cuda_streams;
-
-    if (!devices->devices[profile->device_id]->attr_gpu_overlap) {
-        SCLogInfo("Cuda device does not support gpu overlap. Falling back to 1 stream.");
-        tctx->no_of_streams = 1;
-    }
-    if (!profile->page_locked) {
-        SCLogInfo("In order to use asynchronous operations you need to enable "
-                  "page-locked memory in suricata.yaml.");
-        tctx->no_of_streams = 1;
-    }
-
-    /* Initialize resources for the streams */
-    tctx->stream_data = SCMalloc(tctx->no_of_streams * sizeof(B2gCudaMpmStreamData));
-    if (tctx->stream_data == NULL) {
-        SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory.");
-        exit(EXIT_FAILURE);
-    }
-    memset(tctx->stream_data, 0, tctx->no_of_streams * sizeof(B2gCudaMpmStreamData));
-
-    if (SCCudaHlGetCudaContext(&tctx->b2g_cuda_context, "mpm", module_data->handle) == -1) {
-        SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error getting a cuda context");
-        goto error;
-    }
-
-    /* Initialize stream data */
-    if (B2gCudaMpmStreamDataInit(tctx, profile) == -1) {
-        SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error initializing Cuda device data.");
-        goto error;
-    }
-
-    /* Setup queue to hold packet buffers for stream processing */
-    char *streamq_name = "b2g_cuda_mpm_streamq";
-    tctx->tmq_streamq = TmqGetQueueByName(streamq_name);
-    if (tctx->tmq_streamq == NULL) {
-        tctx->tmq_streamq = TmqCreateQueue(streamq_name);
-        if (tctx->tmq_streamq == NULL) {
-            goto error;
-        }
-    }
-    tctx->tmq_streamq->q_type = 1;
-    tctx->tmq_streamq->reader_cnt++;
-    tctx->tmq_streamq->writer_cnt++;
-
-    *data = tctx;
-
-    return TM_ECODE_OK;
-
- error:
-    return TM_ECODE_FAILED;
-}
-
-/**
- * \brief The Cuda MPM B2G module's thread de-init function.
- *
- * \param tv   Pointer to the ThreadVars which has invoked this function.
- * \param data Pointer to the slot data if anything had been attached in
- *             the thread init function.
- *
- * \retval TM_ECODE_OK Always.
- */
-TmEcode B2gCudaMpmDispThreadDeInit(ThreadVars *tv, void *data)
-{
-    B2gCudaMpmThreadCtxData *tctx = data;
-    MpmCudaConf *profile = NULL;
-
-    if (tctx == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENTS, "Invalid arguments.  data NULL\n");
-        return TM_ECODE_OK;
-    }
-
-    if (PatternMatchDefaultMatcher() != MPM_B2G_CUDA)
-        return TM_ECODE_OK;
-
-    CUcontext dummy_context;
-    SCCudaHlModuleData *module_data = SCCudaHlGetModuleData(tctx->b2g_cuda_module_handle);
-    if (module_data == NULL) {
-        SCLogError(SC_ERR_B2G_CUDA_ERROR, "How did we even fail to get a "
-                   "module_data if we are having a module_handle");
-        goto error;
-    }
-    if (SCCudaHlGetCudaContext(&dummy_context, "mpm", tctx->b2g_cuda_module_handle) == -1) {
-        SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error getting a cuda context for the "
-                   "module %s", module_data->name);
-        goto error;
-    }
-    SCCudaCtxPushCurrent(dummy_context);
-
-    profile = SCCudaHlGetProfile("mpm");
-    if (B2gCudaMpmStreamDataDeInit(tctx, profile) == -1) {
-        SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error deallocating Cuda device data.");
-        goto error;
-    }
-
-    SCFree(tctx);
-
-    if (SCCudaCtxPopCurrent(NULL) == -1) {
-        SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error popping cuda context");
-    }
-
-    return TM_ECODE_OK;
-
- error:
-    return TM_ECODE_FAILED;
-}
-
-
-/*
- * \brief Process a packet buffer on the GPU.
- *
- * \param pb   Pointer to the packet buffer.
- * \param tctx Pointer to the thread context which contains the Cuda context, kernel module,
- *             streams, CPU+GPU memory etc.
- * \param s    ID of the stream to be used.
- *
- * \retval     0 on succes, -1 on failure
- */
-static int B2gCudaMpmProcessBuffer(SCCudaPBPacketsBuffer *pb, B2gCudaMpmThreadCtxData *tctx, uint16_t s)
-{
-    B2gCudaMpmStreamData *sd = NULL;
-
-    if (pb == NULL || tctx == NULL || s >= tctx->no_of_streams) {
-        SCLogError(SC_ERR_INVALID_ARGUMENT, "Either pb == NULL || tctx == NULL"
-                   "or the CUstream does not exist");
-        goto error;
-    }
-
-    SCLogDebug("Process packet buffer %p in stream %"PRIu16, pb, s);
-
-    sd = &tctx->stream_data[s];
-
-    if (sd->cuda_stream != NULL) {
-        SCLogDebug("B2g Cuda: Asynchronous processing enabled.");
-        sd->cuda_async = 1;
-    }
-
-    /* H->D */
-    if (sd->cuda_async) {
-        if (SCCudaMemcpyHtoDAsync(sd->cuda_packets_buffer,
-                                  pb->packets_buffer,
-                                  pb->packets_buffer_len,
-                                  sd->cuda_stream) == -1) {
-            goto error;
-        }
-
-        if (SCCudaMemcpyHtoDAsync(sd->cuda_packets_offset_buffer,
-                                  pb->packets_offset_buffer,
-                                  sizeof(uint32_t) * pb->nop_in_buffer,
-                                  sd->cuda_stream) == -1) {
-            goto error;
-        }
-
-        if (SCCudaMemcpyHtoDAsync(sd->cuda_packets_payload_offset_buffer,
-                                  pb->packets_payload_offset_buffer,
-                                  sizeof(uint32_t) * pb->nop_in_buffer,
-                                  sd->cuda_stream) == -1) {
-            goto error;
-        }
-    } else {
-        if (SCCudaMemcpyHtoD(sd->cuda_packets_buffer,
-                             pb->packets_buffer,
-                             pb->packets_buffer_len) == -1) {
-            goto error;
-        }
-
-        if (SCCudaMemcpyHtoD(sd->cuda_packets_offset_buffer,
-                             pb->packets_offset_buffer,
-                             sizeof(uint32_t) * pb->nop_in_buffer) == -1) {
-            goto error;
-        }
-
-        if (SCCudaMemcpyHtoD(sd->cuda_packets_payload_offset_buffer,
-                             pb->packets_payload_offset_buffer,
-                             sizeof(uint32_t) * pb->nop_in_buffer) == -1) {
-            goto error;
-        }
-    }
-
-    if (SCCudaParamSeti(sd->b2g_cuda_search_kernel,
-                        sd->b2g_cuda_search_kernel_arg4_offset,
-                        pb->nop_in_buffer) == -1) {
-        goto error;
-    }
-
-    /* Kernel:
-     * the no of threads per block has already been set to 32
-     * \todo if we are very sure we are allocating a multiple of block_size
-     * buffer_threshold, then we can remove this + 1 here below */
-    int no_of_cuda_blocks = (pb->nop_in_buffer / 32) + 1;
-    if (sd->cuda_async) {
-        if (SCCudaLaunchGridAsync(sd->b2g_cuda_search_kernel,
-                                  no_of_cuda_blocks,
-                                  1,
-                                  sd->cuda_stream) == -1) {
-            goto error;
-        }
-    } else {
-        if (SCCudaLaunchGrid(sd->b2g_cuda_search_kernel,
-                             no_of_cuda_blocks,
-                             1) == -1) {
-            goto error;
-        }
-    }
-
-    /* D->H */
-    if (sd->cuda_async) {
-        if (SCCudaMemcpyDtoHAsync(sd->results_buffer,
-                                  sd->cuda_results_buffer,
-                                  sizeof(uint16_t) *
-                                   (pb->nop_in_buffer + pb->packets_total_payload_len),
-                                  sd->cuda_stream) == -1) {
-            goto error;
-        }
-    } else {
-        if (SCCudaMemcpyDtoH(sd->results_buffer,
-                             sd->cuda_results_buffer,
-                             sizeof(uint16_t) *
-                              (pb->nop_in_buffer + pb->packets_total_payload_len)) == -1) {
-            goto error;
-        }
-    }
-
-    return 0;
-
- error:
-    SCCudaCtxSynchronize();
-    sd->cuda_async = 0;
-
-    return -1;
-}
-
-/**
- * \brief The dispatcher function for the cuda mpm.  Takes a packet, feeds
- *        it to the gpu and informs the calling client when it has the
- *        results ready.
- *
- * \param tv   We don't need this.
- * \param incoming_buffer Pointer to the Packet which contains all the relevant data,
- *             like the bufffer, buflen, the contexts.
- * \param data Pointer to the slot data if anything had been attached in
- *             the thread init function.
- * \param buffer_dq Pointer to a data queue that can contain additional packet buffers
- *             that should be processed in other CUstreams (if enabled). The dispatcher
- *             function will dequeue all buffers that have been processed. The queue will
- *             not be changed if CUstreams are disabled.
- * \param post_pq We don't need this.
- *
- * \retval TM_ECODE_OK Always.
- */
-TmEcode B2gCudaMpmDispatcher(ThreadVars *tv, Packet *incoming_buffer,
-                             void *data, PacketQueue *buffer_dq, PacketQueue *post_pq)
-{
-    SCCudaPBPacketsBuffer *pb = (SCCudaPBPacketsBuffer *)incoming_buffer;
-    B2gCudaMpmThreadCtxData *tctx = data;
-
-    SCDQDataQueue *in_dq = (SCDQDataQueue *)buffer_dq;
-    SCDQDataQueue *out_dq = &data_queues[tctx->tmq_streamq->id];
-    SCDQGenericQData *q_ptr = NULL;
-    SCCudaPBPacketsBuffer *pb_in_queue = NULL;
-    uint8_t curr_stream = 0;
-
-    uint32_t i = 0;
-
-    SCLogDebug("Running the B2g CUDA mpm dispatcher");
-
-    if (pb == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENTS, "Invalid argument.  pb is NULL!!");
-        return TM_ECODE_OK;
-    }
-
-    /* Start processing the incoming_buffer */
-    if (B2gCudaMpmProcessBuffer(pb, tctx, curr_stream) == -1) {
-        goto error;
-    }
-
-    /* Check if there are additional buffers in in_dq */
-    while (in_dq != NULL && ++curr_stream < tctx->no_of_streams) {
-        SCMutexLock(&in_dq->mutex_q);
-        pb_in_queue = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(in_dq);
-        SCMutexUnlock(&in_dq->mutex_q);
-        if (pb_in_queue == NULL) {
-            break;
-        }
-
-        /* Add buffer to out_dq and start processing */
-        SCDQDataEnqueue(out_dq, (SCDQGenericQData *)pb_in_queue);
-        if (B2gCudaMpmProcessBuffer(pb_in_queue, tctx, curr_stream) == -1) {
-            goto error;
-        }
-    }
-
-    /* Sync first packet buffer */
-    curr_stream = 0;
-    if (tctx->stream_data[curr_stream].cuda_async) {
-        SCLogDebug("Synchronize PB %p in Cuda stream %"PRIu16, pb, curr_stream);
-        if (SCCudaStreamSynchronize(tctx->stream_data[curr_stream].cuda_stream) == -1) {
-            SCLogError(SC_ERR_CUDA_ERROR, "Failed to synchronize Cuda stream");
-            goto error;
-        }
-        tctx->stream_data[curr_stream].cuda_async = 0;
-    }
-    i = 0;
-    for (i = 0; i < pb->nop_in_buffer; i++) {
-        memcpy(pb->packets_address_buffer[i]->mpm_offsets,
-               (tctx->stream_data[curr_stream].results_buffer + i +
-                pb->packets_payload_offset_buffer[i]),
-               (pb->packets_address_buffer[i]->payload_len + 1) * sizeof(uint16_t));
-        SCMutexLock(&pb->packets_address_buffer[i]->cuda_mutex);
-        pb->packets_address_buffer[i]->cuda_done = 1;
-        SCMutexUnlock(&pb->packets_address_buffer[i]->cuda_mutex);
-        SCCondSignal(&pb->packets_address_buffer[i]->cuda_cond);
-    }
-
-    /* Sync all other buffers in out_dq (if any) */
-    q_ptr = out_dq->bot;
-    while (q_ptr != NULL && ++curr_stream < tctx->no_of_streams) {
-        pb_in_queue = (SCCudaPBPacketsBuffer *)q_ptr;
-
-        if (tctx->stream_data[curr_stream].cuda_async) {
-            SCLogDebug("Synchronize PB %p in Cuda stream %"PRIu16, pb_in_queue, curr_stream);
-            if (SCCudaStreamSynchronize(tctx->stream_data[curr_stream].cuda_stream) == -1) {
-                SCLogError(SC_ERR_CUDA_ERROR, "Failed to synchronize Cuda stream");
-                goto error;
-            }
-            tctx->stream_data[curr_stream].cuda_async = 0;
-        }
-        i = 0;
-        for (i = 0; i < pb_in_queue->nop_in_buffer; i++) {
-            memcpy(pb_in_queue->packets_address_buffer[i]->mpm_offsets,
-                   (tctx->stream_data[curr_stream].results_buffer + i +
-                    pb_in_queue->packets_payload_offset_buffer[i]),
-                   (pb_in_queue->packets_address_buffer[i]->payload_len + 1) * sizeof(uint16_t));
-            SCMutexLock(&pb_in_queue->packets_address_buffer[i]->cuda_mutex);
-            pb_in_queue->packets_address_buffer[i]->cuda_done = 1;
-            SCMutexUnlock(&pb_in_queue->packets_address_buffer[i]->cuda_mutex);
-            SCCondSignal(&pb_in_queue->packets_address_buffer[i]->cuda_cond);
-        }
-
-        q_ptr = q_ptr->prev;
-    }
-
-    SCLogDebug("B2g Cuda mpm dispatcher returning");
-
-    return TM_ECODE_OK;
-
- error:
-    if (SCCudaCtxSynchronize() == -1) {
-        SCLogError(SC_ERR_CUDA_ERROR, "Failed to synchronize context.");
-    }
-
-    curr_stream = 0;
-    tctx->stream_data[curr_stream].cuda_async = 0;
-    for (i = 0; i < pb->nop_in_buffer; i++) {
-        SCMutexLock(&pb->packets_address_buffer[i]->cuda_mutex);
-        pb->packets_address_buffer[i]->cuda_done = 1;
-        SCMutexUnlock(&pb->packets_address_buffer[i]->cuda_mutex);
-        SCCondSignal(&pb->packets_address_buffer[i]->cuda_cond);
-    }
-
-    q_ptr = out_dq->bot;
-    while (q_ptr != NULL && ++curr_stream < tctx->no_of_streams) {
-        pb_in_queue = (SCCudaPBPacketsBuffer *)q_ptr;
-        tctx->stream_data[curr_stream].cuda_async = 0;
-
-        for (i = 0; i < pb_in_queue->nop_in_buffer; i++) {
-            SCMutexLock(&pb_in_queue->packets_address_buffer[i]->cuda_mutex);
-            pb_in_queue->packets_address_buffer[i]->cuda_done = 1;
-            SCMutexUnlock(&pb_in_queue->packets_address_buffer[i]->cuda_mutex);
-            SCCondSignal(&pb_in_queue->packets_address_buffer[i]->cuda_cond);
-        }
-
-        q_ptr = q_ptr->prev;
-    }
-
-    SCLogError(SC_ERR_B2G_CUDA_ERROR, "B2g Cuda mpm dispatcher returning with error");
-
-    return TM_ECODE_OK;
-}
-
-/**
- * \brief The post processing of cuda mpm b2g results for a packet
- *        is done here.  Will be used by the detection thread.  We basically
- *        obtain the match offsets from the cuda mpm search and carry out
- *        further matches on those offsets.  Also if the results are not
- *        read for a packet, we wait on the conditional, which will then
- *        be signalled by the cuda mpm dispatcher thread, once the results
- *        for the packet are ready.
- *
- * \param p              Pointer to the packet whose mpm cuda results are
- *                       to be further processed.
- * \param mpm_ctx        Pointer to the mpm context for this packet.
- * \param mpm_thread_ctx Pointer to the mpm thread context.
- * \param pmq            Pointer to the patter matcher queue.
- *
- * \retval matches Holds the no of matches.
- */
-int B2gCudaResultsPostProcessing(Packet *p, MpmCtx *mpm_ctx,
-                                 MpmThreadCtx *mpm_thread_ctx,
-                                 PatternMatcherQueue *pmq)
-{
-    B2gCudaCtx *ctx = mpm_ctx->ctx;
-
-    while (p->cuda_done == 0) {
-        SCMutexLock(&p->cuda_mutex);
-        if (p->cuda_done == 1) {
-            SCMutexUnlock(&p->cuda_mutex);
-            break;
-        } else {
-            SCCondWait(&p->cuda_cond, &p->cuda_mutex);
-            SCMutexUnlock(&p->cuda_mutex);
-        }
-    }
-
-    /* reset this flag for the packet */
-    p->cuda_done = 0;
-
-    uint16_t *no_of_matches = p->mpm_offsets;
-    uint16_t *host_offsets = p->mpm_offsets + 1;
-    int i = 0, h = 0;
-    uint8_t *buf = p->payload;
-    uint16_t buflen = p->payload_len;
-    int matches = 0;
-    for (i = 0; i < no_of_matches[0]; i++) {
-        h = B2G_CUDA_HASH16(u8_tolower(buf[host_offsets[i] + ctx->m - 2]),
-                            u8_tolower(buf[host_offsets[i] + ctx->m - 1]));
-
-        if (ctx->bloom[h] != NULL) {
-            COUNT(tctx->stat_pminlen_calls++);
-            COUNT(tctx->stat_pminlen_total+=ctx->pminlen[h]);
-
-            if ((buflen - host_offsets[i]) < ctx->pminlen[h]) {
-                continue;
-            } else {
-                COUNT(tctx->stat_bloom_calls++);
-
-                if (BloomFilterTest(ctx->bloom[h], buf + host_offsets[i], ctx->pminlen[h]) == 0) {
-                    COUNT(tctx->stat_bloom_hits++);
-
-                    continue;
-                }
-            }
-        }
-
-        B2gCudaHashItem *hi = ctx->hash[h], *thi;
-        for (thi = hi; thi != NULL; thi = thi->nxt) {
-            COUNT(tctx->stat_d0_hashloop++);
-            B2gCudaPattern *p = ctx->parray[thi->idx];
-
-            if (p->flags & MPM_PATTERN_FLAG_NOCASE) {
-                if ((buflen - host_offsets[i]) < p->len) {
-                    continue;
-                }
-
-                if (memcmp_lowercase(p->ci, buf + host_offsets[i], p->len) == 0) {
-                    COUNT(tctx->stat_loop_match++);
-
-                    matches += MpmVerifyMatch(mpm_thread_ctx, pmq, p->id);
-                } else {
-                    COUNT(tctx->stat_loop_no_match++);
-                }
-            } else {
-                if (buflen - host_offsets[i] < p->len)
-                    continue;
-
-                if (memcmp(p->cs, buf +  host_offsets[i], p->len) == 0) {
-                    COUNT(tctx->stat_loop_match++);
-
-                    matches += MpmVerifyMatch(mpm_thread_ctx, pmq, p->id);
-                } else {
-                    COUNT(tctx->stat_loop_no_match++);
-                }
-            }
-        }
-    }
-
-    return matches;
-}
-
-/**
- * \brief Registers the Cuda B2G MPM Module.
- */
-void TmModuleCudaMpmB2gRegister(void)
-{
-    tmm_modules[TMM_CUDA_MPM_B2G].name = "Cuda_Mpm_B2g";
-    tmm_modules[TMM_CUDA_MPM_B2G].ThreadInit = B2gCudaMpmDispThreadInit;
-    tmm_modules[TMM_CUDA_MPM_B2G].Func = B2gCudaMpmDispatcher;
-    tmm_modules[TMM_CUDA_MPM_B2G].ThreadExitPrintStats = NULL;
-    tmm_modules[TMM_CUDA_MPM_B2G].ThreadDeinit = B2gCudaMpmDispThreadDeInit;
-    tmm_modules[TMM_CUDA_MPM_B2G].RegisterTests = NULL;
-}
-
-/***************************Code_Specific_To_Mpm_B2g***************************/
-
-void *CudaMpmB2gThreadsSlot1(void *td)
-{
-    ThreadVars *tv = (ThreadVars *)td;
-    TmSlot *s = (TmSlot *)tv->tm_slots;
-    SCCudaPBPacketsBuffer *data = NULL;
-    B2gCudaMpmThreadCtxData *tctx = NULL;
-    char run = 1;
-    TmEcode r = TM_ECODE_OK;
-
-    /* Set the thread name */
-    SCSetThreadName(tv->name);
-
-    if (tv->thread_setup_flags != 0)
-        TmThreadSetupOptions(tv);
-
-    SCLogDebug("%s starting", tv->name);
-
-    if (s->SlotThreadInit != NULL) {
-        void *slot_data = NULL;
-        r = s->SlotThreadInit(tv, s->slot_initdata, &slot_data);
-        if (r != TM_ECODE_OK) {
-            EngineKill();
-
-            TmThreadsSetFlag(tv, THV_CLOSED | THV_RUNNING_DONE);
-            pthread_exit((void *) -1);
-        }
-        SC_ATOMIC_SET(s->slot_data, slot_data);
-    }
-    memset(&s->slot_pre_pq, 0, sizeof(PacketQueue));
-    memset(&s->slot_post_pq, 0, sizeof(PacketQueue));
-
-    tctx = (B2gCudaMpmThreadCtxData *)SC_ATOMIC_GET(s->slot_data);
-
-    TmThreadsSetFlag(tv, THV_INIT_DONE);
-    while(run) {
-        TmThreadTestThreadUnPaused(tv);
-
-        /* input data */
-        data = (SCCudaPBPacketsBuffer *)TmqhInputSimpleOnQ(&data_queues[tv->inq->id]);
-
-        if (data == NULL) {
-            //printf("%s: TmThreadsSlot1: p == NULL\n", tv->name);
-        } else {
-            /* We pass the current packet buffer (1) to the dispatcher function. The data queue
-             * is checked by the dispatcher thread if there is another packet buffer (2) ready.
-             * If the MPM is configured to use multiple CUstreams, buffer (1) and buffer (2) are
-             * processed in parallel using multiple streams; In this case
-             * data_queues[tctx->tmq_streamq->id] will contain the results of packet buffer (2). */
-            TmSlotFunc SlotFunc = SC_ATOMIC_GET(s->SlotFunc);
-            r = SlotFunc(tv,
-                              (Packet *)data,
-                              (void *)tctx,
-                              (PacketQueue *)&data_queues[tv->inq->id],
-                              NULL);
-            /* handle error */
-
-            /* output the packet buffer (1) */
-            TmqhOutputSimpleOnQ(&data_queues[tv->outq->id], (SCDQGenericQData *)data);
-
-            /* output additional packet buffers (2) */
-            while (data != NULL) {
-                data = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(&data_queues[tctx->tmq_streamq->id]);
-                if (data == NULL) {
-                    break;
-                }
-                TmqhOutputSimpleOnQ(&data_queues[tv->outq->id], (SCDQGenericQData *)data);
-            }
-        }
-
-        if (TmThreadsCheckFlag(tv, THV_KILL)) {
-            run = 0;
-        }
-    }
-
-    TmThreadsSetFlag(tv, THV_RUNNING_DONE);
-    TmThreadWaitForFlag(tv, THV_DEINIT);
-
-    if (s->SlotThreadExitPrintStats != NULL) {
-        s->SlotThreadExitPrintStats(tv, SC_ATOMIC_GET(s->slot_data));
-    }
-
-    if (s->SlotThreadDeinit != NULL) {
-        r = s->SlotThreadDeinit(tv, SC_ATOMIC_GET(s->slot_data));
-        if (r != TM_ECODE_OK) {
-            TmThreadsSetFlag(tv, THV_CLOSED);
-            pthread_exit((void *) -1);
-        }
-    }
-
-    SCLogDebug("%s ending", tv->name);
-    TmThreadsSetFlag(tv, THV_CLOSED);
-    pthread_exit((void *) 0);
-}
-
-int B2gCudaStartDispatcherThreadRC(const char *name)
-{
-    SCCudaHlModuleData *data = NULL;
-    TmModule *tm_module = NULL;
-
-    if (name == NULL) {
-        SCLogError(SC_ERR_INVALID_ARGUMENTS, "Error invalid arguments.  "
-                   "name NULL");
-        return -1;
-    }
-
-    if (tv_CMB2_RC != NULL) {
-        SCLogError(SC_ERR_TM_THREADS_ERROR, "We already have this thread "
-                   "running from b2g-cuda");
-        return 0;
-    }
-
-    data = SCCudaHlGetModuleData(SCCudaHlGetModuleHandle(name));
-    if (data == NULL) {
-        SCLogDebug("Module not registered.  To avail the benefits of this "
-                   "registration facility, first register a module using "
-                   "context using SCCudaHlRegisterModule(), after which you "
-                   "can call this function");
-        return -1;
-    }
-
-    /* create the threads */
-    tv_CMB2_RC = TmThreadCreate("Cuda_Mpm_B2g_RC",
-                                "cuda_batcher_mpm_outqueue", "simple",
-                                "cuda_batcher_mpm_inqueue", "simple",
-                                "custom", CudaMpmB2gThreadsSlot1, 0);
-    if (tv_CMB2_RC == NULL) {
-        SCLogError(SC_ERR_TM_THREADS_ERROR, "ERROR: TmThreadsCreate failed");
-        exit(EXIT_FAILURE);
-    }
-    tv_CMB2_RC->type = TVT_PPT;
-    tv_CMB2_RC->inq->q_type = 1;
-    tv_CMB2_RC->outq->q_type = 1;
-
-    tm_module = TmModuleGetByName("Cuda_Mpm_B2g");
-    if (tm_module == NULL) {
-        SCLogError(SC_ERR_TM_MODULES_ERROR,
-                   "ERROR: TmModuleGetByName failed for Cuda_Mpm_B2g_RC");
-        exit(EXIT_FAILURE);
-    }
-    TmSlotSetFuncAppend(tv_CMB2_RC, tm_module, data);
-
-    if (TmThreadSpawn(tv_CMB2_RC) != TM_ECODE_OK) {
-        SCLogError(SC_ERR_TM_THREADS_ERROR, "ERROR: TmThreadSpawn failed");
-        exit(EXIT_FAILURE);
-    }
-
-    TmThreadContinue(tv_CMB2_RC);
-
-    return 0;
-}
-
-/**
- * \brief Hacks for the tests.  While running the tests, we sometimes need to
- *        kill the threads to make them pop the cuda contexts.  We don't need
- *        these under normal running.
- */
-void B2gCudaKillDispatcherThreadRC(void)
-{
-    if (tv_CMB2_RC == NULL)
-        return;
-
-    TmThreadKillThread(tv_CMB2_RC);
-    TmThreadRemove(tv_CMB2_RC, tv_CMB2_RC->type);
-    SCFree(tv_CMB2_RC);
-    tv_CMB2_RC = NULL;
-
-    return;
-}
-
-/*********************************Unittests************************************/
-
-#ifdef UNITTESTS
-
-
-static int B2gCudaTest01(void)
-{
-    Packet *p = NULL;
-    MpmCtx mpm_ctx;
-    MpmThreadCtx mpm_thread_ctx;
-    B2gCudaCtx *ctx = NULL;
-    int result = 0;
-    int module_handle = SCCudaHlRegisterModule("B2G_CUDA_TEST");
-    SCCudaHlModuleData *module_data = SCCudaHlGetModuleData(module_handle);
-    SCCudaPBPacketsBuffer *pb = NULL;
-
-    /* get the cuda context and push it */
-    CUcontext dummy_context;
-    if (SCCudaHlGetCudaContext(&dummy_context, "mpm", module_handle) == -1) {
-        SCLogError(SC_ERR_B2G_CUDA_ERROR, "Error getting a cuda context for the "
-                   "module SC_RULES_CONTENT_B2G_CUDA");
-    }
-    SCCudaCtxPushCurrent(dummy_context);
-
-    memset(&mpm_ctx, 0, sizeof(MpmCtx));
-    B2gCudaInitCtx(&mpm_ctx, module_handle);
-    /* pop the context before we make further calls to the mpm cuda dispatcher */
-    SCCudaCtxPopCurrent(NULL);
-
-    B2gCudaMpmThreadCtxData *tctx = NULL;
-    B2gCudaMpmDispThreadInit(NULL, module_data, (void *)&tctx);
-
-    ctx = mpm_ctx.ctx;
-
-    if (tctx->b2g_cuda_context == 0)
-        goto end;
-    if (tctx->stream_data[0].b2g_cuda_cumodule == 0)
-        goto end;
-    if (tctx->stream_data[0].b2g_cuda_search_kernel == 0)
-        goto end;
-
-    if (B2gCudaAddPatternCS(&mpm_ctx, (uint8_t *)"one", 3, 0, 0, 1, 1, 0) == -1)
-        goto end;
-
-    if (B2gCudaPreparePatterns(&mpm_ctx) == -1)
-        goto end;
-    B2gCudaThreadInitCtx(&mpm_ctx, &mpm_thread_ctx, 1 /* 1 pattern */);
-
-    result = 1;
-
-    SCCudaPBSetProfile("mpm");
-    pb = SCCudaPBAllocSCCudaPBPacketsBuffer();
-    SCCudaPBPacketDataForGPU *curr_packet = (SCCudaPBPacketDataForGPU *)pb->packets_buffer;
-
-    char *string = "tone_one_one_one";
-    curr_packet->m = ctx->m;
-    curr_packet->table = ctx->cuda_B2G;
-    curr_packet->payload_len = strlen(string);
-    memcpy(curr_packet->payload, string, strlen(string));
-
-    pb->nop_in_buffer = 1;
-    pb->packets_buffer_len = sizeof(SCCudaPBPacketDataForGPUNonPayload) + strlen(string);
-    pb->packets_total_payload_len = strlen(string);
-    pb->packets_offset_buffer[0] = 0;
-    pb->packets_payload_offset_buffer[0] = 0;
-
-    p = PacketGetFromAlloc();
-    if (unlikely(p == NULL))
-        goto end;
-    pb->packets_address_buffer[0] = p;
-    p->payload_len = strlen(string);
-
-    B2gCudaMpmDispatcher(NULL, (Packet *)pb, tctx, NULL, NULL);
-
-    result &= (p->mpm_offsets[0] == 4);
-    result &= (p->mpm_offsets[1] == 1);
-    result &= (p->mpm_offsets[2] == 5);
-    result &= (p->mpm_offsets[3] == 9);
-    result &= (p->mpm_offsets[4] == 13);
-
- end:
-    SCCudaPBDeAllocSCCudaPBPacketsBuffer(pb);
-    B2gCudaMpmDispThreadDeInit(NULL, (void *)tctx);
-    B2gCudaDestroyCtx(&mpm_ctx);
-    B2gCudaThreadDestroyCtx(&mpm_ctx, &mpm_thread_ctx);
-    SCFree(p);
-    return result;
-}
-
-static int B2gCudaTest02(void)
-{
-    uint8_t raw_eth[] = {
-        0x00, 0x25, 0x00, 0x9e, 0xfa, 0xfe, 0x00, 0x02,
-        0xcf, 0x74, 0xfe, 0xe1, 0x08, 0x00, 0x45, 0x00,
-        0x01, 0xcc, 0xcb, 0x91, 0x00, 0x00, 0x34, 0x06,
-        0xdf, 0xa8, 0xd1, 0x55, 0xe3, 0x67, 0xc0, 0xa8,
-        0x64, 0x8c, 0x00, 0x50, 0xc0, 0xb7, 0xd1, 0x11,
-        0xed, 0x63, 0x81, 0xa9, 0x9a, 0x05, 0x80, 0x18,
-        0x00, 0x75, 0x0a, 0xdd, 0x00, 0x00, 0x01, 0x01,
-        0x08, 0x0a, 0x09, 0x8a, 0x06, 0xd0, 0x12, 0x21,
-        0x2a, 0x3b, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31,
-        0x2e, 0x31, 0x20, 0x33, 0x30, 0x32, 0x20, 0x46,
-        0x6f, 0x75, 0x6e, 0x64, 0x0d, 0x0a, 0x4c, 0x6f,
-        0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20,
-        0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
-        0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-        0x65, 0x2e, 0x65, 0x73, 0x2f, 0x0d, 0x0a, 0x43,
-        0x61, 0x63, 0x68, 0x65, 0x2d, 0x43, 0x6f, 0x6e,
-        0x74, 0x72, 0x6f, 0x6c, 0x3a, 0x20, 0x70, 0x72,
-        0x69, 0x76, 0x61, 0x74, 0x65, 0x0d, 0x0a, 0x43,
-        0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54,
-        0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78,
-        0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20,
-        0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d,
-        0x55, 0x54, 0x46, 0x2d, 0x38, 0x0d, 0x0a, 0x44,
-        0x61, 0x74, 0x65, 0x3a, 0x20, 0x4d, 0x6f, 0x6e,
-        0x2c, 0x20, 0x31, 0x34, 0x20, 0x53, 0x65, 0x70,
-        0x20, 0x32, 0x30, 0x30, 0x39, 0x20, 0x30, 0x38,
-        0x3a, 0x34, 0x38, 0x3a, 0x33, 0x31, 0x20, 0x47,
-        0x4d, 0x54, 0x0d, 0x0a, 0x53, 0x65, 0x72, 0x76,
-        0x65, 0x72, 0x3a, 0x20, 0x67, 0x77, 0x73, 0x0d,
-        0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-        0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a,
-        0x20, 0x32, 0x31, 0x38, 0x0d, 0x0a, 0x0d, 0x0a,
-        0x3c, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x3c, 0x48,
-        0x45, 0x41, 0x44, 0x3e, 0x3c, 0x6d, 0x65, 0x74,
-        0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65,
-        0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, 0x6f,
-        0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79,
-        0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74,
-        0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78,
-        0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x63,
-        0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75,
-        0x74, 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x0a, 0x3c,
-        0x54, 0x49, 0x54, 0x4c, 0x45, 0x3e, 0x33, 0x30,
-        0x32, 0x20, 0x4d, 0x6f, 0x76, 0x65, 0x64, 0x3c,
-        0x2f, 0x54, 0x49, 0x54, 0x4c, 0x45, 0x3e, 0x3c,
-        0x2f, 0x48, 0x45, 0x41, 0x44, 0x3e, 0x3c, 0x42,
-        0x4f, 0x44, 0x59, 0x3e, 0x0a, 0x3c, 0x48, 0x31,
-        0x3e, 0x33, 0x30, 0x32, 0x20, 0x4d, 0x6f, 0x76,
-        0x65, 0x64, 0x3c, 0x2f, 0x48, 0x31, 0x3e, 0x0a,
-        0x54, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75,
-        0x6d, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x61, 0x73,
-        0x20, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x0a, 0x3c,
-        0x41, 0x20, 0x48, 0x52, 0x45, 0x46, 0x3d, 0x22,
-        0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
-        0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-        0x65, 0x2e, 0x65, 0x73, 0x2f, 0x22, 0x3e, 0x68,
-        0x65, 0x72, 0x65, 0x3c, 0x2f, 0x41, 0x3e, 0x2e,
-        0x0d, 0x0a, 0x3c, 0x2f, 0x42, 0x4f, 0x44, 0x59,
-        0x3e, 0x3c, 0x2f, 0x48, 0x54, 0x4d, 0x4c, 0x3e,
-        0x0d, 0x0a };
-
-    int result = 0;
-    const char *strings[10] = {
-        "test_test_one",
-        "test_two_test",
-        "test_three_test",
-        "test_four_test",
-        "test_five_test",
-        "test_six_test",
-        "test_seven_test",
-        "test_eight_test",
-        "test_nine_test",
-        "test_ten_test"};
-    /* don't shoot me for hardcoding the results.  We will change this in
-     * sometime, by running a separate mpm on the cpu, and then hold
-     * the results in this temp buffer */
-    int results[10][2] = { {0, 5},
-                           {0, 9},
-                           {0, 11},
-                           {0, 10},
-                           {0, 10},
-                           {0, 9},
-                           {0, 11},
-                           {0, 11},
-                           {0, 10},
-                           {0, 9} };
-    Packet *p[10];
-    SCCudaPBThreadCtx *pb_tctx = NULL;
-
-    DecodeThreadVars dtv;
-    ThreadVars tv;
-    DetectEngineCtx *de_ctx = NULL;
-
-    SCCudaPBPacketsBuffer *pb = NULL;
-    SCDQDataQueue *dq = NULL;
-
-    char *inq_name = "cuda_batcher_mpm_inqueue";
-    char *outq_name = "cuda_batcher_mpm_outqueue";
-
-    Tmq *tmq_outq = NULL;
-    Tmq *tmq_inq = NULL;
-
-    uint32_t i = 0, j = 0;
-
-    uint8_t no_of_pkts = 10;
-
-    memset(&dtv, 0, sizeof(DecodeThreadVars));
-    memset(&tv, 0, sizeof(ThreadVars));
-
-    FlowInitConfig(FLOW_QUIET);
-
-    memset(p, 0, sizeof(p));
-    for (i = 0; i < no_of_pkts; i++) {
-        p[i] = PacketGetFromAlloc();
-        if (p[i] == NULL) {
-            printf("error allocating memory\n");
-            exit(EXIT_FAILURE);
-        }
-        DecodeEthernet(&tv, &dtv, p[i], raw_eth, sizeof(raw_eth), NULL);
-    }
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL) {
-        goto end;
-    }
-
-    de_ctx->mpm_matcher = MPM_B2G_CUDA;
-    de_ctx->flags |= DE_QUIET;
-
-    de_ctx->sig_list = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                               "content:\"test\"; sid:1;)");
-    if (de_ctx->sig_list == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    SigGroupBuild(de_ctx);
-
-    SCCudaPBSetProfile("mpm");
-    SCCudaPBSetUpQueuesAndBuffers();
-
-    /* get the queues used by the batcher thread */
-    tmq_inq = TmqGetQueueByName(inq_name);
-    if (tmq_inq == NULL) {
-        printf("tmq_inq NULL\n");
-        goto end;
-    }
-    tmq_outq = TmqGetQueueByName(outq_name);
-    if (tmq_outq == NULL) {
-        printf("tmq_outq NULL\n");
-        goto end;
-    }
-
-    result = 1;
-
-    /* queue state before calling the thread init function */
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 10);
-
-    SCCudaPBRunningTests(1);
-    /* init the TM thread */
-    SCCudaPBThreadInit(&tv, de_ctx, (void *)&pb_tctx);
-    SCCudaPBSetBufferPacketThreshhold(no_of_pkts);
-
-    /* queue state after calling the thread init function */
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    pb = pb_tctx->curr_pb;
-
-    for (i = 0; i < no_of_pkts; i++) {
-        p[i]->payload = (uint8_t *)strings[i];
-        p[i]->payload_len = strlen(strings[i]);
-        SCCudaPBBatchPackets(NULL, p[i], pb_tctx, NULL, NULL);
-    }
-
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 1);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 8);
-
-    result &= (pb->nop_in_buffer == no_of_pkts);
-
-    int module_handle = SCCudaHlRegisterModule("SC_RULES_CONTENT_B2G_CUDA");
-    SCCudaHlModuleData *module_data = SCCudaHlGetModuleData(module_handle);
-
-    B2gCudaMpmThreadCtxData *b2g_tctx = NULL;
-    B2gCudaMpmDispThreadInit(NULL, module_data, (void *)&b2g_tctx);
-
-    if (b2g_tctx->b2g_cuda_context == 0 ||
-        b2g_tctx->stream_data[0].b2g_cuda_cumodule == 0 ||
-        b2g_tctx->stream_data[0].b2g_cuda_search_kernel == 0) {
-        result = 0;
-        goto end;
-    }
-
-    B2gCudaMpmDispatcher(NULL, (Packet *)pb, b2g_tctx, NULL, NULL);
-
-    for (i = 0; i < no_of_pkts; i++) {
-        for (j = 0; j < p[i]->mpm_offsets[0]; j++)
-            result &= (results[i][j] == p[i]->mpm_offsets[j + 1]);
-    }
-
- end:
-    for (i = 0; i < no_of_pkts; i++) {
-        SCFree(p[i]);
-    }
-    SCCudaPBCleanUpQueuesAndBuffers();
-    if (de_ctx != NULL) {
-        SigGroupCleanup(de_ctx);
-        SigCleanSignatures(de_ctx);
-        DetectEngineCtxFree(de_ctx);
-    }
-    SCCudaPBThreadDeInit(NULL, (void *)pb_tctx);
-    B2gCudaMpmDispThreadDeInit(NULL, (void *)b2g_tctx);
-
-    return result;
-}
-
-static int B2gCudaTest03(void)
-{
-    uint8_t raw_eth[] = {
-        0x00, 0x25, 0x00, 0x9e, 0xfa, 0xfe, 0x00, 0x02,
-        0xcf, 0x74, 0xfe, 0xe1, 0x08, 0x00, 0x45, 0x00,
-        0x01, 0xcc, 0xcb, 0x91, 0x00, 0x00, 0x34, 0x06,
-        0xdf, 0xa8, 0xd1, 0x55, 0xe3, 0x67, 0xc0, 0xa8,
-        0x64, 0x8c, 0x00, 0x50, 0xc0, 0xb7, 0xd1, 0x11,
-        0xed, 0x63, 0x81, 0xa9, 0x9a, 0x05, 0x80, 0x18,
-        0x00, 0x75, 0x0a, 0xdd, 0x00, 0x00, 0x01, 0x01,
-        0x08, 0x0a, 0x09, 0x8a, 0x06, 0xd0, 0x12, 0x21,
-        0x2a, 0x3b, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31,
-        0x2e, 0x31, 0x20, 0x33, 0x30, 0x32, 0x20, 0x46,
-        0x6f, 0x75, 0x6e, 0x64, 0x0d, 0x0a, 0x4c, 0x6f,
-        0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20,
-        0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
-        0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-        0x65, 0x2e, 0x65, 0x73, 0x2f, 0x0d, 0x0a, 0x43,
-        0x61, 0x63, 0x68, 0x65, 0x2d, 0x43, 0x6f, 0x6e,
-        0x74, 0x72, 0x6f, 0x6c, 0x3a, 0x20, 0x70, 0x72,
-        0x69, 0x76, 0x61, 0x74, 0x65, 0x0d, 0x0a, 0x43,
-        0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54,
-        0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78,
-        0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20,
-        0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d,
-        0x55, 0x54, 0x46, 0x2d, 0x38, 0x0d, 0x0a, 0x44,
-        0x61, 0x74, 0x65, 0x3a, 0x20, 0x4d, 0x6f, 0x6e,
-        0x2c, 0x20, 0x31, 0x34, 0x20, 0x53, 0x65, 0x70,
-        0x20, 0x32, 0x30, 0x30, 0x39, 0x20, 0x30, 0x38,
-        0x3a, 0x34, 0x38, 0x3a, 0x33, 0x31, 0x20, 0x47,
-        0x4d, 0x54, 0x0d, 0x0a, 0x53, 0x65, 0x72, 0x76,
-        0x65, 0x72, 0x3a, 0x20, 0x67, 0x77, 0x73, 0x0d,
-        0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-        0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a,
-        0x20, 0x32, 0x31, 0x38, 0x0d, 0x0a, 0x0d, 0x0a,
-        0x3c, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x3c, 0x48,
-        0x45, 0x41, 0x44, 0x3e, 0x3c, 0x6d, 0x65, 0x74,
-        0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65,
-        0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, 0x6f,
-        0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79,
-        0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74,
-        0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78,
-        0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x63,
-        0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75,
-        0x74, 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x0a, 0x3c,
-        0x54, 0x49, 0x54, 0x4c, 0x45, 0x3e, 0x33, 0x30,
-        0x32, 0x20, 0x4d, 0x6f, 0x76, 0x65, 0x64, 0x3c,
-        0x2f, 0x54, 0x49, 0x54, 0x4c, 0x45, 0x3e, 0x3c,
-        0x2f, 0x48, 0x45, 0x41, 0x44, 0x3e, 0x3c, 0x42,
-        0x4f, 0x44, 0x59, 0x3e, 0x0a, 0x3c, 0x48, 0x31,
-        0x3e, 0x33, 0x30, 0x32, 0x20, 0x4d, 0x6f, 0x76,
-        0x65, 0x64, 0x3c, 0x2f, 0x48, 0x31, 0x3e, 0x0a,
-        0x54, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75,
-        0x6d, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x61, 0x73,
-        0x20, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x0a, 0x3c,
-        0x41, 0x20, 0x48, 0x52, 0x45, 0x46, 0x3d, 0x22,
-        0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
-        0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-        0x65, 0x2e, 0x65, 0x73, 0x2f, 0x22, 0x3e, 0x68,
-        0x65, 0x72, 0x65, 0x3c, 0x2f, 0x41, 0x3e, 0x2e,
-        0x0d, 0x0a, 0x3c, 0x2f, 0x42, 0x4f, 0x44, 0x59,
-        0x3e, 0x3c, 0x2f, 0x48, 0x54, 0x4d, 0x4c, 0x3e,
-        0x0d, 0x0a };
-
-    int result = 0;
-    const char *strings[10] = {
-        "test_test_one",
-        "test_two_test",
-        "test_three_test",
-        "test_four_test",
-        "test_five_test",
-        "test_six_test",
-        "test_seven_test",
-        "test_eight_test",
-        "test_nine_test",
-        "test_ten_test"};
-    /* don't shoot me for hardcoding the results.  We will change this in
-     * sometime, by having run a separate mpm on the cpu and then hold
-     * the results in a temp buffer */
-    Packet *p[10];
-    SCCudaPBThreadCtx *pb_tctx = NULL;
-
-    DecodeThreadVars dtv;
-    ThreadVars tv;
-    DetectEngineCtx *de_ctx = NULL;
-    DetectEngineThreadCtx *det_ctx;
-    ThreadVars de_tv;
-
-    SCCudaPBPacketsBuffer *pb = NULL;
-    SCDQDataQueue *dq = NULL;
-
-    char *inq_name = "cuda_batcher_mpm_inqueue";
-    char *outq_name = "cuda_batcher_mpm_outqueue";
-
-    Tmq *tmq_outq = NULL;
-    Tmq *tmq_inq = NULL;
-
-    uint32_t i = 0, j = 0;
-
-    uint8_t no_of_pkts = 10;
-
-    Signature *sig = NULL;
-
-    memset(&dtv, 0, sizeof(DecodeThreadVars));
-    memset(&tv, 0, sizeof(ThreadVars));
-    memset(&de_tv, 0, sizeof(ThreadVars));
-
-    FlowInitConfig(FLOW_QUIET);
-    for (i = 0; i < no_of_pkts; i++) {
-        p[i] = PacketGetFromAlloc();
-        if (p[i] == NULL) {
-            printf("error allocating memory\n");
-            exit(EXIT_FAILURE);
-        }
-        DecodeEthernet(&tv, &dtv, p[i], raw_eth, sizeof(raw_eth), NULL);
-    }
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL) {
-        goto end;
-    }
-    de_ctx->mpm_matcher = MPM_B2G_CUDA;
-    de_ctx->flags |= DE_QUIET;
-
-    de_ctx->sig_list = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                               "content:\"test\"; sid:0;)");
-    if (de_ctx->sig_list == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = de_ctx->sig_list;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"one\"; sid:1;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"two\"; sid:2;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"three\"; sid:3;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"four\"; sid:4;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"five\"; sid:5;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"six\"; sid:6;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"seven\"; sid:7;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"eight\"; sid:8;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"nine\"; sid:9;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"ten\"; sid:10;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-
-    /* build the signatures */
-    SigGroupBuild(de_ctx);
-    DetectEngineThreadCtxInit(&de_tv, (void *)de_ctx, (void *)&det_ctx);
-
-    SCCudaPBSetProfile("mpm");
-    SCCudaPBSetUpQueuesAndBuffers();
-
-    /* get the queues used by the batcher thread */
-    tmq_inq = TmqGetQueueByName(inq_name);
-    if (tmq_inq == NULL) {
-        printf("tmq_inq NULL\n");
-        goto end;
-    }
-    tmq_outq = TmqGetQueueByName(outq_name);
-    if (tmq_outq == NULL) {
-        printf("tmq_outq NULL\n");
-        goto end;
-    }
-
-    result = 1;
-
-    /* queue state before calling the thread init function */
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 10);
-
-    SCCudaPBRunningTests(1);
-    /* init the TM thread */
-    SCCudaPBThreadInit(&tv, de_ctx, (void *)&pb_tctx);
-    SCCudaPBSetBufferPacketThreshhold(no_of_pkts);
-
-    /* queue state after calling the thread init function */
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    pb = pb_tctx->curr_pb;
-
-    for (i = 0; i < no_of_pkts; i++) {
-        p[i]->payload = (uint8_t *)strings[i];
-        p[i]->payload_len = strlen(strings[i]);
-        SCCudaPBBatchPackets(NULL, p[i], pb_tctx, NULL, NULL);
-    }
-
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 1);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 8);
-
-    result &= (pb->nop_in_buffer == no_of_pkts);
-
-    int module_handle = SCCudaHlRegisterModule("SC_RULES_CONTENT_B2G_CUDA");
-    SCCudaHlModuleData *module_data = SCCudaHlGetModuleData(module_handle);
-
-    B2gCudaMpmThreadCtxData *b2g_tctx = NULL;
-    B2gCudaMpmDispThreadInit(NULL, module_data, (void *)&b2g_tctx);
-
-    if (b2g_tctx->b2g_cuda_context == 0 ||
-        b2g_tctx->stream_data[0].b2g_cuda_cumodule == 0 ||
-        b2g_tctx->stream_data[0].b2g_cuda_search_kernel == 0) {
-        result = 0;
-        goto end;
-    }
-
-    B2gCudaMpmDispatcher(NULL, (Packet *)pb, b2g_tctx, NULL, NULL);
-
-    for (i = 0; i < 10; i++)
-        SigMatchSignatures(&de_tv, de_ctx, det_ctx, p[i]);
-
-    for (i = 0; i < 10; i++) {
-        if (!PacketAlertCheck(p[i], 0)) {
-            result = 0;
-            goto end;
-        }
-        for (j = 1; j <= 10; j++) {
-            if (j == i + 1) {
-                if (!PacketAlertCheck(p[i], j)) {
-                    result = 0;
-                    goto end;
-                }
-            } else {
-                if (PacketAlertCheck(p[i], j)) {
-                    result = 0;
-                    goto end;
-                }
-            }
-        }
-    }
-
- end:
-    for (i = 0; i < no_of_pkts; i++) {
-        SCFree(p[i]);
-    }
-    SCCudaPBCleanUpQueuesAndBuffers();
-    if (de_ctx) {
-        SigGroupCleanup(de_ctx);
-        SigCleanSignatures(de_ctx);
-        DetectEngineCtxFree(de_ctx);
-    }
-    SCCudaPBThreadDeInit(NULL, (void *)pb_tctx);
-    B2gCudaMpmDispThreadDeInit(NULL, (void *)b2g_tctx);
-
-    return result;
-}
-
-static int B2gCudaTest04(void)
-{
-    uint8_t raw_eth[] = {
-        0x00, 0x25, 0x00, 0x9e, 0xfa, 0xfe, 0x00, 0x02,
-        0xcf, 0x74, 0xfe, 0xe1, 0x08, 0x00, 0x45, 0x00,
-        0x01, 0xcc, 0xcb, 0x91, 0x00, 0x00, 0x34, 0x06,
-        0xdf, 0xa8, 0xd1, 0x55, 0xe3, 0x67, 0xc0, 0xa8,
-        0x64, 0x8c, 0x00, 0x50, 0xc0, 0xb7, 0xd1, 0x11,
-        0xed, 0x63, 0x81, 0xa9, 0x9a, 0x05, 0x80, 0x18,
-        0x00, 0x75, 0x0a, 0xdd, 0x00, 0x00, 0x01, 0x01,
-        0x08, 0x0a, 0x09, 0x8a, 0x06, 0xd0, 0x12, 0x21,
-        0x2a, 0x3b, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31,
-        0x2e, 0x31, 0x20, 0x33, 0x30, 0x32, 0x20, 0x46,
-        0x6f, 0x75, 0x6e, 0x64, 0x0d, 0x0a, 0x4c, 0x6f,
-        0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20,
-        0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
-        0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-        0x65, 0x2e, 0x65, 0x73, 0x2f, 0x0d, 0x0a, 0x43,
-        0x61, 0x63, 0x68, 0x65, 0x2d, 0x43, 0x6f, 0x6e,
-        0x74, 0x72, 0x6f, 0x6c, 0x3a, 0x20, 0x70, 0x72,
-        0x69, 0x76, 0x61, 0x74, 0x65, 0x0d, 0x0a, 0x43,
-        0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54,
-        0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78,
-        0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20,
-        0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d,
-        0x55, 0x54, 0x46, 0x2d, 0x38, 0x0d, 0x0a, 0x44,
-        0x61, 0x74, 0x65, 0x3a, 0x20, 0x4d, 0x6f, 0x6e,
-        0x2c, 0x20, 0x31, 0x34, 0x20, 0x53, 0x65, 0x70,
-        0x20, 0x32, 0x30, 0x30, 0x39, 0x20, 0x30, 0x38,
-        0x3a, 0x34, 0x38, 0x3a, 0x33, 0x31, 0x20, 0x47,
-        0x4d, 0x54, 0x0d, 0x0a, 0x53, 0x65, 0x72, 0x76,
-        0x65, 0x72, 0x3a, 0x20, 0x67, 0x77, 0x73, 0x0d,
-        0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-        0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a,
-        0x20, 0x32, 0x31, 0x38, 0x0d, 0x0a, 0x0d, 0x0a,
-        0x3c, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x3c, 0x48,
-        0x45, 0x41, 0x44, 0x3e, 0x3c, 0x6d, 0x65, 0x74,
-        0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65,
-        0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, 0x6f,
-        0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79,
-        0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74,
-        0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78,
-        0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x63,
-        0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75,
-        0x74, 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x0a, 0x3c,
-        0x54, 0x49, 0x54, 0x4c, 0x45, 0x3e, 0x33, 0x30,
-        0x32, 0x20, 0x4d, 0x6f, 0x76, 0x65, 0x64, 0x3c,
-        0x2f, 0x54, 0x49, 0x54, 0x4c, 0x45, 0x3e, 0x3c,
-        0x2f, 0x48, 0x45, 0x41, 0x44, 0x3e, 0x3c, 0x42,
-        0x4f, 0x44, 0x59, 0x3e, 0x0a, 0x3c, 0x48, 0x31,
-        0x3e, 0x33, 0x30, 0x32, 0x20, 0x4d, 0x6f, 0x76,
-        0x65, 0x64, 0x3c, 0x2f, 0x48, 0x31, 0x3e, 0x0a,
-        0x54, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75,
-        0x6d, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x61, 0x73,
-        0x20, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x0a, 0x3c,
-        0x41, 0x20, 0x48, 0x52, 0x45, 0x46, 0x3d, 0x22,
-        0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
-        0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-        0x65, 0x2e, 0x65, 0x73, 0x2f, 0x22, 0x3e, 0x68,
-        0x65, 0x72, 0x65, 0x3c, 0x2f, 0x41, 0x3e, 0x2e,
-        0x0d, 0x0a, 0x3c, 0x2f, 0x42, 0x4f, 0x44, 0x59,
-        0x3e, 0x3c, 0x2f, 0x48, 0x54, 0x4d, 0x4c, 0x3e,
-        0x0d, 0x0a };
-
-
-    int result = 0;
-    const char *strings[10] = {
-        "test_test_one",
-        "test_two_test",
-        "test_three_test",
-        "test_four_test",
-        "test_five_test",
-        "test_six_test",
-        "test_seven_test",
-        "test_eight_test",
-        "test_nine_test",
-        "test_ten_test"};
-    /* don't shoot me for hardcoding the results.  We will change this in
-     * sometime, by having run a separate mpm on the cpu and then hold
-     * the results in a temp buffer */
-
-    const uint16_t max_pkts_in_buffer = 5;
-    const uint16_t no_of_pkts = max_pkts_in_buffer * 2;
-
-    Packet *p[no_of_pkts];
-    SCCudaPBThreadCtx *pb_tctx = NULL;
-
-    DecodeThreadVars dtv;
-    ThreadVars tv;
-    DetectEngineCtx *de_ctx = NULL;
-    DetectEngineThreadCtx *det_ctx;
-    ThreadVars de_tv;
-
-    SCCudaPBPacketsBuffer *pb = NULL;
-    SCDQDataQueue *dq = NULL;
-
-    char *inq_name = "cuda_batcher_mpm_inqueue";
-    char *outq_name = "cuda_batcher_mpm_outqueue";
-
-    Tmq *tmq_outq = NULL;
-    Tmq *tmq_inq = NULL;
-
-    uint32_t i = 0, j = 0;
-
-    Signature *sig = NULL;
-
-    memset(&dtv, 0, sizeof(DecodeThreadVars));
-    memset(&tv, 0, sizeof(ThreadVars));
-    memset(&de_tv, 0, sizeof(ThreadVars));
-
-    FlowInitConfig(FLOW_QUIET);
-    for (i = 0; i < no_of_pkts; i++) {
-        p[i] = SCMalloc(sizeof(Packet));
-        if (p[i] == NULL) {
-            printf("error allocating memory\n");
-            exit(EXIT_FAILURE);
-        }
-        memset(p[i], 0, sizeof(Packet));
-        p[i]->pkt = (uint8_t *)(p[i] + 1);
-        DecodeEthernet(&tv, &dtv, p[i], raw_eth, sizeof(raw_eth), NULL);
-    }
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL) {
-        goto end;
-    }
-    de_ctx->mpm_matcher = MPM_B2G_CUDA;
-    de_ctx->flags |= DE_QUIET;
-
-    de_ctx->sig_list = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                               "content:\"test\"; sid:0;)");
-    if (de_ctx->sig_list == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = de_ctx->sig_list;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"one\"; sid:1;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"two\"; sid:2;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"three\"; sid:3;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"four\"; sid:4;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"five\"; sid:5;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"six\"; sid:6;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"seven\"; sid:7;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"eight\"; sid:8;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"nine\"; sid:9;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"ten\"; sid:10;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-
-    /* build the signatures */
-    SigGroupBuild(de_ctx);
-    DetectEngineThreadCtxInit(&de_tv, (void *)de_ctx, (void *)&det_ctx);
-
-    SCCudaPBSetProfile("mpm");
-    SCCudaPBSetUpQueuesAndBuffers();
-
-    /* get the queues used by the batcher thread */
-    tmq_inq = TmqGetQueueByName(inq_name);
-    if (tmq_inq == NULL) {
-        printf("tmq_inq NULL\n");
-        goto end;
-    }
-    tmq_outq = TmqGetQueueByName(outq_name);
-    if (tmq_outq == NULL) {
-        printf("tmq_outq NULL\n");
-        goto end;
-    }
-
-    result = 1;
-
-    /* queue state before calling the thread init function */
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 10);
-
-    SCCudaPBRunningTests(1);
-    /* init the TM thread */
-    SCCudaPBThreadInit(&tv, de_ctx, (void *)&pb_tctx);
-    SCCudaPBSetBufferPacketThreshhold(max_pkts_in_buffer);
-
-    /* queue state after calling the thread init function */
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    for (i = 0; i < no_of_pkts; i++) {
-        p[i]->payload = (uint8_t *)strings[i];
-        p[i]->payload_len = strlen(strings[i]);
-        SCCudaPBBatchPackets(NULL, p[i], pb_tctx, NULL, NULL);
-    }
-
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 2);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 7);
-
-    int module_handle = SCCudaHlRegisterModule("SC_RULES_CONTENT_B2G_CUDA");
-    SCCudaHlModuleData *module_data = SCCudaHlGetModuleData(module_handle);
-
-    B2gCudaMpmThreadCtxData *b2g_tctx = NULL;
-    B2gCudaMpmDispThreadInit(NULL, module_data, (void *)&b2g_tctx);
-
-    if (b2g_tctx->no_of_streams < 2) {
-        printf("At least 2 cuda streams needed for this test. Skipping ..\n");
-        goto end;
-    }
-
-    if (b2g_tctx->b2g_cuda_context == 0 ||
-        b2g_tctx->stream_data[0].b2g_cuda_cumodule == 0 ||
-        b2g_tctx->stream_data[0].b2g_cuda_search_kernel == 0) {
-        result = 0;
-        goto end;
-    }
-
-    SCCudaCtxSynchronize();
-
-    /* Run the dispatcher function. */
-    pb = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(&data_queues[tmq_outq->id]);
-    if (pb == NULL) {
-        SCLogError(SC_ERR_INVALID_VALUE, "PacketBuffer should not be empty");
-        result = 0;
-    }
-    result &= (pb->nop_in_buffer == max_pkts_in_buffer);
-    B2gCudaMpmDispatcher(NULL, (Packet *)pb, b2g_tctx, (PacketQueue *)&data_queues[tmq_outq->id], NULL);
-    TmqhOutputSimpleOnQ(&data_queues[tmq_inq->id], (SCDQGenericQData *)pb);
-    if (data_queues[b2g_tctx->tmq_streamq->id].len != 1) {
-        result = 0;
-    }
-    while ((pb = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(&data_queues[b2g_tctx->tmq_streamq->id])) != NULL) {
-        TmqhOutputSimpleOnQ(&data_queues[tmq_inq->id], (SCDQGenericQData *)pb);
-    }
-    if (data_queues[b2g_tctx->tmq_streamq->id].len != 0) {
-        result = 0;
-    }
-
-    for (i = 0; i < no_of_pkts; i++)
-        SigMatchSignatures(&de_tv, de_ctx, det_ctx, p[i]);
-    for (i = 0; i < no_of_pkts; i++) {
-        if (!PacketAlertCheck(p[i], 0)) {
-            result = 0;
-            goto end;
-        }
-        for (j = 1; j <= 10; j++) {
-            if (j == i + 1) {
-                if (!PacketAlertCheck(p[i], j)) {
-                    result = 0;
-                    goto end;
-                }
-            } else {
-                if (PacketAlertCheck(p[i], j)) {
-                    result = 0;
-                    goto end;
-                }
-            }
-        }
-    }
-
- end:
-    for (i = 0; i < no_of_pkts; i++) {
-        SCFree(p[i]);
-    }
-    SCCudaPBCleanUpQueuesAndBuffers();
-    if (de_ctx) {
-        SigGroupCleanup(de_ctx);
-        SigCleanSignatures(de_ctx);
-        DetectEngineCtxFree(de_ctx);
-    }
-    SCCudaPBThreadDeInit(NULL, (void *)pb_tctx);
-    B2gCudaMpmDispThreadDeInit(NULL, (void *)b2g_tctx);
-
-    return result;
-}
-
-static int B2gCudaTest05(void)
-{
-    uint8_t raw_eth[] = {
-        0x00, 0x25, 0x00, 0x9e, 0xfa, 0xfe, 0x00, 0x02,
-        0xcf, 0x74, 0xfe, 0xe1, 0x08, 0x00, 0x45, 0x00,
-        0x01, 0xcc, 0xcb, 0x91, 0x00, 0x00, 0x34, 0x06,
-        0xdf, 0xa8, 0xd1, 0x55, 0xe3, 0x67, 0xc0, 0xa8,
-        0x64, 0x8c, 0x00, 0x50, 0xc0, 0xb7, 0xd1, 0x11,
-        0xed, 0x63, 0x81, 0xa9, 0x9a, 0x05, 0x80, 0x18,
-        0x00, 0x75, 0x0a, 0xdd, 0x00, 0x00, 0x01, 0x01,
-        0x08, 0x0a, 0x09, 0x8a, 0x06, 0xd0, 0x12, 0x21,
-        0x2a, 0x3b, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31,
-        0x2e, 0x31, 0x20, 0x33, 0x30, 0x32, 0x20, 0x46,
-        0x6f, 0x75, 0x6e, 0x64, 0x0d, 0x0a, 0x4c, 0x6f,
-        0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20,
-        0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
-        0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-        0x65, 0x2e, 0x65, 0x73, 0x2f, 0x0d, 0x0a, 0x43,
-        0x61, 0x63, 0x68, 0x65, 0x2d, 0x43, 0x6f, 0x6e,
-        0x74, 0x72, 0x6f, 0x6c, 0x3a, 0x20, 0x70, 0x72,
-        0x69, 0x76, 0x61, 0x74, 0x65, 0x0d, 0x0a, 0x43,
-        0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54,
-        0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78,
-        0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20,
-        0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d,
-        0x55, 0x54, 0x46, 0x2d, 0x38, 0x0d, 0x0a, 0x44,
-        0x61, 0x74, 0x65, 0x3a, 0x20, 0x4d, 0x6f, 0x6e,
-        0x2c, 0x20, 0x31, 0x34, 0x20, 0x53, 0x65, 0x70,
-        0x20, 0x32, 0x30, 0x30, 0x39, 0x20, 0x30, 0x38,
-        0x3a, 0x34, 0x38, 0x3a, 0x33, 0x31, 0x20, 0x47,
-        0x4d, 0x54, 0x0d, 0x0a, 0x53, 0x65, 0x72, 0x76,
-        0x65, 0x72, 0x3a, 0x20, 0x67, 0x77, 0x73, 0x0d,
-        0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-        0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a,
-        0x20, 0x32, 0x31, 0x38, 0x0d, 0x0a, 0x0d, 0x0a,
-        0x3c, 0x48, 0x54, 0x4d, 0x4c, 0x3e, 0x3c, 0x48,
-        0x45, 0x41, 0x44, 0x3e, 0x3c, 0x6d, 0x65, 0x74,
-        0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65,
-        0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, 0x6f,
-        0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79,
-        0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74,
-        0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78,
-        0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x63,
-        0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75,
-        0x74, 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x0a, 0x3c,
-        0x54, 0x49, 0x54, 0x4c, 0x45, 0x3e, 0x33, 0x30,
-        0x32, 0x20, 0x4d, 0x6f, 0x76, 0x65, 0x64, 0x3c,
-        0x2f, 0x54, 0x49, 0x54, 0x4c, 0x45, 0x3e, 0x3c,
-        0x2f, 0x48, 0x45, 0x41, 0x44, 0x3e, 0x3c, 0x42,
-        0x4f, 0x44, 0x59, 0x3e, 0x0a, 0x3c, 0x48, 0x31,
-        0x3e, 0x33, 0x30, 0x32, 0x20, 0x4d, 0x6f, 0x76,
-        0x65, 0x64, 0x3c, 0x2f, 0x48, 0x31, 0x3e, 0x0a,
-        0x54, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75,
-        0x6d, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x61, 0x73,
-        0x20, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x0a, 0x3c,
-        0x41, 0x20, 0x48, 0x52, 0x45, 0x46, 0x3d, 0x22,
-        0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
-        0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-        0x65, 0x2e, 0x65, 0x73, 0x2f, 0x22, 0x3e, 0x68,
-        0x65, 0x72, 0x65, 0x3c, 0x2f, 0x41, 0x3e, 0x2e,
-        0x0d, 0x0a, 0x3c, 0x2f, 0x42, 0x4f, 0x44, 0x59,
-        0x3e, 0x3c, 0x2f, 0x48, 0x54, 0x4d, 0x4c, 0x3e,
-        0x0d, 0x0a };
-
-
-    int result = 0;
-    const char *strings[10] = {
-        "test_test_one",
-        "test_two_test",
-        "test_three_test",
-        "test_four_test",
-        "test_five_test",
-        "test_six_test",
-        "test_seven_test",
-        "test_eight_test",
-        "test_nine_test",
-        "test_ten_test"};
-    /* don't shoot me for hardcoding the results.  We will change this in
-     * sometime, by having run a separate mpm on the cpu and then hold
-     * the results in a temp buffer */
-
-    const uint16_t max_pkts_in_buffer = 300;
-    const uint16_t no_of_pkts = max_pkts_in_buffer * 4;
-    uint16_t max_runs = 2;
-
-    Packet *p[no_of_pkts];
-    SCCudaPBThreadCtx *pb_tctx = NULL;
-
-    DecodeThreadVars dtv;
-    ThreadVars tv;
-    DetectEngineCtx *de_ctx = NULL;
-    DetectEngineThreadCtx *det_ctx;
-    ThreadVars de_tv;
-
-    SCCudaPBPacketsBuffer *pb = NULL;
-    SCCudaPBPacketsBuffer *pb2 = NULL;
-    SCDQDataQueue *dq = NULL;
-
-    char *inq_name = "cuda_batcher_mpm_inqueue";
-    char *outq_name = "cuda_batcher_mpm_outqueue";
-
-    Tmq *tmq_outq = NULL;
-    Tmq *tmq_inq = NULL;
-
-    uint32_t i = 0, j = 0;
-
-    Signature *sig = NULL;
-
-    memset(&dtv, 0, sizeof(DecodeThreadVars));
-    memset(&tv, 0, sizeof(ThreadVars));
-    memset(&de_tv, 0, sizeof(ThreadVars));
-
-    FlowInitConfig(FLOW_QUIET);
-    for (i = 0; i < no_of_pkts; i++) {
-        p[i] = SCMalloc(sizeof(Packet));
-        if (p[i] == NULL) {
-            printf("error allocating memory\n");
-            exit(EXIT_FAILURE);
-        }
-        memset(p[i], 0, sizeof(Packet));
-        p[i]->pkt = (uint8_t *)(p[i] + 1);
-        DecodeEthernet(&tv, &dtv, p[i], raw_eth, sizeof(raw_eth), NULL);
-    }
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL) {
-        goto end;
-    }
-    de_ctx->mpm_matcher = MPM_B2G_CUDA;
-    de_ctx->flags |= DE_QUIET;
-
-    de_ctx->sig_list = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                               "content:\"test\"; sid:0;)");
-    if (de_ctx->sig_list == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = de_ctx->sig_list;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"one\"; sid:1;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"two\"; sid:2;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"three\"; sid:3;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"four\"; sid:4;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"five\"; sid:5;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"six\"; sid:6;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"seven\"; sid:7;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"eight\"; sid:8;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"nine\"; sid:9;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-    sig = sig->next;
-
-    sig->next = SigInit(de_ctx, "alert tcp any any -> any any (msg:\"Bamboo\"; "
-                        "content:\"ten\"; sid:10;)");
-    if (sig->next == NULL) {
-        printf("signature parsing failed\n");
-        goto end;
-    }
-
-    /* build the signatures */
-    SigGroupBuild(de_ctx);
-    DetectEngineThreadCtxInit(&de_tv, (void *)de_ctx, (void *)&det_ctx);
-
-    SCCudaPBSetProfile("mpm");
-    SCCudaPBSetUpQueuesAndBuffers();
-
-    /* get the queues used by the batcher thread */
-    tmq_inq = TmqGetQueueByName(inq_name);
-    if (tmq_inq == NULL) {
-        printf("tmq_inq NULL\n");
-        goto end;
-    }
-    tmq_outq = TmqGetQueueByName(outq_name);
-    if (tmq_outq == NULL) {
-        printf("tmq_outq NULL\n");
-        goto end;
-    }
-
-    result = 1;
-
-    /* queue state before calling the thread init function */
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 10);
-
-    SCCudaPBRunningTests(1);
-    /* init the TM thread */
-    SCCudaPBThreadInit(&tv, de_ctx, (void *)&pb_tctx);
-    SCCudaPBSetBufferPacketThreshhold(max_pkts_in_buffer);
-
-    /* queue state after calling the thread init function */
-    dq = &data_queues[tmq_outq->id];
-    result &= (dq->len == 0);
-    dq = &data_queues[tmq_inq->id];
-    result &= (dq->len == 9);
-
-    int module_handle = SCCudaHlRegisterModule("SC_RULES_CONTENT_B2G_CUDA");
-    SCCudaHlModuleData *module_data = SCCudaHlGetModuleData(module_handle);
-
-    B2gCudaMpmThreadCtxData *b2g_tctx = NULL;
-    B2gCudaMpmDispThreadInit(NULL, module_data, (void *)&b2g_tctx);
-
-    if (b2g_tctx->no_of_streams < 2) {
-        printf("At least 2 cuda streams needed for this test. Skipping ..\n");
-        goto end;
-    }
-
-    if (b2g_tctx->b2g_cuda_context == 0 ||
-        b2g_tctx->stream_data[0].b2g_cuda_cumodule == 0 ||
-        b2g_tctx->stream_data[0].b2g_cuda_search_kernel == 0) {
-        result = 0;
-        goto end;
-    }
-
-    uint64_t start_ = 0;
-    uint64_t stop_ = 0;
-    uint64_t time_nostream_ = 0;
-    uint64_t time_stream_ = 0;
-
-    SCCudaCtxSynchronize();
-
-    /* Benchmark the dispatcher function. */
-    int run = 0;
-    for (run = 0; run < max_runs; ++run) {
-        /* Fill the packet buffers */
-        for (i = 0; i < no_of_pkts; i++) {
-            p[i]->payload = (uint8_t *)strings[i%10];
-            p[i]->payload_len = strlen(strings[i%10]);
-            SCCudaPBBatchPackets(NULL, p[i], pb_tctx, NULL, NULL);
-        }
-
-        dq = &data_queues[tmq_outq->id];
-        result &= (dq->len == 4);
-        dq = &data_queues[tmq_inq->id];
-        result &= (dq->len == 5);
-
-        /* Performance test with two separate calls */
-        pb = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(&data_queues[tmq_outq->id]);
-        pb2 = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(&data_queues[tmq_outq->id]);
-        if (pb == NULL || pb2 == NULL) {
-            SCLogError(SC_ERR_INVALID_VALUE, "PacketBuffer should not be empty");
-            result = 0;
-        }
-        result &= (pb->nop_in_buffer == max_pkts_in_buffer);
-        result &= (pb2->nop_in_buffer == max_pkts_in_buffer);
-        start_ = UtilCpuGetTicks();
-        B2gCudaMpmDispatcher(NULL, (Packet *)pb, b2g_tctx, (PacketQueue *)NULL, (PacketQueue *)NULL);
-        B2gCudaMpmDispatcher(NULL, (Packet *)pb2, b2g_tctx, (PacketQueue *)NULL, (PacketQueue *)NULL);
-        stop_ = UtilCpuGetTicks();
-        TmqhOutputSimpleOnQ(&data_queues[tmq_inq->id], (SCDQGenericQData *)pb);
-        TmqhOutputSimpleOnQ(&data_queues[tmq_inq->id], (SCDQGenericQData *)pb2);
-        time_nostream_ += stop_ - start_;
-
-        /* Performance test with one call using streams */
-        pb = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(&data_queues[tmq_outq->id]);
-        if (pb == NULL) {
-            SCLogError(SC_ERR_INVALID_VALUE, "PacketBuffer should not be empty");
-            result = 0;
-        }
-        result &= (pb->nop_in_buffer == max_pkts_in_buffer);
-        result &= (pb2->nop_in_buffer == max_pkts_in_buffer);
-        start_ = UtilCpuGetTicks();
-        B2gCudaMpmDispatcher(NULL, (Packet *)pb, b2g_tctx, (PacketQueue *)&data_queues[tmq_outq->id], NULL);
-        stop_ = UtilCpuGetTicks();
-        TmqhOutputSimpleOnQ(&data_queues[tmq_inq->id], (SCDQGenericQData *)pb);
-        while ((pb = (SCCudaPBPacketsBuffer *)SCDQDataDequeue(&data_queues[b2g_tctx->tmq_streamq->id])) != NULL) {
-            TmqhOutputSimpleOnQ(&data_queues[tmq_inq->id], (SCDQGenericQData *)pb);
-        }
-        time_stream_ += stop_ - start_;
-    }
-
-    printf("Avg CPU ticks without stream after %i runs: %"PRIu64"\n", run, time_nostream_/run);
-    printf("Avg CPU ticks with 2 streams after %i runs: %"PRIu64"\n", run, time_stream_/run);
-
-    for (i = 0; i < no_of_pkts; i++)
-        SigMatchSignatures(&de_tv, de_ctx, det_ctx, p[i]);
-    for (i = 0; i < no_of_pkts; i++) {
-        if (!PacketAlertCheck(p[i], 0)) {
-            result = 0;
-            goto end;
-        }
-        for (j = 1; j <= 10; j++) {
-            if (j == i%10 + 1) {
-                if (!PacketAlertCheck(p[i], j)) {
-                    result = 0;
-                    goto end;
-                }
-            } else {
-                if (PacketAlertCheck(p[i], j)) {
-                    result = 0;
-                    goto end;
-                }
-            }
-        }
-    }
-
- end:
-    for (i = 0; i < no_of_pkts; i++) {
-        SCFree(p[i]);
-    }
-    SCCudaPBCleanUpQueuesAndBuffers();
-    if (de_ctx) {
-        SigGroupCleanup(de_ctx);
-        SigCleanSignatures(de_ctx);
-        DetectEngineCtxFree(de_ctx);
-    }
-    SCCudaPBThreadDeInit(NULL, (void *)pb_tctx);
-    B2gCudaMpmDispThreadDeInit(NULL, (void *)b2g_tctx);
-
-    return result;
-}
-
-#endif /* UNITTESTS */
-
-/*********************************Unittests************************************/
-
-void B2gCudaRegisterTests(void)
-{
-#ifdef UNITTESTS
-    UtRegisterTest("B2gCudaTest01", B2gCudaTest01, 1);
-    UtRegisterTest("B2gCudaTest02", B2gCudaTest02, 1);
-    UtRegisterTest("B2gCudaTest03", B2gCudaTest03, 1);
-    UtRegisterTest("B2gCudaTest04", B2gCudaTest04, 1);
-    UtRegisterTest("B2gCudaTest05", B2gCudaTest05, 1);
-#endif /* UNITTESTS */
-}
-
-#endif /* __SC_CUDA_SUPPORT */
diff --git a/src/util-mpm-b2g-cuda.h b/src/util-mpm-b2g-cuda.h
deleted file mode 100644 (file)
index 6281bfb..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright (C) 2007-2010 Open Information Security Foundation
- *
- * You can copy, redistribute or modify this Program under the terms of
- * the GNU General Public License version 2 as published by the Free
- * Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * version 2 along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- */
-
-/**
- * \file
- *
- * \author Victor Julien <victor@inliniac.net>
- * \author Anoop Saldanha <anoopsaldanha@gmail.com>
- * \author Martin Beyer <martin.beyer@marasystems.de>
- */
-
-#ifndef __UTIL_MPM_B2G_CUDA_H__
-#define __UTIL_MPM_B2G_CUDA_H__
-
-#ifdef __SC_CUDA_SUPPORT__
-
-#include <cuda.h>
-#include "decode.h"
-#include "util-mpm.h"
-#include "util-bloomfilter.h"
-
-#define B2G_CUDA_HASHSHIFT 4
-#define B2G_CUDA_TYPE      uint32_t
-#define B2G_CUDA_WORD_SIZE 32
-#define B2G_CUDA_Q         2
-
-#define B2G_CUDA_HASH16(a, b) (((a) << B2G_CUDA_HASHSHIFT) | (b))
-
-#define B2G_CUDA_SEARCHFUNC B2gCudaSearchBNDMq
-#define B2G_CUDA_SEARCHFUNC_NAME "B2gCudaSearchBNDMq"
-
-typedef struct B2gCudaPattern_ {
-    uint8_t flags;
-    /** \todo we're limited to 32/64 byte lengths, uint8_t would be fine here */
-    uint16_t len;
-    /* case sensitive */
-    uint8_t *cs;
-    /* case INsensitive */
-    uint8_t *ci;
-    struct B2gCudaPattern_ *next;
-    uint32_t id;
-    uint8_t *original_pat;
-} B2gCudaPattern;
-
-typedef struct B2gCudaHashItem_ {
-    uint16_t idx;
-    uint8_t flags;
-    struct B2gCudaHashItem_ *nxt;
-} B2gCudaHashItem;
-
-typedef struct B2gCudaCtx_ {
-    /* unique handle given by the cuda-handlers API, which indicates the module
-     * in the engine that is holding this B2g_Cuda_Ctx */
-    int module_handle;
-
-    /* cuda device pointer to B2gCudaCtx->B2G */
-    CUdeviceptr cuda_B2G;
-
-    B2G_CUDA_TYPE *B2G;
-    B2G_CUDA_TYPE m;
-    BloomFilter **bloom;
-    /* array containing the minimal length of the patters in a hash bucket.
-     * Used for the BloomFilter. */
-    uint8_t *pminlen;
-    /* pattern arrays */
-    B2gCudaPattern **parray;
-
-    uint16_t pat_1_cnt;
-#ifdef B2G_CUDA_SEARCH2
-    uint16_t pat_2_cnt;
-#endif
-    uint16_t pat_x_cnt;
-
-    uint32_t hash_size;
-    B2gCudaHashItem **hash;
-    B2gCudaHashItem hash1[256];
-#ifdef B2G_CUDA_SEARCH2
-    B2gCudaHashItem **hash2;
-#endif
-
-    /* hash used during ctx initialization */
-    B2gCudaPattern **init_hash;
-
-    uint8_t s0;
-
-    /* we store our own multi byte search func ptr here for B2gCudaSearch1 */
-    uint32_t (*Search)(struct MpmCtx_ *, struct MpmThreadCtx_ *,
-                       PatternMatcherQueue *, uint8_t *, uint16_t);
-
-    /* we store our own multi byte search func ptr here for B2gCudaSearch2 */
-    uint32_t (*MBSearch2)(struct MpmCtx_ *, struct MpmThreadCtx_ *,
-                          PatternMatcherQueue *, uint8_t *, uint16_t);
-    uint32_t (*MBSearch)(struct MpmCtx_ *, struct MpmThreadCtx_ *,
-                         PatternMatcherQueue *, uint8_t *, uint16_t);
-} B2gCudaCtx;
-
-typedef struct B2gCudaThreadCtx_ {
-#ifdef B2G_CUDA_COUNTERS
-    uint32_t stat_pminlen_calls;
-    uint32_t stat_pminlen_total;
-    uint32_t stat_bloom_calls;
-    uint32_t stat_bloom_hits;
-    uint32_t stat_calls;
-    uint32_t stat_m_total;
-    uint32_t stat_d0;
-    uint32_t stat_d0_hashloop;
-    uint32_t stat_loop_match;
-    uint32_t stat_loop_no_match;
-    uint32_t stat_num_shift;
-    uint32_t stat_total_shift;
-#endif /* B2G_CUDA_COUNTERS */
-} B2gCudaThreadCtx;
-
-void MpmB2gCudaRegister(void);
-void TmModuleCudaMpmB2gRegister(void);
-
-int B2gCudaStartDispatcherThreadRC(const char *);
-void B2gCudaKillDispatcherThreadRC(void);
-int B2gCudaResultsPostProcessing(Packet *, MpmCtx *, MpmThreadCtx *,
-                                 PatternMatcherQueue *);
-uint32_t B2gCudaSearch1(MpmCtx *, MpmThreadCtx *, PatternMatcherQueue *,
-                        uint8_t *, uint16_t);
-#ifdef B2G_CUDA_SEARCH2
-uint32_t B2gCudaSearch2(MpmCtx *, MpmThreadCtx *, PatternMatcherQueue *,
-                        uint8_t *, uint16_t);
-#endif
-
-#endif /* __SC_CUDA_SUPPORT__ */
-
-#endif /* __UTIL_MPM_B2G_CUDA_H__ */
index 64a0c633d2507295b4a37952f33202386aebccb2..a8307ee8be5e8ee3710d1642210bf192a0e2d6b0 100644 (file)
@@ -30,7 +30,6 @@
 /* include pattern matchers */
 #include "util-mpm-wumanber.h"
 #include "util-mpm-b2g.h"
-#include "util-mpm-b2g-cuda.h"
 #include "util-mpm-b3g.h"
 #include "util-mpm-b2gc.h"
 #include "util-mpm-b2gm.h"
@@ -40,7 +39,6 @@
 #include "util-hashlist.h"
 
 #include "detect-engine.h"
-#include "util-cuda-handlers.h"
 #include "util-cuda.h"
 #include "util-misc.h"
 #include "conf.h"
@@ -445,9 +443,6 @@ void MpmTableSetup(void) {
 
     MpmWuManberRegister();
     MpmB2gRegister();
-#ifdef __SC_CUDA_SUPPORT__
-    MpmB2gCudaRegister();
-#endif
     MpmB3gRegister();
     MpmB2gcRegister();
     MpmB2gmRegister();
@@ -512,765 +507,9 @@ uint32_t MpmGetBloomSize(const char *conf_val)
     SCReturnInt(bloom_value);
 }
 
-
-#ifdef __SC_CUDA_SUPPORT__
-
-/**
- * \brief Parse the "mpm" profile under the cuda subsection of our conf file.
- *
- * \retval profile Pointer to a struct containing the parsed data.
- */
-MpmCudaConf *MpmCudaConfParse(void)
-{
-    ConfNode *cuda_node = NULL;
-    ConfNode *seq_node = NULL;
-
-    MpmCudaConf *profile = NULL;
-
-    const char *packet_buffer_limit = NULL;
-    const char *packet_size_limit = NULL;
-    const char *packet_buffers = NULL;
-    const char *batching_timeout = NULL;
-    const char *page_locked = NULL;
-    const char *device_id = NULL;
-    const char *cuda_streams = NULL;
-
-    if ((profile = SCMalloc(sizeof(MpmCudaConf))) == NULL) {
-        SCLogError(SC_ERR_MEM_ALLOC, "Error allocating memory");
-        exit(EXIT_FAILURE);
-    }
-    memset(profile, 0, sizeof(MpmCudaConf));
-    profile->packet_buffer_limit = MPM_PACKET_BUFFER_LIMIT;
-    profile->packet_size_limit = MPM_PACKET_SIZE_LIMIT;
-    profile->packet_buffers = MPM_PACKET_BUFFERS;
-    profile->batching_timeout = MPM_BATCHING_TIMEOUT;
-    profile->page_locked = MPM_PAGE_LOCKED;
-    profile->device_id = SC_CUDA_DEFAULT_DEVICE;
-    profile->cuda_streams = MPM_CUDA_STREAMS;
-
-    cuda_node = ConfGetNode("cuda");
-    if (cuda_node == NULL) {
-        SCLogInfo("No conf found for \"cuda\" in yaml file.  Use default conf");
-        goto end;
-    }
-
-    TAILQ_FOREACH(seq_node, &cuda_node->head, next) {
-        if (strcasecmp(seq_node->val, "mpm") == 0) {
-            packet_buffer_limit = ConfNodeLookupChildValue
-                (seq_node->head.tqh_first, "packet-buffer-limit");
-            packet_size_limit = ConfNodeLookupChildValue
-                (seq_node->head.tqh_first, "packet-size-limit");
-            packet_buffers = ConfNodeLookupChildValue
-                (seq_node->head.tqh_first, "packet-buffers");
-            batching_timeout = ConfNodeLookupChildValue
-                (seq_node->head.tqh_first, "batching-timeout");
-            page_locked = ConfNodeLookupChildValue
-                (seq_node->head.tqh_first, "page-locked");
-            device_id = ConfNodeLookupChildValue
-                (seq_node->head.tqh_first, "device-id");
-            cuda_streams = ConfNodeLookupChildValue
-                (seq_node->head.tqh_first, "cuda-streams");
-
-            /* packet_buffer_size */
-            if (packet_buffer_limit == NULL || strcasecmp(packet_buffer_limit, "") == 0) {
-                SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                           "cuda.mpm.packet_buffer_limit.  Either NULL or empty");
-            } else {
-                profile->packet_buffer_limit = atoi(packet_buffer_limit);
-                if (profile->packet_buffer_limit <= 0) {
-                    SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                               "cuda.mpm.packet_buffer_limit - %s", packet_buffer_limit);
-                    profile->packet_buffer_limit = MPM_PACKET_BUFFER_LIMIT;
-                }
-            }
-
-            /* packet_size_limit */
-            if (packet_size_limit == NULL || strcasecmp(packet_size_limit, "") == 0) {
-                SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                           "cuda.mpm.packet_size_limit.  Either NULL or empty");
-            } else {
-                if (ParseSizeStringU16(packet_size_limit, &profile->packet_size_limit) < 0) {
-                    SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                               "cuda.mpm.packet_size_limit - %s", packet_size_limit);
-                    exit(EXIT_FAILURE);
-                }
-
-                if (profile->packet_size_limit <= 0) {
-                    SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                               "cuda.mpm.packet_size_limit - %s", packet_size_limit);
-                    profile->packet_size_limit = MPM_PACKET_SIZE_LIMIT;
-                }
-            }
-
-            /* packet_buffers */
-            if (packet_buffers == NULL || strcasecmp(packet_buffers, "") == 0) {
-                SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                           "cuda.mpm.packet_buffers.  Either NULL or empty");
-            } else {
-                profile->packet_buffers = atoi(packet_buffers);
-                if (profile->packet_buffers <= 0) {
-                    SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                               "cuda.mpm.packet_buffers - %s", packet_buffers);
-                    profile->packet_buffers = MPM_PACKET_BUFFERS;
-                }
-            }
-
-            /* batching_timeout */
-            if (batching_timeout == NULL || strcasecmp(batching_timeout, "") == 0) {
-                SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                           "cuda.mpm.batching_timeout.  Either NULL or empty");
-            } else {
-                profile->batching_timeout = atof(batching_timeout);
-                if (profile->batching_timeout < 0.000001) {
-                    SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                               "cuda.mpm.batching_timeout - %s", batching_timeout);
-                    profile->batching_timeout = MPM_BATCHING_TIMEOUT;
-                }
-            }
-
-            /* page_locked */
-            if (page_locked == NULL || strcasecmp(page_locked, "") == 0) {
-                SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                           "cuda.mpm.page_locked.  Either NULL or empty");
-            } else {
-                if (strcasecmp(page_locked, "enabled") == 0) {
-                    profile->page_locked = MPM_PAGE_LOCKED;
-                } else if (strcasecmp(page_locked, "disabled") == 0) {
-                    profile->page_locked = !MPM_PAGE_LOCKED;
-                } else {
-                    SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                               "cuda.mpm.page_locked - %s", page_locked);
-                }
-            }
-
-            /* device_id */
-            if (device_id == NULL || strcasecmp(device_id, "") == 0) {
-                SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                           "cuda.mpm.device_id  Either NULL or empty");
-                profile->device_id = SC_CUDA_DEFAULT_DEVICE;
-                continue;
-            } else {
-                profile->device_id = atoi(device_id);
-                if (profile->device_id < 0) {
-                    SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                               "cuda.mpm.device_id - %s", device_id);
-                    profile->device_id = SC_CUDA_DEFAULT_DEVICE;
-                    continue;
-                }
-            }
-
-            /* cuda_streams */
-            if (cuda_streams == NULL || strcasecmp(cuda_streams, "") == 0) {
-                SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                        "cuda.mpm.cuda_streams  Either NULL or empty");
-                profile->cuda_streams = MPM_CUDA_STREAMS;
-                continue;
-            } else {
-                profile->cuda_streams = atoi(cuda_streams);
-                if (profile->cuda_streams < 1) {
-                    SCLogError(SC_ERR_INVALID_YAML_CONF_ENTRY, "Invalid entry for "
-                            "cuda.mpm.cuda_streams - %s", cuda_streams);
-                    profile->cuda_streams = MPM_CUDA_STREAMS;
-                    continue;
-                }
-            }
-        } /* if (strcasecmp(seq_node->val, "mpm") == 0) */
-    } /* TAILQ_FOREACH(seq_node, &cuda_node->head, next) */
-
- end:
-    SCLogDebug("Configuration for \"cuda.mpm\"\n"
-               "packet_buffer_size: %u\n"
-               "packet_size_limit: %d\n"
-               "packet_buffers: %d\n"
-               "batching_timeout: %d\n"
-               "page_locked: %d\n"
-               "device_id: %d\n",
-               profile->packet_buffer_limit, profile->packet_size_limit,
-               profile->packet_buffers, profile->batching_timeout,
-               profile->page_locked, profile->device_id);
-
-    return profile;
-}
-
-/**
- * \brief Cleanup the parsed "mpm" profile cuda conf.
- */
-void MpmCudaConfCleanup(MpmCudaConf *conf)
-{
-    if (conf != NULL)
-        SCFree(conf);
-
-    return;
-}
-
-#endif /* __SC_CUDA_SUPPORT */
-
 /************************************Unittests*********************************/
 
 #ifdef UNITTESTS
-#ifdef __SC_CUDA_SUPPORT__
-
-static int MpmInitYamlConf(char *conf)
-{
-    ConfCreateContextBackup();
-    ConfInit();
-    return ConfYamlLoadString(conf, strlen(conf));
-}
-
-static void MpmDeInitYamlConf(void)
-{
-    ConfDeInit();
-    ConfRestoreContextBackup();
-
-    return;
-}
-
-static int MpmTest01(void)
-{
-    char *conf =
-        "%YAML 1.1\n"
-        "---\n"
-        "cuda:\n"
-        "  - mpm:\n"
-        "      packet_buffer_limit: 4000\n"
-        "      packet_size_limit: 1500\n"
-        "      packet_buffers: 10\n"
-        "      batching_timeout: 1\n"
-        "      page_locked: enabled\n"
-        "      device_id: 0\n"
-        "      cuda_streams: 2\n";
-
-    DetectEngineCtx *de_ctx = NULL;
-    int result = 0;
-
-    if (MpmInitYamlConf(conf) == -1)
-        return 0;
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL)
-        goto end;
-
-    SCCudaHlBackupRegisteredProfiles();
-    SCCudaHlGetYamlConf();
-    MpmCudaConf *profile = SCCudaHlGetProfile("mpm");
-    if (profile == NULL) {
-        printf("Error retrieving mpm profile\n");
-        goto end;
-    }
-
-    result = (profile->packet_buffer_limit == 4000);
-    result &= (profile->packet_size_limit == 1500);
-    result &= (profile->packet_buffers == 10);
-    result &= (profile->batching_timeout == 1);
-    result &= (profile->page_locked == 1);
-    result &= (profile->device_id == 0);
-    result &= (profile->cuda_streams == 2);
-
- end:
-    SCCudaHlCleanProfiles();
-
-    if (de_ctx != NULL)
-        DetectEngineCtxFree(de_ctx);
-    MpmDeInitYamlConf();
-    SCCudaHlRestoreBackupRegisteredProfiles();
-
-    return result;
-}
-
-static int MpmTest02(void)
-{
-    char *conf =
-        "%YAML 1.1\n"
-        "---\n"
-        "cuda:\n"
-        "  - mpm:\n"
-        "      packet_buffer_limit: 4001\n"
-        "      packet_size_limit: 1500\n"
-        "      packet_buffers: 12\n"
-        "      batching_timeout: 10\n"
-        "      page_locked: disabled\n"
-        "      device_id: 5\n"
-        "      cuda_streams: 4\n";
-
-    DetectEngineCtx *de_ctx = NULL;
-    int result = 0;
-
-    if (MpmInitYamlConf(conf) == -1)
-        return 0;
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL)
-        goto end;
-
-    SCCudaHlBackupRegisteredProfiles();
-    SCCudaHlGetYamlConf();
-    MpmCudaConf *profile = SCCudaHlGetProfile("mpm");
-    if (profile == NULL) {
-        printf("Error retrieving mpm profile\n");
-        goto end;
-    }
-
-    result = (profile->packet_buffer_limit == 4001);
-    result &= (profile->packet_size_limit == 1500);
-    result &= (profile->packet_buffers == 12);
-    result &= (profile->batching_timeout == 10);
-    result &= (profile->page_locked == 0);
-    result &= (profile->device_id == 5);
-    result &= (profile->cuda_streams == 4);
-
- end:
-    SCCudaHlCleanProfiles();
-
-    if (de_ctx != NULL)
-        DetectEngineCtxFree(de_ctx);
-    MpmDeInitYamlConf();
-    SCCudaHlRestoreBackupRegisteredProfiles();
-
-    return result;
-}
-
-static int MpmTest03(void)
-{
-    char *conf =
-        "%YAML 1.1\n"
-        "---\n"
-        "cuda:\n"
-        "  - mpm:\n"
-        "      packet_buffer_limit: 0\n"
-        "      packet_size_limit: 0\n"
-        "      packet_buffers: 0\n"
-        "      batching_timeout: 0\n"
-        "      page_locked: enbled\n"
-        "      device_id: -1\n"
-        "      cuda_streams: -1\n";
-
-    DetectEngineCtx *de_ctx = NULL;
-    int result = 0;
-
-    if (MpmInitYamlConf(conf) == -1)
-        return 0;
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL)
-        goto end;
-
-    SCCudaHlBackupRegisteredProfiles();
-    SCCudaHlGetYamlConf();
-    MpmCudaConf *profile = SCCudaHlGetProfile("mpm");
-    if (profile == NULL) {
-        printf("Error retrieving mpm profile\n");
-        goto end;
-    }
-
-    result = (profile->packet_buffer_limit == MPM_PACKET_BUFFER_LIMIT);
-    result &= (profile->packet_size_limit == MPM_PACKET_SIZE_LIMIT);
-    result &= (profile->packet_buffers == MPM_PACKET_BUFFERS);
-    result &= (profile->batching_timeout == MPM_BATCHING_TIMEOUT);
-    result &= (profile->page_locked == MPM_PAGE_LOCKED);
-    result &= (profile->device_id == SC_CUDA_DEFAULT_DEVICE);
-    result &= (profile->cuda_streams == MPM_CUDA_STREAMS);
-
- end:
-    SCCudaHlCleanProfiles();
-
-    if (de_ctx != NULL)
-        DetectEngineCtxFree(de_ctx);
-    MpmDeInitYamlConf();
-    SCCudaHlRestoreBackupRegisteredProfiles();
-
-    return result;
-}
-
-static int MpmTest04(void)
-{
-    char *conf =
-        "%YAML 1.1\n"
-        "---\n"
-        "cuda:\n"
-        "  - mpm:\n"
-        "      packet_buffer_limit: -1\n"
-        "      packet_size_limit: -1\n"
-        "      packet_buffers: -1\n"
-        "      batching_timeout: -1\n"
-        "      page_locked: enbled\n"
-        "      device_id: -1\n"
-        "      cuda_streams: -1\n";
-
-    DetectEngineCtx *de_ctx = NULL;
-    int result = 0;
-
-    if (MpmInitYamlConf(conf) == -1)
-        return 0;
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL)
-        goto end;
-
-    SCCudaHlBackupRegisteredProfiles();
-    SCCudaHlGetYamlConf();
-    MpmCudaConf *profile = SCCudaHlGetProfile("mpm");
-    if (profile == NULL) {
-        printf("Error retrieving mpm profile\n");
-        goto end;
-    }
-
-    result = (profile->packet_buffer_limit == MPM_PACKET_BUFFER_LIMIT);
-    result &= (profile->packet_size_limit == MPM_PACKET_SIZE_LIMIT);
-    result &= (profile->packet_buffers == MPM_PACKET_BUFFERS);
-    result &= (profile->batching_timeout == MPM_BATCHING_TIMEOUT);
-    result &= (profile->page_locked == MPM_PAGE_LOCKED);
-    result &= (profile->device_id == SC_CUDA_DEFAULT_DEVICE);
-    result &= (profile->cuda_streams == MPM_CUDA_STREAMS);
-
- end:
-    SCCudaHlCleanProfiles();
-
-    if (de_ctx != NULL)
-        DetectEngineCtxFree(de_ctx);
-    MpmDeInitYamlConf();
-    SCCudaHlRestoreBackupRegisteredProfiles();
-
-    return result;
-}
-
-static int MpmTest05(void)
-{
-    char *conf =
-        "%YAML 1.1\n"
-        "---\n"
-        "cuda:\n"
-        "  - mpm:\n"
-        "      packet_buffer_limit:\n"
-        "      packet_size_limit:\n"
-        "      packet_buffers:\n"
-        "      batching_timeout: 2\n"
-        "      page_locked: enabled\n"
-        "      device_id: 1\n"
-        "      cuda_streams: 0\n";
-
-    DetectEngineCtx *de_ctx = NULL;
-    int result = 0;
-
-    if (MpmInitYamlConf(conf) == -1)
-        return 0;
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL)
-        goto end;
-
-    SCCudaHlBackupRegisteredProfiles();
-    SCCudaHlGetYamlConf();
-    MpmCudaConf *profile = SCCudaHlGetProfile("mpm");
-    if (profile == NULL) {
-        printf("Error retrieving mpm profile\n");
-        goto end;
-    }
-
-    result = (profile->packet_buffer_limit == MPM_PACKET_BUFFER_LIMIT);
-    result &= (profile->packet_size_limit == MPM_PACKET_SIZE_LIMIT);
-    result &= (profile->packet_buffers == MPM_PACKET_BUFFERS);
-    result &= (profile->batching_timeout == 2);
-    result &= (profile->page_locked == 1);
-    result &= (profile->device_id == 1);
-    result &= (profile->cuda_streams == 0);
-
- end:
-    SCCudaHlCleanProfiles();
-
-    if (de_ctx != NULL)
-        DetectEngineCtxFree(de_ctx);
-    MpmDeInitYamlConf();
-    SCCudaHlRestoreBackupRegisteredProfiles();
-
-    return result;
-}
-
-static int MpmTest06(void)
-{
-    char *conf =
-        "%YAML 1.1\n"
-        "---\n"
-        "cuda:\n"
-        "  - mpm:\n"
-        "      packet_buffer_limit: \n"
-        "      packet_size_limit: \n"
-        "      packet_buffers: \n"
-        "      batching_timeout: \n"
-        "      page_locked: \n"
-        "      device_id: \n"
-        "      cuda_streams: \n";
-
-    DetectEngineCtx *de_ctx = NULL;
-    int result = 0;
-
-    if (MpmInitYamlConf(conf) == -1)
-        return 0;
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL)
-        goto end;
-
-    SCCudaHlBackupRegisteredProfiles();
-    SCCudaHlGetYamlConf();
-    MpmCudaConf *profile = SCCudaHlGetProfile("mpm");
-    if (profile == NULL) {
-        printf("Error retrieving mpm profile\n");
-        goto end;
-    }
-
-    result = (profile->packet_buffer_limit == MPM_PACKET_BUFFER_LIMIT);
-    result &= (profile->packet_size_limit == MPM_PACKET_SIZE_LIMIT);
-    result &= (profile->packet_buffers == MPM_PACKET_BUFFERS);
-    result &= (profile->batching_timeout == MPM_BATCHING_TIMEOUT);
-    result &= (profile->page_locked == MPM_PAGE_LOCKED);
-    result &= (profile->device_id == SC_CUDA_DEFAULT_DEVICE);
-    result &= (profile->cuda_streams == MPM_CUDA_STREAMS);
-
- end:
-    SCCudaHlCleanProfiles();
-
-    if (de_ctx != NULL)
-        DetectEngineCtxFree(de_ctx);
-    MpmDeInitYamlConf();
-    SCCudaHlRestoreBackupRegisteredProfiles();
-
-    return result;
-}
-
-static int MpmTest07(void)
-{
-    char *conf =
-        "%YAML 1.1\n"
-        "---\n"
-        "cuda:\n"
-        "  - mpm:\n"
-        "      packet_buffer_limit:\n"
-        "      packet_size_limit:\n"
-        "      packet_buffers:\n"
-        "      batching_timeout:\n"
-        "      page_locked:\n"
-        "      device_id:\n"
-        "      cuda_streams:\n";
-
-    DetectEngineCtx *de_ctx = NULL;
-    int result = 0;
-
-    if (MpmInitYamlConf(conf) == -1)
-        return 0;
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL)
-        goto end;
-
-    SCCudaHlBackupRegisteredProfiles();
-    SCCudaHlGetYamlConf();
-    MpmCudaConf *profile = SCCudaHlGetProfile("mpm");
-    if (profile == NULL) {
-        printf("Error retrieving mpm profile\n");
-        goto end;
-    }
-
-    result = (profile->packet_buffer_limit == MPM_PACKET_BUFFER_LIMIT);
-    result &= (profile->packet_size_limit == MPM_PACKET_SIZE_LIMIT);
-    result &= (profile->packet_buffers == MPM_PACKET_BUFFERS);
-    result &= (profile->batching_timeout == MPM_BATCHING_TIMEOUT);
-    result &= (profile->page_locked == MPM_PAGE_LOCKED);
-    result &= (profile->device_id == SC_CUDA_DEFAULT_DEVICE);
-    result &= (profile->cuda_streams == MPM_CUDA_STREAMS);
-
- end:
-    SCCudaHlCleanProfiles();
-
-    if (de_ctx != NULL)
-        DetectEngineCtxFree(de_ctx);
-    MpmDeInitYamlConf();
-    SCCudaHlRestoreBackupRegisteredProfiles();
-
-    return result;
-}
-
-static int MpmTest08(void)
-{
-    char *conf =
-        "%YAML 1.1\n"
-        "---\n"
-        "cuda:\n"
-        "  - mpm:\n"
-        "      packet_size_limit: 2000\n"
-        "      page_locked: disabled\n"
-        "      device_id: 4\n"
-        "      cuda_streams: 8\n";
-
-    DetectEngineCtx *de_ctx = NULL;
-    int result = 0;
-
-    if (MpmInitYamlConf(conf) == -1)
-        return 0;
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL)
-        goto end;
-
-    SCCudaHlBackupRegisteredProfiles();
-    SCCudaHlGetYamlConf();
-    MpmCudaConf *profile = SCCudaHlGetProfile("mpm");
-    if (profile == NULL) {
-        printf("Error retrieving mpm profile\n");
-        goto end;
-    }
-
-    result = (profile->packet_buffer_limit == MPM_PACKET_BUFFER_LIMIT);
-    result &= (profile->packet_size_limit == 2000);
-    result &= (profile->packet_buffers == MPM_PACKET_BUFFERS);
-    result &= (profile->batching_timeout == MPM_BATCHING_TIMEOUT);
-    result &= (profile->page_locked == !MPM_PAGE_LOCKED);
-    result &= (profile->device_id == 4);
-    result &= (profile->cuda_streams == 8);
-
- end:
-    SCCudaHlCleanProfiles();
-
-    if (de_ctx != NULL)
-        DetectEngineCtxFree(de_ctx);
-    MpmDeInitYamlConf();
-    SCCudaHlRestoreBackupRegisteredProfiles();
-
-    return result;
-}
-
-static int MpmTest09(void)
-{
-    char *conf =
-        "%YAML 1.1\n"
-        "---\n"
-        "cuda:\n"
-        "  - mpm:\n";
-
-    DetectEngineCtx *de_ctx = NULL;
-    int result = 0;
-
-    if (MpmInitYamlConf(conf) == -1)
-        return 0;
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL)
-        goto end;
-
-    SCCudaHlBackupRegisteredProfiles();
-    SCCudaHlGetYamlConf();
-    MpmCudaConf *profile = SCCudaHlGetProfile("mpm");
-    if (profile == NULL) {
-        printf("Error retrieving mpm profile\n");
-        goto end;
-    }
-
-    result = (profile->packet_buffer_limit == MPM_PACKET_BUFFER_LIMIT);
-    result &= (profile->packet_size_limit == MPM_PACKET_SIZE_LIMIT);
-    result &= (profile->packet_buffers == MPM_PACKET_BUFFERS);
-    result &= (profile->batching_timeout == MPM_BATCHING_TIMEOUT);
-    result &= (profile->page_locked == MPM_PAGE_LOCKED);
-    result &= (profile->device_id == SC_CUDA_DEFAULT_DEVICE);
-    result &= (profile->cuda_streams == MPM_CUDA_STREAMS);
-
- end:
-    SCCudaHlCleanProfiles();
-
-    if (de_ctx != NULL)
-        DetectEngineCtxFree(de_ctx);
-    MpmDeInitYamlConf();
-    SCCudaHlRestoreBackupRegisteredProfiles();
-
-    return result;
-}
-
-static int MpmTest10(void)
-{
-    char *conf =
-        "%YAML 1.1\n"
-        "---\n"
-        "cuda:\n";
-
-    DetectEngineCtx *de_ctx = NULL;
-    int result = 0;
-
-    if (MpmInitYamlConf(conf) == -1)
-        return 0;
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL)
-        goto end;
-
-    SCCudaHlBackupRegisteredProfiles();
-    SCCudaHlGetYamlConf();
-    MpmCudaConf *profile = SCCudaHlGetProfile("mpm");
-    if (profile == NULL) {
-        printf("Error retrieving mpm profile\n");
-        goto end;
-    }
-
-    result = (profile->packet_buffer_limit == MPM_PACKET_BUFFER_LIMIT);
-    result &= (profile->packet_size_limit == MPM_PACKET_SIZE_LIMIT);
-    result &= (profile->packet_buffers == MPM_PACKET_BUFFERS);
-    result &= (profile->batching_timeout == MPM_BATCHING_TIMEOUT);
-    result &= (profile->page_locked == MPM_PAGE_LOCKED);
-    result &= (profile->device_id == SC_CUDA_DEFAULT_DEVICE);
-    result &= (profile->cuda_streams == MPM_CUDA_STREAMS);
-
- end:
-    SCCudaHlCleanProfiles();
-
-    if (de_ctx != NULL)
-        DetectEngineCtxFree(de_ctx);
-    MpmDeInitYamlConf();
-    SCCudaHlRestoreBackupRegisteredProfiles();
-
-    return result;
-}
-
-static int MpmTest11(void)
-{
-    char *conf =
-        "%YAML 1.1\n"
-        "---\n";
-
-    DetectEngineCtx *de_ctx = NULL;
-    int result = 0;
-
-    if (MpmInitYamlConf(conf) == -1)
-        return 0;
-
-    de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL)
-        goto end;
-
-    SCCudaHlBackupRegisteredProfiles();
-    SCCudaHlGetYamlConf();
-    MpmCudaConf *profile = SCCudaHlGetProfile("mpm");
-    if (profile == NULL) {
-        printf("Error retrieving mpm profile\n");
-        goto end;
-    }
-
-    result = (profile->packet_buffer_limit == MPM_PACKET_BUFFER_LIMIT);
-    result &= (profile->packet_size_limit == MPM_PACKET_SIZE_LIMIT);
-    result &= (profile->packet_buffers == MPM_PACKET_BUFFERS);
-    result &= (profile->batching_timeout == MPM_BATCHING_TIMEOUT);
-    result &= (profile->page_locked == MPM_PAGE_LOCKED);
-    result &= (profile->device_id == SC_CUDA_DEFAULT_DEVICE);
-    result &= (profile->cuda_streams == MPM_CUDA_STREAMS);
-
- end:
-    SCCudaHlCleanProfiles();
-
-    if (de_ctx != NULL)
-        DetectEngineCtxFree(de_ctx);
-    MpmDeInitYamlConf();
-    SCCudaHlRestoreBackupRegisteredProfiles();
-
-    return result;
-}
-
-#endif /* __SC_CUDA_SUPPORT__ */
 #endif /* UNITTESTS */
 
 void MpmRegisterTests(void) {
@@ -1288,19 +527,5 @@ void MpmRegisterTests(void) {
         }
     }
 
-#ifdef __SC_CUDA_SUPPORT__
-    UtRegisterTest("MpmTest01", MpmTest01, 1);
-    UtRegisterTest("MpmTest02", MpmTest02, 1);
-    UtRegisterTest("MpmTest03", MpmTest03, 1);
-    UtRegisterTest("MpmTest04", MpmTest04, 1);
-    UtRegisterTest("MpmTest05", MpmTest05, 1);
-    UtRegisterTest("MpmTest06", MpmTest06, 1);
-    UtRegisterTest("MpmTest07", MpmTest07, 1);
-    UtRegisterTest("MpmTest08", MpmTest08, 1);
-    UtRegisterTest("MpmTest09", MpmTest09, 1);
-    UtRegisterTest("MpmTest10", MpmTest10, 1);
-    UtRegisterTest("MpmTest11", MpmTest11, 1);
-#endif /* __SC_CUDA_SUPPORT__ */
-
 #endif
 }
index 3981e9b91e230eae5e61f34cc0f6ccf22d07a5bc..1de44f2283dac9c197c7847652b58a1dc73b89aa 100644 (file)
 #define BLOOMSIZE_HIGH          2048    /**< High bloomfilter size for the multi
                                              pattern matcher algorithms */
 
-#define MPM_PACKET_BUFFER_LIMIT 2400
-#define MPM_PACKET_SIZE_LIMIT   1500
-#define MPM_PACKET_BUFFERS      10
-#define MPM_BATCHING_TIMEOUT    1
-#define MPM_PAGE_LOCKED         1
-#define MPM_CUDA_STREAMS        2
-
 enum {
     MPM_NOTSET = 0,
 
@@ -65,9 +58,6 @@ enum {
     MPM_WUMANBER,
     /* bndmq 2 gram */
     MPM_B2G,
-#ifdef __SC_CUDA_SUPPORT__
-    MPM_B2G_CUDA,
-#endif
     /* bndmq 3 gram */
     MPM_B3G,
     MPM_B2GC,
@@ -194,36 +184,12 @@ MpmCtx *MpmFactoryGetMpmCtxForProfile(struct DetectEngineCtx_ *, int32_t, int);
 void MpmFactoryDeRegisterAllMpmCtxProfiles(struct DetectEngineCtx_ *);
 int32_t MpmFactoryIsMpmCtxAvailable(struct DetectEngineCtx_ *, MpmCtx *);
 
-/* macros decides if cuda is enabled for the platform or not */
-#ifdef __SC_CUDA_SUPPORT__
-
-/**
- * \brief Cuda configuration for "mpm" profile.  We can further extend this
- *        to have conf for specific mpms.  For now its common for all mpms.
- */
-typedef struct MpmCudaConf_ {
-    int32_t packet_buffer_limit;
-    uint16_t packet_size_limit;
-    int8_t packet_buffers;
-    double batching_timeout;
-    int8_t page_locked;
-    int8_t device_id;
-    int8_t cuda_streams;
-} MpmCudaConf;
-
-#endif /* __SC_CUDA_SUPPORT__ */
-
 int PmqSetup(PatternMatcherQueue *, uint32_t, uint32_t);
 void PmqMerge(PatternMatcherQueue *src, PatternMatcherQueue *dst);
 void PmqReset(PatternMatcherQueue *);
 void PmqCleanup(PatternMatcherQueue *);
 void PmqFree(PatternMatcherQueue *);
 
-#ifdef __SC_CUDA_SUPPORT__
-MpmCudaConf *MpmCudaConfParse(void);
-void MpmCudaConfCleanup(MpmCudaConf *);
-#endif /* __SC_CUDA_SUPPORT */
-
 void MpmTableSetup(void);
 void MpmRegisterTests(void);
 
index 1fa9d1df3d38413ba8da71d31985c2a3ff5ce5cb..21dacbeeb7086a347cde9bbbb6da48877041c00b 100644 (file)
@@ -32,7 +32,6 @@
 #include "runmode-af-packet.h"
 #include "log-httplog.h"
 #include "output.h"
-#include "cuda-packet-batcher.h"
 #include "detect-engine-mpm.h"
 
 #include "alert-fastlog.h"
@@ -163,111 +162,6 @@ int RunModeSetLiveCaptureAuto(DetectEngineCtx *de_ctx,
         }
     }
 
-#if defined(__SC_CUDA_SUPPORT__)
-    if (PatternMatchDefaultMatcher() == MPM_B2G_CUDA) {
-        ThreadVars *tv_decode1 =
-            TmThreadCreatePacketHandler("Decode",
-                    "pickup-queue", "simple",
-                    "decode-queue1", "simple",
-                    "1slot");
-        if (tv_decode1 == NULL) {
-            SCLogError(SC_ERR_RUNMODE, "TmThreadsCreate failed for Decode1");
-            exit(EXIT_FAILURE);
-        }
-        tm_module = TmModuleGetByName(decode_mod_name);
-        if (tm_module == NULL) {
-            SCLogError(SC_ERR_RUNMODE, "TmModuleGetByName %s failed", decode_mod_name);
-            exit(EXIT_FAILURE);
-        }
-        TmSlotSetFuncAppend(tv_decode1, tm_module, NULL);
-
-        TmThreadSetCPU(tv_decode1, DECODE_CPU_SET);
-
-        if (TmThreadSpawn(tv_decode1) != TM_ECODE_OK) {
-            SCLogError(SC_ERR_RUNMODE, "TmThreadSpawn failed");
-            exit(EXIT_FAILURE);
-        }
-
-        ThreadVars *tv_cuda_PB =
-            TmThreadCreate("CUDA_PB",
-                    "decode-queue1", "simple",
-                    "cuda-pb-queue1", "simple",
-                    "custom", SCCudaPBTmThreadsSlot1, 0);
-        if (tv_cuda_PB == NULL) {
-            SCLogError(SC_ERR_RUNMODE, "TmThreadsCreate failed for CUDA_PB");
-            exit(EXIT_FAILURE);
-        }
-        tv_cuda_PB->type = TVT_PPT;
-
-        tm_module = TmModuleGetByName("CudaPacketBatcher");
-        if (tm_module == NULL) {
-            SCLogError(SC_ERR_RUNMODE, "TmModuleGetByName CudaPacketBatcher failed");
-            exit(EXIT_FAILURE);
-        }
-        TmSlotSetFuncAppend(tv_cuda_PB, tm_module, (void *)de_ctx);
-
-        TmThreadSetCPU(tv_cuda_PB, DETECT_CPU_SET);
-
-        if (TmThreadSpawn(tv_cuda_PB) != TM_ECODE_OK) {
-            SCLogError(SC_ERR_THREAD_SPAWN, "TmThreadSpawn failed");
-            exit(EXIT_FAILURE);
-        }
-
-        ThreadVars *tv_stream1 =
-            TmThreadCreatePacketHandler("Stream1",
-                    "cuda-pb-queue1", "simple",
-                    "stream-queue1", "simple",
-                    "1slot");
-        if (tv_stream1 == NULL) {
-            SCLogError(SC_ERR_RUNMODE, "TmThreadsCreate failed for Stream1");
-            exit(EXIT_FAILURE);
-        }
-        tm_module = TmModuleGetByName("StreamTcp");
-        if (tm_module == NULL) {
-            SCLogError(SC_ERR_RUNMODE, "TmModuleGetByName StreamTcp failed");
-            exit(EXIT_FAILURE);
-        }
-        TmSlotSetFuncAppend(tv_stream1, tm_module, NULL);
-
-        TmThreadSetCPU(tv_stream1, STREAM_CPU_SET);
-
-        if (TmThreadSpawn(tv_stream1) != TM_ECODE_OK) {
-            SCLogError(SC_ERR_THREAD_SPAWN, "TmThreadSpawn failed");
-            exit(EXIT_FAILURE);
-        }
-    } else {
-        ThreadVars *tv_decode1 =
-            TmThreadCreatePacketHandler("Decode & Stream",
-                    "pickup-queue", "simple",
-                    "stream-queue1", "simple",
-                    "varslot");
-        if (tv_decode1 == NULL) {
-            SCLogError(SC_ERR_RUNMODE, "TmThreadsCreate failed for Decode1");
-            exit(EXIT_FAILURE);
-        }
-        tm_module = TmModuleGetByName(decode_mod_name);
-        if (tm_module == NULL) {
-            SCLogError(SC_ERR_RUNMODE, "TmModuleGetByName %s failed", decode_mod_name);
-            exit(EXIT_FAILURE);
-        }
-        TmSlotSetFuncAppend(tv_decode1, tm_module, NULL);
-
-        tm_module = TmModuleGetByName("StreamTcp");
-        if (tm_module == NULL) {
-            SCLogError(SC_ERR_RUNMODE, "TmModuleGetByName StreamTcp failed");
-            exit(EXIT_FAILURE);
-        }
-        TmSlotSetFuncAppend(tv_decode1, tm_module, NULL);
-
-        TmThreadSetCPU(tv_decode1, DECODE_CPU_SET);
-
-        if (TmThreadSpawn(tv_decode1) != TM_ECODE_OK) {
-            SCLogError(SC_ERR_RUNMODE, "TmThreadSpawn failed");
-            exit(EXIT_FAILURE);
-        }
-    }
-
-#else
     ThreadVars *tv_decode1 =
         TmThreadCreatePacketHandler("Decode & Stream",
                 "pickup-queue", "simple",
@@ -297,7 +191,6 @@ int RunModeSetLiveCaptureAuto(DetectEngineCtx *de_ctx,
         SCLogError(SC_ERR_RUNMODE, "TmThreadSpawn failed");
         exit(EXIT_FAILURE);
     }
-#endif
 
     /* always create at least one thread */
     int thread_max = TmThreadGetNbThreads(DETECT_CPU_SET);