[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-kimageshop
Subject: Re: PRNG proposal
From: Matthew Woehlke <mw_triad () users ! sourceforge ! net>
Date: 2008-12-22 22:57:24
Message-ID: gip60k$j9l$1 () ger ! gmane ! org
[Download RAW message or body]
Cyrille Berger wrote:
> Well unfortunately it doesn't seem to have nice white noise property:
>
> I tried various seed, here is one example of the stat I got:
> mean = 9.2188e+18
> max = 1.8447e+19
> min = 3.4784e+13
> median = 9.2184e+18
> std = 5.3239e+18
> var = 2.8344e+37
> (mean - (max+min)/ 2) = -4.6155e+15
>
> The two things I find worrying is the high median, it indicates that half the
> values are in the range [ 9.2184e+18; 1.8447e+19] while the other half is
> spread on [ 3.4784e+13; 9.2184e+18 ]. And in our case, the white noise
> property concerning the mean would (mean - (max+min)/ 2) == 0. The hardest
> white noise property to get right is the autocorrelation.
You seem to have a very specific notion of certain properties you are
looking for! This is probably good, it means you are better able to
judge "high quality" than I am.
Anyway, I suspect this is related to the constants being thrown to
create the initial pseudo-random value, namely that they are still
"relatively" small. I went back and tried some new, much larger numbers
(btw these are all primes, not sure if that's a good thing or not).
I also tried a second variation that uses two slightly different
formulas (and wholly different constants) for the initial permutation,
and then incorporates a perlin-like static permutation table, using a
combination of the two "salts" to twist the bits around. I /think/ this
should generate a much more even distribution. At any rate, it has the
nice property of generating noise that is visually random even in the
low bits (the other implementation is still visually repeated in the low
8 bits... rather badly so, in fact).
Eventually I'd like to try writing some histogram plots into this, but
I'm not sure when I'd be able to get to that. Anyway, I'm attaching my
test program (it shouldn't be overly hard to extract the generator
function, but there are almost 400 lines of permutation tables, so I'm
not going to inline it this time).
If you get a chance to throw you own tests at this, that would be
awesome. (At some point, I suppose we should also try to run a
performance comparison...)
To build, you'll want to comment out the other generators in the
CMakeLists.txt :-).
--
Matthew
Please do not quote my e-mail address unobfuscated in message bodies.
--
This message represents the official view of the voices in my head.
-- Unknown
(found at http://goldmark.org/jeff/stupid-disclaimers/fun.html)
["noise.cpp" (text/plain)]
#include <QtGui>
#include <KApplication>
#include <KCmdLineArgs>
#include <KAboutData>
#include <cstdio>
#include <math.h>
// seed
int p_s = 64687;
// made with:
// seq 0 255 | sort --random-sort | xargs -n1 printf "0x%02x, " \
// | sed 's/\(0x.., \)\{12\}/&\n/g' | sed 's/^/ /' ; echo
const unsigned char salt[16][256] = {
{
0x10, 0x37, 0xff, 0x6b, 0x7f, 0x88, 0x94, 0xdb, 0xd5, 0xd9, 0x9f, 0x82,
0x5d, 0x35, 0xa5, 0x45, 0x1d, 0xca, 0x32, 0x22, 0x36, 0xd8, 0x27, 0x70,
0xab, 0x2e, 0xd7, 0x8f, 0xf2, 0x4f, 0xce, 0x68, 0x14, 0x9e, 0x4b, 0x3c,
0x3a, 0xe2, 0xea, 0xc8, 0x61, 0x0f, 0xe6, 0x5c, 0xf3, 0xcb, 0x21, 0x1f,
0x8c, 0x91, 0xfa, 0x60, 0x8a, 0xaf, 0x7a, 0x96, 0xb6, 0x49, 0x3b, 0xb9,
0x28, 0xa1, 0xe9, 0xad, 0x43, 0x3e, 0xb3, 0x76, 0x2c, 0x06, 0x05, 0x77,
0xb5, 0xf1, 0x46, 0x13, 0x7d, 0x72, 0xbe, 0x5a, 0x52, 0xec, 0xfe, 0x87,
0x56, 0x6c, 0x41, 0xee, 0x8b, 0xb4, 0xb7, 0x02, 0x20, 0xf9, 0xcf, 0xe3,
0x92, 0x79, 0x2d, 0x93, 0x81, 0x1b, 0x71, 0x30, 0x98, 0x4e, 0x59, 0xeb,
0xde, 0x5e, 0x0e, 0x4d, 0xf6, 0xf4, 0xa7, 0x00, 0x15, 0x1a, 0xc5, 0xdf,
0xa9, 0x0d, 0x55, 0x08, 0x38, 0xbc, 0xa6, 0x8e, 0xf7, 0xf5, 0x6f, 0x50,
0x18, 0x47, 0xae, 0xef, 0x29, 0x33, 0x5b, 0xaa, 0xba, 0xd1, 0xd2, 0x23,
0x6e, 0xac, 0xc1, 0x66, 0xe0, 0xc2, 0xed, 0x86, 0x90, 0xc3, 0x40, 0x65,
0xc7, 0x26, 0xe5, 0x7e, 0x9d, 0x31, 0x42, 0x73, 0xd3, 0x6d, 0xd4, 0x2b,
0xb1, 0xfc, 0xc9, 0x01, 0x85, 0x44, 0x09, 0x0c, 0x11, 0xb8, 0x54, 0x99,
0xf0, 0xfd, 0xa3, 0x1e, 0x8d, 0xdd, 0xe7, 0xda, 0x4c, 0x0a, 0x24, 0x39,
0xb2, 0x89, 0xcd, 0x95, 0x75, 0xbd, 0x7b, 0xd6, 0xc0, 0x97, 0x74, 0x80,
0x34, 0x57, 0x2f, 0x64, 0x83, 0x48, 0x07, 0xe4, 0x3f, 0x16, 0x6a, 0x19,
0xbb, 0x04, 0x7c, 0x63, 0xc4, 0x5f, 0xcc, 0x62, 0x9a, 0xdc, 0x51, 0xe8,
0x58, 0xf8, 0xfb, 0xa8, 0x69, 0xa0, 0x78, 0x84, 0x9b, 0x2a, 0x17, 0x1c,
0xa2, 0xd0, 0xa4, 0x67, 0xe1, 0x25, 0xc6, 0x0b, 0xbf, 0x4a, 0xb0, 0x03,
0x53, 0x9c, 0x3d, 0x12
},
{
0xbd, 0x08, 0xb0, 0xbe, 0x6e, 0x9e, 0xb7, 0x3f, 0xff, 0x0f, 0xa3, 0x28,
0x43, 0xe2, 0xe6, 0xc7, 0xa9, 0x02, 0x41, 0x93, 0x6d, 0x84, 0x2c, 0x57,
0x7f, 0x7e, 0x81, 0xd5, 0x65, 0xb5, 0x7c, 0x1c, 0x03, 0xb2, 0x35, 0x79,
0x01, 0xa4, 0x67, 0xf0, 0xf3, 0xf8, 0xe1, 0xbb, 0x8a, 0x2f, 0x71, 0x6f,
0x50, 0xe0, 0xf6, 0x13, 0x07, 0x0d, 0x51, 0x32, 0xef, 0xb4, 0x74, 0xe5,
0xaa, 0x52, 0xeb, 0xe7, 0x1d, 0xa0, 0x3d, 0x48, 0x95, 0x0c, 0xd7, 0xfe,
0xca, 0xc3, 0x6c, 0xde, 0xdf, 0x24, 0x40, 0x59, 0x8c, 0x2e, 0x9c, 0x16,
0x82, 0xf2, 0xee, 0xed, 0x89, 0x4a, 0x49, 0x76, 0x61, 0x36, 0xa1, 0xaf,
0xea, 0x39, 0x47, 0x0b, 0x86, 0xac, 0x66, 0x19, 0x55, 0x11, 0x88, 0xda,
0xd4, 0xfd, 0x4d, 0xf1, 0x10, 0x6a, 0x8d, 0x37, 0x64, 0xb9, 0x5d, 0x8e,
0x8b, 0x7d, 0xfb, 0x21, 0xcc, 0x17, 0xf9, 0xab, 0x60, 0xdd, 0x4f, 0x25,
0xbc, 0x5f, 0xa5, 0x22, 0xfa, 0xcb, 0x15, 0x45, 0x91, 0x1a, 0x2b, 0x63,
0x80, 0x3a, 0x85, 0x8f, 0x42, 0x7b, 0x62, 0x70, 0xec, 0x1b, 0xad, 0xd2,
0xfc, 0x9a, 0x99, 0x72, 0xe4, 0xd8, 0x18, 0xd9, 0x54, 0x53, 0xc9, 0x5a,
0xc4, 0xd3, 0x29, 0x44, 0x83, 0x3b, 0x30, 0xbf, 0x1e, 0x04, 0xce, 0x75,
0x90, 0x87, 0x7a, 0xb3, 0x26, 0x5e, 0x58, 0xe8, 0xae, 0xf7, 0x6b, 0xe3,
0x4e, 0x94, 0x69, 0xb1, 0x96, 0x46, 0x31, 0xc8, 0x05, 0x27, 0xb6, 0xcd,
0xe9, 0xdc, 0x56, 0x4b, 0x38, 0x2d, 0x14, 0xc0, 0x12, 0x0e, 0x9d, 0xba,
0x09, 0x06, 0x98, 0x77, 0xa6, 0x3c, 0x33, 0x20, 0x2a, 0xd1, 0x1f, 0xf5,
0xa2, 0xb8, 0xc2, 0x00, 0xc1, 0xc6, 0xf4, 0x5b, 0xa8, 0x0a, 0xd6, 0x34,
0x9b, 0xc5, 0x92, 0x73, 0x68, 0x5c, 0x23, 0x3e, 0x9f, 0x97, 0xd0, 0xa7,
0xcf, 0x78, 0x4c, 0xdb,
},
{
0x13, 0x4c, 0x58, 0x69, 0x5e, 0xe2, 0xc1, 0xc2, 0x01, 0x66, 0xe3, 0x08,
0xaa, 0xc8, 0xcb, 0xca, 0xb9, 0xa5, 0x35, 0x60, 0x2a, 0xdf, 0x97, 0x76,
0x50, 0xcc, 0xbe, 0x93, 0x56, 0x74, 0x94, 0x3d, 0x47, 0x3c, 0xc4, 0x9c,
0xa7, 0xe9, 0x52, 0x9b, 0xeb, 0x11, 0xd6, 0xa3, 0x1e, 0x1d, 0xa0, 0x24,
0xf7, 0xe6, 0xe5, 0x55, 0x85, 0x25, 0xbb, 0xbf, 0x48, 0x39, 0x8f, 0xc6,
0xf1, 0x7a, 0x8b, 0x57, 0x31, 0xc7, 0x27, 0xba, 0x68, 0x17, 0xb8, 0x0d,
0x1a, 0x2d, 0x2f, 0xce, 0x0c, 0x99, 0xf9, 0x3b, 0x9e, 0x04, 0x2c, 0xa1,
0x1c, 0x1f, 0xd0, 0xf0, 0x79, 0xff, 0x98, 0xd8, 0x51, 0xb0, 0x16, 0xda,
0x67, 0x5d, 0xae, 0x33, 0xde, 0xc0, 0x10, 0x8d, 0x02, 0x87, 0x8a, 0xb2,
0x95, 0xa8, 0xf3, 0x18, 0x41, 0x0f, 0x36, 0x6e, 0xbc, 0x71, 0xb3, 0x78,
0xf6, 0x12, 0xd5, 0x46, 0xe0, 0xb4, 0xd7, 0xbd, 0x53, 0x6b, 0x7f, 0xfc,
0xee, 0x84, 0xaf, 0x5c, 0xec, 0xdc, 0x88, 0x83, 0x22, 0x86, 0x44, 0x8c,
0xb7, 0x09, 0x42, 0x28, 0x77, 0x03, 0x72, 0xdd, 0x7b, 0xf5, 0x43, 0x15,
0x65, 0x0e, 0x89, 0x92, 0x49, 0xad, 0x0a, 0x6c, 0xc9, 0xac, 0xea, 0x2e,
0x1b, 0x9d, 0x9f, 0xc3, 0xef, 0x05, 0x23, 0x06, 0x9a, 0x6f, 0xd9, 0xd1,
0xab, 0xb6, 0x34, 0x59, 0xd2, 0x81, 0x3f, 0x7d, 0x6a, 0xc5, 0x14, 0xfd,
0x30, 0x61, 0x6d, 0x37, 0x40, 0xa6, 0xb1, 0x62, 0x2b, 0xe4, 0xfe, 0x5a,
0xf4, 0x0b, 0x5f, 0x90, 0xf2, 0x38, 0x26, 0xb5, 0x4d, 0x4e, 0x20, 0xdb,
0x3a, 0x4f, 0x45, 0xfb, 0x82, 0x54, 0xed, 0xa9, 0x7c, 0xfa, 0xa2, 0x19,
0x21, 0xa4, 0xe8, 0x4b, 0x5b, 0x75, 0x29, 0x07, 0xcd, 0x64, 0x4a, 0x63,
0x7e, 0xe1, 0x00, 0x80, 0xcf, 0x91, 0x73, 0xe7, 0x3e, 0x32, 0x70, 0xf8,
0x8e, 0xd3, 0x96, 0xd4,
},
{
0xa1, 0x41, 0x2e, 0x2c, 0x8a, 0x58, 0x01, 0x1e, 0x56, 0xe9, 0x22, 0x89,
0x75, 0x30, 0xff, 0x08, 0x70, 0xbd, 0x4f, 0xda, 0xdf, 0xed, 0xd7, 0xc8,
0x1b, 0x44, 0x1d, 0x81, 0x93, 0x48, 0xb9, 0x4c, 0x4d, 0xf9, 0xb4, 0x7e,
0x68, 0x97, 0xaf, 0x03, 0x20, 0xbe, 0xa8, 0xf8, 0x11, 0xa6, 0x86, 0xb1,
0x5a, 0x5b, 0xab, 0xea, 0x1f, 0xb8, 0x15, 0x00, 0x61, 0x9b, 0x6f, 0x47,
0x5d, 0x2f, 0xa5, 0x0a, 0xe0, 0xe2, 0x95, 0x3f, 0x8b, 0xd3, 0x34, 0x90,
0xd5, 0xaa, 0x8e, 0x7a, 0x83, 0x3d, 0xb7, 0x78, 0x8f, 0x04, 0x3c, 0x2d,
0xf0, 0xd1, 0x2a, 0x84, 0x65, 0xcb, 0xee, 0x5f, 0x2b, 0x5c, 0x9a, 0xa0,
0x62, 0x21, 0xc1, 0xc6, 0x52, 0xfb, 0x29, 0xfc, 0x8d, 0x55, 0xd4, 0xb2,
0x0b, 0x14, 0xc7, 0xf6, 0xad, 0x49, 0x17, 0x57, 0xc9, 0x87, 0x06, 0x99,
0xa3, 0xc4, 0x05, 0xf3, 0xdb, 0x76, 0xde, 0x18, 0xf1, 0x9f, 0xb6, 0xbc,
0xcd, 0x79, 0x71, 0xc0, 0x23, 0x16, 0xb3, 0x4e, 0xac, 0x74, 0x46, 0x33,
0xe7, 0xfd, 0x80, 0x50, 0xbf, 0x6e, 0x9c, 0x43, 0x3e, 0x3a, 0xe5, 0x0f,
0x69, 0x94, 0x96, 0x85, 0x10, 0x6d, 0xf4, 0x31, 0x66, 0x9d, 0x59, 0x51,
0x1c, 0x13, 0x7d, 0x27, 0x63, 0xf5, 0xe4, 0xd8, 0x98, 0x8c, 0xa7, 0xe8,
0x54, 0x7f, 0xeb, 0xce, 0x25, 0xca, 0x92, 0x4b, 0xd9, 0x39, 0x6b, 0x73,
0xd2, 0xa9, 0xa4, 0xec, 0x24, 0xfe, 0xd0, 0x0e, 0x02, 0x32, 0x0d, 0x64,
0xdd, 0x45, 0x19, 0x38, 0x6c, 0x9e, 0x72, 0x88, 0x77, 0x12, 0xe3, 0x91,
0xd6, 0xe1, 0x7c, 0xae, 0x60, 0x5e, 0xb0, 0x53, 0xfa, 0xf7, 0x35, 0xef,
0xba, 0x3b, 0x36, 0x42, 0x1a, 0xcf, 0x82, 0xe6, 0xc2, 0x0c, 0x09, 0xbb,
0xc5, 0xa2, 0x37, 0xc3, 0x6a, 0x7b, 0xcc, 0x07, 0xb5, 0xf2, 0x28, 0xdc,
0x40, 0x67, 0x26, 0x4a,
},
{
0x46, 0x54, 0x8e, 0xa5, 0xd1, 0x1a, 0xb2, 0xd3, 0x60, 0x2d, 0x67, 0x62,
0x11, 0x3f, 0x70, 0x08, 0x6c, 0x7d, 0x18, 0x00, 0xc8, 0x4b, 0x66, 0x81,
0x57, 0xc1, 0x4f, 0x03, 0x7a, 0xc3, 0x73, 0xc6, 0x94, 0x95, 0xf2, 0x98,
0xcd, 0xbe, 0xbc, 0xd6, 0x96, 0x58, 0xf3, 0x5c, 0x77, 0x1f, 0xb6, 0x36,
0x09, 0x89, 0x43, 0x68, 0xdd, 0xf8, 0xd9, 0x13, 0xc0, 0x40, 0x7f, 0x91,
0x1e, 0x63, 0xfe, 0x44, 0x74, 0xe8, 0x22, 0x20, 0xbf, 0x14, 0xef, 0xe6,
0x51, 0x01, 0x90, 0xd2, 0x4d, 0x3d, 0x7b, 0x78, 0xd4, 0x92, 0xab, 0xdc,
0xb3, 0xa9, 0xbb, 0x28, 0xe4, 0x0d, 0xd7, 0xae, 0x5f, 0xb9, 0x10, 0xee,
0x3c, 0x9a, 0xfc, 0xed, 0xa1, 0x7e, 0x27, 0xdb, 0x12, 0x3a, 0xb1, 0xc5,
0xa2, 0x04, 0xaf, 0x6a, 0x4c, 0xa7, 0x1c, 0xce, 0xfb, 0x99, 0xcf, 0xe9,
0x17, 0xe5, 0x82, 0x2c, 0xba, 0x0e, 0x8f, 0x41, 0x56, 0x7c, 0xd5, 0x76,
0xc7, 0xa4, 0xa0, 0x47, 0x5e, 0xd0, 0xc9, 0x8b, 0x65, 0xe1, 0x07, 0x85,
0x9c, 0x8d, 0xdf, 0x29, 0x38, 0xc2, 0x2b, 0xad, 0xec, 0x5a, 0x6b, 0x53,
0xb5, 0x59, 0xac, 0x4a, 0x34, 0x8a, 0x25, 0x75, 0xf1, 0x87, 0xb0, 0x69,
0xc4, 0x30, 0x02, 0x42, 0xda, 0x93, 0x32, 0xf0, 0x0f, 0xbd, 0x8c, 0x2a,
0x79, 0x97, 0x45, 0x1b, 0x15, 0xf9, 0x52, 0x5b, 0x80, 0x31, 0xd8, 0x0b,
0x9e, 0xe0, 0xe2, 0xf6, 0xe3, 0x6f, 0xea, 0x1d, 0x2f, 0xa8, 0xcb, 0x06,
0x48, 0x49, 0x55, 0x0c, 0xff, 0xf5, 0x6e, 0xf4, 0x24, 0x4e, 0xaa, 0x33,
0x84, 0x2e, 0x39, 0x64, 0x35, 0xfd, 0x72, 0xe7, 0x50, 0x3b, 0xde, 0xb4,
0x5d, 0x0a, 0x61, 0xa3, 0x9b, 0x3e, 0xb7, 0x9d, 0xb8, 0x83, 0x05, 0x16,
0x86, 0xfa, 0x23, 0x26, 0x21, 0x88, 0x6d, 0x19, 0xeb, 0x9f, 0x37, 0xca,
0xf7, 0xcc, 0x71, 0xa6,
},
{
0xc8, 0x2c, 0x39, 0x4a, 0x83, 0x9d, 0x3e, 0xe7, 0x62, 0x4f, 0xad, 0x1f,
0xdd, 0x8e, 0xed, 0x97, 0x73, 0x64, 0xbf, 0x80, 0x65, 0xea, 0x89, 0x5b,
0x26, 0xaf, 0xda, 0xfb, 0x08, 0x9c, 0x20, 0xbc, 0x68, 0xe9, 0x84, 0xef,
0x81, 0xcb, 0x86, 0xa2, 0x11, 0xaa, 0x79, 0x77, 0x6a, 0xae, 0xd8, 0x6f,
0x9e, 0x55, 0xac, 0xe1, 0x33, 0xf5, 0x42, 0x5a, 0xcc, 0xff, 0x0f, 0x7d,
0x74, 0xa3, 0x2d, 0x30, 0x31, 0xc4, 0x4c, 0x12, 0x96, 0x85, 0x72, 0x50,
0x4d, 0x7c, 0xa6, 0x8f, 0x8c, 0xb0, 0xd3, 0x1e, 0x40, 0x04, 0x60, 0x5f,
0x01, 0xce, 0x23, 0x76, 0x52, 0xde, 0xfc, 0x91, 0x51, 0x00, 0x1b, 0x35,
0x0d, 0x03, 0x05, 0x02, 0x41, 0xfe, 0xc6, 0x6e, 0x4e, 0x44, 0x59, 0xc5,
0x66, 0x82, 0xf3, 0xf7, 0x63, 0xb5, 0x58, 0x69, 0x71, 0x87, 0xf4, 0xe3,
0xd7, 0xb3, 0x3a, 0xc1, 0x37, 0x99, 0x9a, 0xf8, 0xb7, 0x5e, 0x28, 0xd1,
0x27, 0x2a, 0x15, 0xf9, 0xa7, 0xf1, 0x38, 0x06, 0x46, 0x0b, 0x45, 0x1d,
0x61, 0xdc, 0x18, 0xba, 0x47, 0xa4, 0xe6, 0x6b, 0x7e, 0x36, 0x53, 0x95,
0x5d, 0xe5, 0xee, 0xa0, 0x98, 0xb2, 0xb4, 0x19, 0x67, 0x94, 0xdb, 0xb6,
0x3b, 0xe2, 0x78, 0x3d, 0xd4, 0x0a, 0xc9, 0xbd, 0x09, 0x43, 0x16, 0x34,
0xf6, 0x24, 0x3f, 0x1c, 0xe8, 0x29, 0x25, 0xa1, 0xd9, 0x4b, 0xca, 0x54,
0x7a, 0xd0, 0x8d, 0x14, 0x0e, 0xa8, 0x17, 0x90, 0x32, 0xeb, 0xd2, 0xa9,
0xd6, 0x2e, 0x22, 0x0c, 0xc0, 0x5c, 0x57, 0x49, 0x93, 0xd5, 0xa5, 0xab,
0x13, 0xb9, 0x75, 0xc2, 0xe4, 0xec, 0x70, 0x48, 0x6c, 0xc3, 0xb1, 0x6d,
0x8a, 0xf0, 0xf2, 0x10, 0x9f, 0x9b, 0x21, 0xcf, 0x1a, 0x07, 0x7f, 0xbe,
0xe0, 0x7b, 0xfd, 0x8b, 0xb8, 0x3c, 0x88, 0xcd, 0xc7, 0xbb, 0xdf, 0xfa,
0x56, 0x2f, 0x2b, 0x92,
},
{
0xa7, 0x38, 0xf0, 0x7a, 0xf6, 0x9a, 0x39, 0x7c, 0xee, 0x6e, 0xe0, 0x84,
0x70, 0x02, 0x2b, 0x77, 0x63, 0x42, 0x16, 0xdd, 0x14, 0xbb, 0x19, 0xfb,
0xb2, 0x0b, 0x46, 0x59, 0x1d, 0x4c, 0x08, 0xf7, 0x2c, 0x5d, 0x7d, 0x18,
0x61, 0xda, 0x3e, 0x8b, 0x96, 0xa2, 0x25, 0x7e, 0xaf, 0x3f, 0x32, 0x1e,
0x26, 0xb5, 0xcb, 0x86, 0x49, 0x83, 0xd8, 0xe2, 0x55, 0x97, 0xa9, 0x74,
0x10, 0xd2, 0x44, 0x8e, 0x00, 0xfe, 0x5f, 0xad, 0x5c, 0x27, 0x71, 0x43,
0x56, 0xfa, 0xc7, 0xa0, 0x2f, 0xba, 0xc4, 0xd4, 0xf4, 0x2a, 0x89, 0xef,
0x04, 0x47, 0x1b, 0x1c, 0x29, 0xb6, 0xaa, 0x09, 0x65, 0xe7, 0x9b, 0x75,
0xc5, 0x12, 0x58, 0x80, 0x9c, 0xc8, 0xe4, 0x28, 0x06, 0xff, 0x81, 0xcf,
0x0d, 0x99, 0xe1, 0x33, 0xfd, 0xf3, 0xdf, 0x1f, 0x73, 0xec, 0x1a, 0x50,
0x78, 0xd3, 0x91, 0x92, 0x3b, 0xab, 0xa5, 0x30, 0xd5, 0x69, 0x6b, 0x8a,
0x79, 0x62, 0x67, 0x8f, 0x9e, 0x51, 0xb9, 0xae, 0x37, 0x0a, 0x0f, 0xea,
0x60, 0xfc, 0xc9, 0x13, 0x57, 0x66, 0xb3, 0x24, 0x8d, 0xf8, 0x40, 0x5a,
0x07, 0x45, 0x72, 0xa4, 0x34, 0x4f, 0x05, 0xf2, 0xa1, 0xc1, 0x0c, 0x90,
0xe8, 0x15, 0x85, 0x6a, 0xf5, 0xd1, 0x53, 0x68, 0x03, 0xb4, 0x41, 0xb7,
0x0e, 0x20, 0xd7, 0x5b, 0x17, 0x23, 0x54, 0x8c, 0xed, 0x4b, 0x3d, 0xc3,
0xa6, 0xcd, 0x5e, 0xcc, 0xbf, 0x76, 0xf1, 0xca, 0x6d, 0x87, 0x22, 0xe5,
0x2e, 0xde, 0x82, 0xd6, 0x01, 0x9f, 0xb1, 0xd0, 0xc6, 0x3a, 0x94, 0xdb,
0x4a, 0x36, 0x64, 0xce, 0xbe, 0xe6, 0x2d, 0xbc, 0xa8, 0x95, 0xe9, 0x35,
0x88, 0x98, 0x21, 0xa3, 0x7b, 0xe3, 0xc0, 0xf9, 0xb0, 0xac, 0x6c, 0xeb,
0x31, 0x6f, 0x4d, 0xbd, 0xc2, 0x48, 0x4e, 0x52, 0x3c, 0x9d, 0x93, 0xd9,
0xdc, 0xb8, 0x11, 0x7f,
},
{
0x75, 0x83, 0x4b, 0xd5, 0x14, 0x3c, 0x0f, 0x3b, 0xe7, 0x6c, 0x22, 0x4a,
0x91, 0xbd, 0xca, 0x43, 0xa0, 0xab, 0xd9, 0xd2, 0xa5, 0x54, 0x7a, 0xa6,
0x42, 0x41, 0x18, 0xad, 0x37, 0xb6, 0xff, 0xb3, 0x33, 0x00, 0x86, 0x06,
0x81, 0xfb, 0xec, 0x11, 0x7b, 0xe4, 0x74, 0x32, 0x46, 0x1b, 0x72, 0xb0,
0x93, 0x8c, 0xb9, 0xc7, 0xcf, 0x5d, 0x2b, 0xe6, 0x25, 0x9f, 0xe5, 0xf9,
0xf2, 0x6f, 0x9c, 0x15, 0xc5, 0xd0, 0xfd, 0x38, 0x89, 0xa4, 0x73, 0x3a,
0x08, 0x5e, 0xd4, 0x8a, 0xd3, 0x26, 0x47, 0xc0, 0x10, 0x78, 0x02, 0xaa,
0x19, 0x4e, 0xae, 0x65, 0xf1, 0xe0, 0x9d, 0xf0, 0x2e, 0x8f, 0x21, 0xc6,
0x97, 0x3e, 0x90, 0x39, 0xfc, 0x61, 0x50, 0xbe, 0x70, 0xdf, 0x44, 0xef,
0x52, 0x28, 0xc4, 0xb4, 0xa1, 0x80, 0x5a, 0x5c, 0x92, 0x95, 0x27, 0x34,
0x77, 0x1f, 0xce, 0x6a, 0xcd, 0x88, 0x04, 0x57, 0x58, 0xb7, 0xc8, 0x5b,
0x0b, 0x6d, 0xea, 0x84, 0x7c, 0x56, 0x0a, 0xfe, 0xbc, 0x9b, 0x69, 0xf5,
0xc3, 0x3d, 0xa8, 0x12, 0xe9, 0x6b, 0x7d, 0x40, 0x7e, 0x53, 0xb2, 0x59,
0x4d, 0x36, 0xa9, 0x31, 0xee, 0x79, 0x87, 0x5f, 0x7f, 0x2f, 0xe3, 0x17,
0x3f, 0x1d, 0x8d, 0x01, 0x1e, 0x2c, 0xda, 0x1c, 0x07, 0xf4, 0x24, 0x99,
0xd6, 0x13, 0x9e, 0x2d, 0xdd, 0xfa, 0x4c, 0x60, 0xac, 0xa3, 0x6e, 0x85,
0xd8, 0xcb, 0x76, 0x8e, 0xf7, 0xeb, 0xe2, 0x49, 0x98, 0x64, 0x9a, 0x55,
0x67, 0xf3, 0xed, 0xf6, 0x0e, 0xb1, 0xa7, 0xba, 0xa2, 0x1a, 0x05, 0x20,
0xde, 0xb5, 0xbf, 0x8b, 0xb8, 0xe8, 0x71, 0xc1, 0x68, 0x16, 0xc2, 0x35,
0xd7, 0xcc, 0xc9, 0x29, 0x4f, 0x09, 0xd1, 0x45, 0x30, 0x66, 0x62, 0x48,
0x03, 0xe1, 0x63, 0xf8, 0xdc, 0x82, 0x2a, 0x0c, 0x96, 0xaf, 0xdb, 0x0d,
0x51, 0x23, 0xbb, 0x94,
},
{
0xbc, 0xb1, 0x94, 0xc9, 0x95, 0xc6, 0x15, 0xb5, 0x0a, 0xfa, 0x5e, 0x64,
0x59, 0x34, 0xc0, 0x52, 0x30, 0xf0, 0x10, 0x97, 0xc5, 0x48, 0x67, 0xd6,
0x5f, 0x38, 0x06, 0x50, 0xe4, 0x9b, 0xb6, 0xed, 0x7b, 0x74, 0x9e, 0x01,
0x5d, 0x55, 0x58, 0xcd, 0xf9, 0xf5, 0x5a, 0x3e, 0x2b, 0x4d, 0xcb, 0x0f,
0xd1, 0xd4, 0xe2, 0x0d, 0x3c, 0xac, 0xef, 0xdf, 0x8b, 0x9f, 0x92, 0xae,
0xaf, 0xf6, 0xa8, 0xbe, 0x43, 0xd7, 0x84, 0x8d, 0x85, 0xe5, 0x93, 0x8f,
0xfc, 0x65, 0x29, 0x2e, 0xbf, 0xd5, 0xba, 0x40, 0xff, 0x1f, 0xa3, 0x23,
0x3a, 0x1c, 0xca, 0xd2, 0xce, 0x62, 0xec, 0x9c, 0xa4, 0x0e, 0x6e, 0x26,
0x71, 0xbb, 0x1a, 0xc4, 0xc1, 0xf7, 0x1d, 0xe0, 0x02, 0xa9, 0xf8, 0x08,
0x42, 0x8a, 0x39, 0x82, 0x32, 0xa0, 0x1e, 0x6f, 0x35, 0x2f, 0xf2, 0xb8,
0x45, 0xaa, 0x1b, 0x6d, 0x6c, 0xfe, 0xda, 0x16, 0x72, 0xad, 0x70, 0x3b,
0xb2, 0x7a, 0x3d, 0x5c, 0x13, 0xdc, 0xb9, 0x51, 0x88, 0x87, 0x9a, 0x6b,
0xdd, 0xfb, 0x0b, 0xb4, 0x49, 0xbd, 0xd8, 0xa6, 0x2c, 0x2a, 0xc3, 0x25,
0x09, 0x9d, 0x78, 0x80, 0xee, 0xe7, 0x76, 0xc7, 0x22, 0x3f, 0xd3, 0x11,
0xcf, 0x63, 0xa7, 0x07, 0xde, 0x4e, 0x37, 0x73, 0x03, 0x5b, 0xd0, 0xe3,
0x46, 0x27, 0x68, 0xf3, 0x66, 0xe6, 0x69, 0x7e, 0xe8, 0x17, 0xdb, 0x56,
0x20, 0x8c, 0xe9, 0x05, 0x8e, 0x00, 0x2d, 0x89, 0xd9, 0xf4, 0xa5, 0x53,
0x4a, 0x19, 0x21, 0x18, 0x6a, 0xea, 0x36, 0xc2, 0x57, 0xa2, 0x41, 0x86,
0xa1, 0x47, 0x91, 0xab, 0x90, 0x75, 0x60, 0x83, 0xe1, 0xfd, 0x0c, 0xb3,
0x7f, 0x7d, 0x31, 0x4c, 0x61, 0xf1, 0x28, 0xc8, 0xb0, 0x4b, 0x54, 0xeb,
0x33, 0x99, 0x44, 0x98, 0x4f, 0x96, 0x04, 0x79, 0x7c, 0x12, 0xcc, 0x24,
0x81, 0xb7, 0x77, 0x14,
},
{
0x03, 0xb8, 0x90, 0x2b, 0xd8, 0x6f, 0x8a, 0xcc, 0xb2, 0xfc, 0xe1, 0x9c,
0xd5, 0x46, 0x4c, 0x7c, 0x58, 0x4d, 0x36, 0xe6, 0xbe, 0xa7, 0xf1, 0x0b,
0xcf, 0x09, 0x15, 0xca, 0x14, 0xd0, 0x3f, 0x64, 0xa6, 0x81, 0x4a, 0x68,
0x0a, 0xa9, 0xe5, 0xf2, 0xae, 0xf8, 0x5e, 0x9e, 0x06, 0x52, 0x70, 0x65,
0xef, 0xed, 0x41, 0xb6, 0x13, 0x7e, 0x93, 0x45, 0x16, 0x4b, 0x66, 0x80,
0x04, 0x54, 0x69, 0xc4, 0x59, 0x38, 0xa1, 0x96, 0x5c, 0x44, 0xa0, 0xb3,
0x3d, 0x78, 0xc1, 0xcd, 0x94, 0x27, 0xbb, 0xec, 0xbd, 0xde, 0xb5, 0xa5,
0xb4, 0xc3, 0xa2, 0xad, 0x99, 0x24, 0xb0, 0xfe, 0xf4, 0x8c, 0x7b, 0x6a,
0xaa, 0xc8, 0xe2, 0xfd, 0x83, 0x22, 0xce, 0x2e, 0x32, 0x47, 0x86, 0x4e,
0x33, 0x95, 0x6e, 0xe3, 0x0c, 0x1d, 0x55, 0x49, 0x1e, 0xcb, 0x5f, 0x63,
0xac, 0x30, 0xdf, 0xee, 0x9f, 0x37, 0x20, 0x71, 0x02, 0xd9, 0xdb, 0x40,
0x62, 0x9a, 0x39, 0xe8, 0x67, 0xa3, 0x73, 0xd1, 0x7a, 0xa8, 0xd4, 0x88,
0xa4, 0xbf, 0x2a, 0x61, 0x05, 0x6c, 0x08, 0xe0, 0x19, 0x8f, 0x3c, 0x3e,
0x9d, 0xfb, 0xdc, 0x0f, 0x51, 0x5a, 0xb7, 0x57, 0x23, 0x3b, 0x87, 0x10,
0xe7, 0xc7, 0x42, 0x7f, 0x98, 0xc5, 0x84, 0x6b, 0x07, 0xc2, 0x1c, 0x6d,
0x76, 0x91, 0x74, 0xd3, 0x2c, 0xc0, 0xab, 0xba, 0x1f, 0x5b, 0x82, 0xe4,
0x5d, 0xd2, 0xd7, 0x0e, 0x85, 0x11, 0xeb, 0x9b, 0x28, 0xf0, 0x92, 0x4f,
0x2f, 0x8d, 0x31, 0x89, 0xbc, 0x1b, 0x00, 0x97, 0x21, 0x35, 0x56, 0xb9,
0x79, 0x34, 0x01, 0x48, 0xd6, 0x12, 0x75, 0xf5, 0x0d, 0x60, 0xfa, 0x2d,
0xe9, 0xff, 0x1a, 0x26, 0xf7, 0x3a, 0x25, 0x7d, 0x77, 0xaf, 0x17, 0x29,
0x53, 0xf9, 0xf6, 0x72, 0x8b, 0xc6, 0xc9, 0xb1, 0xea, 0x8e, 0x43, 0xf3,
0xdd, 0x18, 0xda, 0x50,
},
{
0xf9, 0xf3, 0x01, 0x89, 0x6d, 0x37, 0xb8, 0x87, 0x90, 0x4c, 0xc5, 0xfa,
0x64, 0x14, 0x5d, 0xc8, 0x7f, 0x2a, 0x6e, 0x2f, 0xfe, 0xc6, 0xd1, 0xdd,
0x8b, 0xdc, 0x4d, 0x26, 0xf6, 0x9e, 0x05, 0x74, 0x9f, 0xa3, 0xae, 0xb1,
0x0c, 0x8e, 0x24, 0x3d, 0x19, 0xd9, 0x42, 0x28, 0x49, 0x61, 0x18, 0x11,
0xf4, 0xa0, 0x1d, 0x13, 0x7c, 0xb3, 0xee, 0x76, 0xb4, 0xbc, 0xe3, 0xe6,
0xcb, 0xf0, 0xda, 0xce, 0x3a, 0x8f, 0xa5, 0xa2, 0xd4, 0xe0, 0xbe, 0x8c,
0x3e, 0x9d, 0x62, 0x43, 0xc0, 0xec, 0xf2, 0x2e, 0xc7, 0x7b, 0xed, 0x86,
0x1f, 0xfd, 0xa1, 0xd8, 0x96, 0x4a, 0x4b, 0xe4, 0xdf, 0x45, 0x3b, 0x6c,
0x67, 0xc1, 0xaa, 0xb9, 0xaf, 0xab, 0x02, 0x03, 0x97, 0x32, 0xde, 0x5a,
0x82, 0x07, 0xd3, 0x80, 0x9a, 0x78, 0xb6, 0xb5, 0x73, 0xa6, 0x79, 0xe5,
0x8d, 0x9c, 0x81, 0xba, 0xbf, 0x66, 0x44, 0x7d, 0x2b, 0x6a, 0xff, 0x2d,
0xad, 0x41, 0x4e, 0x98, 0x0d, 0xcf, 0x39, 0x7a, 0x88, 0x00, 0x0b, 0x1a,
0x34, 0x8a, 0x63, 0xb0, 0x3c, 0x91, 0x1c, 0x55, 0xa7, 0x2c, 0x9b, 0x3f,
0xfb, 0xf5, 0x68, 0x25, 0x5e, 0x20, 0x93, 0xe2, 0xbd, 0x08, 0xc4, 0x06,
0xd7, 0x83, 0xbb, 0x17, 0x36, 0x69, 0x47, 0x35, 0x60, 0x5c, 0x95, 0x54,
0xf7, 0x23, 0xcc, 0xc3, 0xd0, 0x72, 0xdb, 0x5b, 0x56, 0xe9, 0x58, 0xd2,
0xf1, 0xea, 0xe8, 0x85, 0x65, 0x31, 0x7e, 0xfc, 0x15, 0x04, 0x51, 0x6b,
0x5f, 0x30, 0xe7, 0x46, 0x57, 0x53, 0xeb, 0x59, 0x1e, 0x27, 0xc2, 0x0e,
0x10, 0x16, 0x0a, 0xa9, 0xa4, 0x71, 0x84, 0x1b, 0xb7, 0x0f, 0x40, 0x12,
0x22, 0x99, 0x21, 0xf8, 0x4f, 0xd5, 0xa8, 0x38, 0x50, 0x75, 0x48, 0xc9,
0xb2, 0xac, 0x94, 0x6f, 0x33, 0xcd, 0x52, 0x29, 0xca, 0x70, 0xd6, 0x09,
0x92, 0xef, 0xe1, 0x77,
},
{
0x4f, 0x6c, 0x54, 0x3f, 0xb6, 0x71, 0x3a, 0xc5, 0xc1, 0x81, 0xb2, 0x8b,
0xbf, 0x3b, 0x0a, 0x11, 0x40, 0xd7, 0x7b, 0x77, 0x30, 0xc8, 0xfd, 0xd4,
0xb4, 0xfb, 0x43, 0x00, 0xe8, 0xc0, 0x03, 0xb0, 0x5d, 0x35, 0xe3, 0x17,
0xa5, 0xb3, 0xdb, 0x1c, 0x75, 0x24, 0xce, 0xbd, 0x8e, 0x22, 0x5f, 0xc4,
0x3d, 0x68, 0x55, 0x6b, 0xcd, 0x73, 0x44, 0xac, 0x8d, 0x21, 0x1b, 0xde,
0x4d, 0x79, 0xf2, 0x88, 0x38, 0xca, 0x58, 0x36, 0x1e, 0xb9, 0x0d, 0xa7,
0xf7, 0x64, 0x63, 0x46, 0xd6, 0x96, 0x60, 0xa3, 0x7c, 0x91, 0xa2, 0x2f,
0xae, 0x99, 0x0e, 0x1d, 0xa1, 0x45, 0x13, 0x61, 0xad, 0x10, 0x72, 0x80,
0x9e, 0x49, 0xa9, 0xc7, 0x1f, 0x37, 0xba, 0xea, 0x9f, 0x59, 0x0f, 0xeb,
0xd3, 0xc2, 0x95, 0xe4, 0xbe, 0x86, 0x69, 0xbb, 0xed, 0xab, 0xe6, 0xd8,
0x29, 0x8f, 0x9a, 0x6e, 0x7e, 0xf4, 0xf9, 0x5c, 0x42, 0xfe, 0x19, 0x85,
0x66, 0x51, 0x9d, 0xf6, 0xee, 0x04, 0xaf, 0xe1, 0x02, 0x05, 0xd0, 0x5b,
0xf0, 0xe9, 0x41, 0x76, 0x15, 0xbc, 0xc9, 0xb8, 0x4e, 0xa6, 0xda, 0x32,
0xdf, 0x2c, 0x4a, 0x33, 0xcc, 0x94, 0x27, 0x89, 0x52, 0x31, 0x48, 0x2b,
0xd1, 0xa0, 0x3e, 0xc3, 0xfa, 0x65, 0xd9, 0xf8, 0x97, 0x16, 0xec, 0x7a,
0x8c, 0x87, 0x70, 0xfc, 0x53, 0x50, 0x90, 0x6a, 0x23, 0x14, 0x12, 0x2a,
0x92, 0x93, 0x7d, 0x4b, 0xb5, 0x98, 0xcf, 0xf5, 0x01, 0x56, 0xdc, 0x9c,
0x7f, 0xa4, 0x57, 0x62, 0xe2, 0x5e, 0x6f, 0x74, 0xcb, 0xb7, 0xe5, 0x20,
0x26, 0x3c, 0x1a, 0x2e, 0x78, 0x28, 0x09, 0xe7, 0x0b, 0x47, 0x0c, 0x5a,
0x2d, 0x4c, 0xe0, 0x67, 0x25, 0xa8, 0xd5, 0x8a, 0x6d, 0xb1, 0xff, 0x9b,
0x34, 0x82, 0x18, 0x08, 0x83, 0x84, 0xef, 0xf1, 0xd2, 0x07, 0xaa, 0x06,
0xdd, 0xf3, 0x39, 0xc6,
},
{
0x7d, 0x29, 0xff, 0x38, 0xcf, 0x47, 0x4e, 0xd1, 0x5b, 0x02, 0x1c, 0xa3,
0x88, 0x8c, 0x58, 0x37, 0x20, 0x4f, 0x1a, 0x3f, 0x70, 0x24, 0x6c, 0xeb,
0x72, 0xaf, 0x05, 0xae, 0x1b, 0xd2, 0x46, 0x92, 0x9c, 0x51, 0x79, 0x82,
0xa9, 0xa7, 0x4b, 0x64, 0xf9, 0x69, 0x1d, 0x5a, 0x7a, 0xa2, 0x76, 0xcd,
0x31, 0x08, 0x6d, 0x56, 0xdd, 0x97, 0x18, 0x16, 0x8e, 0x89, 0xdc, 0x9e,
0x48, 0x8b, 0x49, 0xb2, 0x0d, 0x83, 0xf8, 0xaa, 0x53, 0x36, 0xcb, 0xea,
0x9b, 0xec, 0x0b, 0x22, 0xf4, 0xa5, 0xc9, 0x2f, 0x19, 0xdf, 0x3e, 0x41,
0xc6, 0x67, 0xca, 0xbb, 0xe6, 0x7e, 0xc7, 0x09, 0xef, 0x84, 0xcc, 0xbe,
0x81, 0x17, 0xbf, 0x3c, 0xde, 0x4d, 0x61, 0xb8, 0x8f, 0xe9, 0x59, 0xe0,
0xfd, 0xa1, 0xab, 0xce, 0x80, 0x78, 0x43, 0xb9, 0x87, 0x7f, 0x6e, 0xe4,
0x11, 0x5c, 0xd9, 0x91, 0xa0, 0x57, 0x07, 0xfb, 0x25, 0x66, 0xe2, 0x00,
0xe5, 0xb6, 0x7c, 0x2b, 0xfa, 0xb7, 0x14, 0x73, 0x03, 0xa8, 0x39, 0x3a,
0x1f, 0x27, 0x3b, 0xc8, 0xdb, 0x52, 0x7b, 0x8d, 0x77, 0x9d, 0xb5, 0x98,
0x74, 0x9f, 0x5d, 0xb1, 0xf2, 0xf0, 0xc5, 0x6f, 0xf7, 0x23, 0xac, 0x60,
0x04, 0xbd, 0x01, 0x21, 0xa6, 0x13, 0x9a, 0xe1, 0x10, 0x1e, 0x8a, 0xba,
0x50, 0x2c, 0x75, 0xb0, 0x94, 0x0c, 0x28, 0x40, 0xf5, 0xc1, 0xd0, 0x4a,
0x54, 0xfe, 0xc2, 0x5e, 0xed, 0xb4, 0x85, 0x99, 0x62, 0x33, 0x96, 0x6a,
0x86, 0xd6, 0xf6, 0x2a, 0x12, 0x68, 0x42, 0x55, 0x06, 0xc4, 0x95, 0x6b,
0xe7, 0x65, 0xd3, 0xad, 0x63, 0x0a, 0x2e, 0xda, 0x2d, 0xb3, 0x45, 0xfc,
0xd5, 0xe3, 0xee, 0x0e, 0x3d, 0x26, 0xf3, 0x4c, 0x15, 0xa4, 0x93, 0xd8,
0xf1, 0x0f, 0x35, 0xc0, 0x5f, 0xc3, 0x71, 0xd7, 0xbc, 0x34, 0x44, 0xe8,
0x30, 0x90, 0x32, 0xd4,
},
{
0xb7, 0xf3, 0x7d, 0xc3, 0xb6, 0xd8, 0x07, 0x64, 0xde, 0xb0, 0x28, 0x44,
0x9c, 0x4c, 0xe2, 0xf4, 0x35, 0x6e, 0xe4, 0x5e, 0x48, 0x69, 0xa6, 0x87,
0x34, 0x26, 0x25, 0x36, 0xc7, 0x2d, 0xd9, 0xa3, 0x1b, 0x38, 0x53, 0x9b,
0x8f, 0xf0, 0x05, 0x7c, 0x61, 0x94, 0x9e, 0xef, 0x2c, 0x1c, 0xce, 0xeb,
0x5d, 0x03, 0xbb, 0x5c, 0xda, 0xc8, 0xc0, 0xd0, 0xea, 0xc9, 0xcc, 0xa5,
0xbc, 0x51, 0xc6, 0xfa, 0x58, 0xd7, 0x63, 0x7a, 0x76, 0xf8, 0xb5, 0x29,
0x02, 0xd5, 0x59, 0x4b, 0x99, 0x17, 0xdf, 0x66, 0x81, 0x88, 0x0f, 0x54,
0x4d, 0x8d, 0x86, 0x7b, 0x9d, 0xa2, 0x70, 0x13, 0x08, 0xff, 0x2e, 0xfd,
0xbe, 0x00, 0xb8, 0xdd, 0x73, 0x9f, 0xe3, 0x5f, 0xf7, 0x4e, 0x0e, 0x2a,
0x60, 0x62, 0xfc, 0xe9, 0xec, 0x22, 0x56, 0x7f, 0x24, 0x5b, 0x6a, 0x91,
0xc4, 0x93, 0xe7, 0xa7, 0x7e, 0x79, 0xca, 0xe5, 0x98, 0x57, 0xf6, 0x89,
0xba, 0x06, 0xfb, 0xad, 0x37, 0xb3, 0x3a, 0x85, 0x8e, 0x3b, 0x09, 0x16,
0x67, 0x2f, 0x82, 0x6b, 0xf5, 0xa0, 0x77, 0xa9, 0x2b, 0xa8, 0xd3, 0x6c,
0x10, 0x50, 0xaa, 0x96, 0xc1, 0x43, 0xf1, 0xc5, 0x78, 0x12, 0x46, 0xb9,
0x3f, 0xe0, 0xb1, 0x01, 0x0d, 0x3d, 0xd2, 0x72, 0xc2, 0x1a, 0x92, 0x15,
0xe6, 0x83, 0xdc, 0x33, 0x68, 0x84, 0xcf, 0x4f, 0xac, 0x21, 0xf9, 0x0c,
0xa4, 0x1e, 0x75, 0x30, 0x8c, 0xfe, 0x45, 0x41, 0xd6, 0x23, 0x31, 0xdb,
0x19, 0xab, 0x14, 0x55, 0x39, 0x20, 0x32, 0x8a, 0xb2, 0xcb, 0x0b, 0xed,
0x6d, 0xa1, 0xf2, 0x5a, 0x4a, 0x1f, 0xbf, 0x49, 0x97, 0x27, 0xb4, 0xd4,
0x74, 0x40, 0xbd, 0x04, 0x47, 0x9a, 0x90, 0x3c, 0x65, 0x52, 0x42, 0x8b,
0x18, 0x0a, 0x80, 0xae, 0x3e, 0xaf, 0x1d, 0xe1, 0xd1, 0x6f, 0xcd, 0x11,
0xee, 0x95, 0x71, 0xe8,
},
{
0x6c, 0xe9, 0x47, 0x89, 0x2c, 0xe5, 0x7a, 0x70, 0xc0, 0xc1, 0xfa, 0x2d,
0xe4, 0x76, 0xbd, 0x20, 0x48, 0xbb, 0x2f, 0xd9, 0x14, 0x66, 0xb2, 0x1b,
0x52, 0xc9, 0xff, 0x73, 0x6a, 0x1c, 0x57, 0xb4, 0x3a, 0x2b, 0xeb, 0x9e,
0x53, 0x24, 0xe2, 0x7e, 0x9d, 0xf2, 0xa0, 0xd4, 0xed, 0x45, 0x9f, 0x41,
0xfb, 0xc2, 0xc6, 0xf8, 0x4e, 0x4d, 0x02, 0x8f, 0x55, 0x3c, 0x84, 0x74,
0x15, 0x10, 0x82, 0x60, 0x30, 0x5b, 0x7b, 0x58, 0x07, 0xc7, 0xd0, 0x06,
0xdc, 0xe8, 0x31, 0x0c, 0xe7, 0x5c, 0xb0, 0xfd, 0xf7, 0x8a, 0x6d, 0x9a,
0x16, 0xef, 0x98, 0x80, 0x17, 0xd1, 0x92, 0xd2, 0x97, 0xa4, 0xf4, 0x49,
0xcb, 0xc3, 0x43, 0x54, 0x19, 0x90, 0x68, 0x7d, 0x1d, 0xcd, 0xce, 0xb7,
0xa2, 0xdd, 0x75, 0x6f, 0x00, 0xc4, 0xcc, 0x0f, 0x1e, 0x28, 0x23, 0xe0,
0xdb, 0x6e, 0x27, 0xf5, 0xc5, 0xde, 0x44, 0xad, 0xae, 0x51, 0xb3, 0x94,
0x09, 0x3f, 0xf0, 0xbc, 0x95, 0xab, 0xa7, 0x9b, 0xf3, 0xcf, 0x05, 0x50,
0x0e, 0x88, 0x4a, 0x5f, 0xac, 0xa1, 0xe1, 0x11, 0x18, 0x46, 0xca, 0x2e,
0xd8, 0x3e, 0xa8, 0x5a, 0x65, 0xe6, 0xdf, 0xb5, 0xb1, 0xb8, 0x8b, 0x01,
0x77, 0x6b, 0xfc, 0xea, 0x36, 0x03, 0x79, 0x5d, 0x59, 0x3b, 0x35, 0x38,
0x42, 0x5e, 0x33, 0x22, 0x67, 0x83, 0x0d, 0xf9, 0x13, 0x25, 0xaa, 0xf1,
0x1f, 0x8d, 0xd7, 0x21, 0x62, 0x63, 0x86, 0xda, 0xc8, 0xaf, 0x93, 0xa6,
0xb9, 0x72, 0x78, 0x32, 0xd3, 0x26, 0x91, 0x37, 0x0a, 0x8e, 0x96, 0x64,
0xa3, 0x2a, 0xbf, 0x3d, 0xfe, 0x7c, 0xee, 0x7f, 0xbe, 0xba, 0x1a, 0x71,
0xec, 0x4f, 0x56, 0xe3, 0xa9, 0x12, 0x4b, 0xf6, 0x34, 0xd6, 0x39, 0xb6,
0x99, 0x69, 0xd5, 0x40, 0x87, 0x0b, 0xa5, 0x8c, 0x08, 0x29, 0x9c, 0x4c,
0x81, 0x61, 0x85, 0x04,
},
{
0x51, 0x8d, 0x12, 0x57, 0x6a, 0xab, 0x80, 0x9e, 0xac, 0xe0, 0xb0, 0xbc,
0xc6, 0xb6, 0x14, 0xe4, 0xd5, 0xa8, 0x5a, 0x5b, 0xe1, 0x7c, 0x56, 0x55,
0x9d, 0xd0, 0x46, 0x39, 0x22, 0x2b, 0x3b, 0x4b, 0xb4, 0x7b, 0xa5, 0x7a,
0xea, 0x0a, 0x3e, 0x81, 0xdd, 0x61, 0x84, 0xf1, 0xf2, 0x77, 0x0f, 0x90,
0xba, 0xe3, 0x78, 0xd9, 0xcf, 0x73, 0x74, 0xe8, 0x6f, 0x82, 0x1b, 0x85,
0x25, 0x34, 0xde, 0x8b, 0xfa, 0x32, 0x16, 0x4a, 0x47, 0x86, 0x71, 0xa6,
0x4e, 0xa2, 0x95, 0x15, 0x64, 0xe5, 0x38, 0x02, 0xb1, 0xfe, 0x28, 0x68,
0xf6, 0xa0, 0x3f, 0x29, 0x8a, 0xe9, 0x8e, 0x5d, 0xff, 0x7d, 0xb5, 0x88,
0xb9, 0x9f, 0x00, 0x93, 0xa1, 0x2f, 0x5c, 0xbe, 0xeb, 0xf5, 0x2a, 0x5e,
0x83, 0xcd, 0x1c, 0xed, 0x01, 0x48, 0x08, 0xf3, 0xa9, 0xdc, 0x27, 0xb7,
0x94, 0x36, 0x1f, 0x63, 0xad, 0x7e, 0xee, 0x9a, 0x69, 0x75, 0x8f, 0x26,
0xa3, 0x31, 0x49, 0xc7, 0x2e, 0xec, 0x19, 0x1e, 0xca, 0xc8, 0x50, 0x60,
0x0b, 0x3a, 0x30, 0x1d, 0x79, 0x43, 0x66, 0xf9, 0x35, 0x6b, 0xd4, 0x8c,
0x13, 0x04, 0xaf, 0xcc, 0x0e, 0xa7, 0xbb, 0xaa, 0xbf, 0xfd, 0xd1, 0xc9,
0xc3, 0x52, 0xd3, 0xb8, 0x24, 0x41, 0xcb, 0x20, 0xda, 0xc5, 0x58, 0x4f,
0x37, 0xf7, 0x70, 0x21, 0xd2, 0xe6, 0x9b, 0x97, 0x59, 0x5f, 0x18, 0x98,
0x7f, 0xe2, 0xc2, 0x91, 0xf8, 0xc0, 0xb2, 0x67, 0x92, 0x62, 0x1a, 0x44,
0xd6, 0x65, 0x17, 0x03, 0xf4, 0xb3, 0x2c, 0x3d, 0x54, 0x42, 0xef, 0x10,
0x96, 0xc4, 0xfb, 0x76, 0x53, 0x72, 0xdb, 0x89, 0x87, 0x9c, 0x0c, 0x23,
0xe7, 0x05, 0xae, 0x6e, 0xd8, 0xd7, 0xce, 0x4c, 0xa4, 0x0d, 0x6c, 0x33,
0x6d, 0x07, 0x99, 0xc1, 0x3c, 0x11, 0x4d, 0xf0, 0xdf, 0x2d, 0xbd, 0x09,
0x40, 0xfc, 0x45, 0x06,
}
};
quint64 permuteWhole(quint64 n, quint64 a, quint64 b)
{
return ((n * a) + b);
}
quint64 permutePart(quint64 n, int a, quint64 s)
{
int b = a << 3;
int i = (n >> b) & 0xFF;
int j = (s >> b) & 0xFF;
j = (j ^ (j >> 3)) & 0xF;
quint64 m = quint64(0xFF) << b;
return (n & ~m) | (quint64(salt[j][i]) << b);
}
quint64 myRandom(int x, int y, int seed)
{
const quint64 kxn = 427140578808118991; // 1103515249;
const quint64 kyn = 166552399647317237; // 91573268041;
const quint64 kxs = 48058817213113801; // 340660553083;
const quint64 kys = 9206429469018994469;
quint64 n = (quint64(x) * kxn) + (quint64(y) * kyn) + seed;
#if 1
n = permuteWhole(n, 8759824322359, 13);
n = (n >> 32) ^ (n << 32);
n = permuteWhole(n, 200560490131, 2707);
# if 1
// nice way to find big primes:
// factor `dd if=/dev/urandom count=1 ibs=8 | od -t u8 | awk '{print $2}'`
quint64 s = (quint64(x) * kxs) + (quint64(y ^ seed) * kys);
n ^= x ^ (y * 1040097393733);
// printf("n = %016llx, s = %016llx\n", n, s);
n = permutePart(n, 0, s);
n = permutePart(n, 1, s);
n = permutePart(n, 2, s);
n = permutePart(n, 3, s);
n = permutePart(n, 4, s);
n = permutePart(n, 5, s);
n = permutePart(n, 6, s);
n = permutePart(n, 7, s);
// printf("r = %016llx\n", n);
return n;
# else
n ^= x ^ (y * 39916801);
return permuteWhole(n, 26329792769470687, 62017);
# endif
#else
return 0x1000000*(cos(pow(n, 4)) + 1);
#endif
}
//BEGIN Noise
class Noise {
private:
int _wx, _wy;
public:
Noise(int wx, int wy) : _wx(wx), _wy(wy) {}
virtual ~Noise() {}
QImage toImage()
{
QImage img(_wx, _wy, QImage::Format_RGB32);
img.fill(0);
for (int x = 0; x < _wx; ++x) {
for (int y = 0; y < _wy; ++y) {
quint64 c = myRandom(x, y, p_s);
img.setPixel(x, y, qRgb((c>>40)&0xFF, (c>>32)&0xFF, (c>>24)&0xFF));
}
}
return img;
}
};
//END Noise
Noise noise(512, 512);
//BEGIN Widget
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent=0) : QWidget(parent) {}
QSize sizeHint() const { return QSize(512, 512); }
protected:
void paintEvent(QPaintEvent *e)
{
Q_UNUSED(e);
QPainter p(this);
p.drawImage(0, 0, noise.toImage());
}
};
//END Widget
Widget *w;
//BEGIN ParamPicker
class ParamPicker : public QGroupBox
{
Q_OBJECT
public:
ParamPicker(QWidget *parent=0) : QGroupBox("Params", parent)
{
QVBoxLayout *l = new QVBoxLayout;
// label
QLabel *c;
c = new QLabel("Seed");
// seed
QSpinBox *ss = new QSpinBox;
ss->setRange(0, 65535);
ss->setValue(p_s);
connect(ss, SIGNAL(valueChanged(int)), this, SLOT(seedChanged(int)));
// add to layout
l->addWidget(c);
l->addWidget(ss);
setLayout(l);
}
public slots:
void seedChanged(int value) { p_s = value; w->update(); }
};
//END Picker
//BEGIN MyLayout
class MyLayout : public QWidget
{
Q_OBJECT
public:
MyLayout(QWidget *parent=0) : QWidget(parent)
{
w = new Widget; // needed by ColorPicker
QHBoxLayout *l = new QHBoxLayout;
l->addWidget(new ParamPicker());
l->addWidget(w);
setLayout(l);
w->update();
}
};
//END MyLayout
#include "noise.moc"
int main(int argc, char **argv)
{
KAboutData about("noise", 0, ki18n("noise"), "0.1",
ki18n("PRNG test application"),
KAboutData::License_GPL, ki18n("Copyright 2008 Matthew Woehlke"));
about.addAuthor( ki18n("Matthew Woehlke"), KLocalizedString(), "mw_triad@users.sourceforge.net" );
KCmdLineArgs::init(argc, argv, &about);
KApplication app;
KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
MyLayout l;
l.show();
return app.exec();
}
["CMakeLists.txt" (text/plain)]
project(krita-generators-test)
# search packages used by KDE
find_package(KDE4 REQUIRED)
include(KDE4Defaults)
add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS})
include_directories (${KDE4_INCLUDES} ${QT_INCLUDES})
macro(add_generator name)
kde4_add_executable(gen_${name} ${name}.cpp)
target_link_libraries(gen_${name} ${KDE4_KDEUI_LIBS})
endmacro(add_generator name)
add_generator(noise)
add_generator(plasma)
#add_generator(fire)
add_generator(flame)
add_generator(brown)
add_generator(smoke)
_______________________________________________
kimageshop mailing list
kimageshop@kde.org
https://mail.kde.org/mailman/listinfo/kimageshop
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic