Total Changes:

Add different constraint types (decompression speed, compression memory, parameter constraints)
Separate search space by strategy + strategy selection
Memoize results
Real random restarts
Support multiple files
Support Dictionary inputs
Debug Macro for extra printing
diff --git a/programs/bench.c b/programs/bench.c
index 5d5b47a..f5184fa 100644
--- a/programs/bench.c
+++ b/programs/bench.c
@@ -85,7 +85,7 @@
 *  Exceptions
 ***************************************/
 #ifndef DEBUG
-#  define DEBUG 1
+#  define DEBUG 0
 #endif
 #define DEBUGOUTPUT(...) { if (DEBUG) DISPLAY(__VA_ARGS__); }
 
@@ -188,7 +188,7 @@
     ZSTD_CCtx_setParameter(ctx, ZSTD_p_searchLog, comprParams->searchLog);
     ZSTD_CCtx_setParameter(ctx, ZSTD_p_minMatch, comprParams->searchLength);
     ZSTD_CCtx_setParameter(ctx, ZSTD_p_targetLength, comprParams->targetLength);
-    ZSTD_CCtx_setParameter(ctx, ZSTD_p_compressionStrategy, comprParams->strategy);
+    ZSTD_CCtx_setParameter(ctx, ZSTD_p_compressionStrategy , comprParams->strategy);
     ZSTD_CCtx_loadDictionary(ctx, dictBuffer, dictBufferSize);
 }
 
@@ -293,7 +293,7 @@
     BMK_initFn_t initFn, void* initPayload,
     size_t blockCount,
     const void* const * const srcBlockBuffers, const size_t* srcBlockSizes,
-    void* const * const dstBlockBuffers, const size_t* dstBlockCapacities,
+    void** const dstBlockBuffers, size_t* dstBlockCapacities,
     unsigned nbLoops) {
     size_t srcSize = 0, dstSize = 0, ind = 0;
     U64 totalTime;
@@ -338,6 +338,11 @@
                         j, (U32)dstBlockCapacities[j], ZSTD_getErrorName(res));
                 }  else if(firstIter) {
                     dstSize += res;
+                    //Make compressed blocks continuous
+                    if(j != blockCount - 1) {
+                        dstBlockBuffers[j+1] = (void*)((char*)dstBlockBuffers[j] + res);
+                        dstBlockCapacities[j] = res;
+                    }
                 } 
             }
             firstIter = 0;
@@ -370,13 +375,14 @@
     free(state);
 }
 
+/* make option for dstBlocks to be */
 BMK_customTimedReturn_t BMK_benchFunctionTimed(
     BMK_timedFnState_t* cont,
     BMK_benchFn_t benchFn, void* benchPayload,
     BMK_initFn_t initFn, void* initPayload,
     size_t blockCount,
     const void* const* const srcBlockBuffers, const size_t* srcBlockSizes,
-    void* const* const dstBlockBuffers, const size_t* dstBlockCapacities) 
+    void** const dstBlockBuffers, size_t* dstBlockCapacities) 
 {
     U64 fastest = cont->fastestTime;
     int completed = 0;