alek76
Member
Offline
Activity: 93
Merit: 16
|
|
November 05, 2023, 05:55:24 PM Last edit: November 05, 2023, 10:28:35 PM by alek76 |
|
Should add seed to be written in Results.txt fprintf(f, "PubAddress: %s\n", addr.c_str()); fprintf(f, "Seed: %s\n", seed.c_str()); Something like this. So that we can reproduce the same result Experiment with the least significant bits up to 2^30, which seed is more suitable in terms of solution speed. I like your ideas Added new code to mods on Github. Saving Seed to the Result.txt file. Then run with the -s option. Seed for mod 006, key generation methods are different. VanitySearch.exe -stop -t 1 -bits 28 -r 1 -s 45730C0CCA52F09AC21B00E4ADA360E9709152473494E91DFD74B6E11938BF30 12jbtzBb54r97TCwW3G1gCFoumpckRAPdY
The installed SEED works if the -r (rekey) option is present. Updated. Without the -r (rekey) option, the start key is selected with the -start option OR -s option and use -bits option. file Result.txt Seed: 45730C0CCA52F09AC21B00E4ADA360E9709152473494E91DFD74B6E11938BF30 PubAddress: 12jbtzBb54r97TCwW3G1gCFoumpckRAPdY Priv (WIF): p2pkh:KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M82GSgY8p5EkUe Priv (HEX): 0xD916CE8 Seed: B6D88248ED9FA96F42684121433DCACEB655BF37E0B65C007E58D0AD59ADECBF PubAddress: 12jbtzBb54r97TCwW3G1gCFoumpckRAPdY Priv (WIF): p2pkh:KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M82GSgY8p5EkUe Priv (HEX): 0xD916CE8
You can reproduce the result
|
|
|
|
|
|
|
|
"You Asked For Change, We Gave You Coins" -- casascius
|
|
|
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
|
|
|
|
digaran
Copper Member
Hero Member
Offline
Activity: 1330
Merit: 899
🖤😏
|
|
November 05, 2023, 09:37:34 PM |
|
Should add seed to be written in Results.txt fprintf(f, "PubAddress: %s\n", addr.c_str()); fprintf(f, "Seed: %s\n", seed.c_str()); Something like this. So that we can reproduce the same result Experiment with the least significant bits up to 2^30, which seed is more suitable in terms of solution speed. I like your ideas Added new code to mods on Github. Saving Seed to the Result.txt file. Then run with the -s option VanitySearch.exe -stop -t 1 -bits 28 -r 1 -s 45730C0CCA52F09AC21B00E4ADA360E9709152473494E91DFD74B6E11938BF30 12jbtzBb54r97TCwW3G1gCFoumpckRAPdY
The installed SEED works if the -r (rekey) option is present. Updated. Without the -r (rekey) option, the start key is selected with the -start option. file Result.txt Seed: 45730C0CCA52F09AC21B00E4ADA360E9709152473494E91DFD74B6E11938BF30 PubAddress: 12jbtzBb54r97TCwW3G1gCFoumpckRAPdY Priv (WIF): p2pkh:KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M82GSgY8p5EkUe Priv (HEX): 0xD916CE8 Seed: B6D88248ED9FA96F42684121433DCACEB655BF37E0B65C007E58D0AD59ADECBF PubAddress: 12jbtzBb54r97TCwW3G1gCFoumpckRAPdY Priv (WIF): p2pkh:KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M82GSgY8p5EkUe Priv (HEX): 0xD916CE8
You can reproduce the result Am I understanding this correctly that you have found seed collisions? Because I see different seeds with the same key as output, or is this something else?
|
🖤😏
|
|
|
alek76
Member
Offline
Activity: 93
Merit: 16
|
|
November 05, 2023, 10:18:23 PM Last edit: November 05, 2023, 10:44:41 PM by alek76 |
|
Am I understanding this correctly that you have found seed collisions? Because I see different seeds with the same key as output, or is this something else?
This is not a collision. The one that was used is saved. With the -r 1 option you can select the fastest one. If we get lucky.
|
|
|
|
WanderingPhilospher
Full Member
Offline
Activity: 1050
Merit: 219
Shooters Shoot...
|
|
November 05, 2023, 10:47:52 PM |
|
Am I understanding this correctly that you have found seed collisions? Because I see different seeds with the same key as output, or is this something else?
This is not a collision. The one that was used is saved. With the -r 1 option you can select the fastest one. If we get lucky. You should probably explain what you have in code above. You have 2 different seeds and you say saved to result.txt file. So I can see Diagran’s point. Also, explain how any of these seeds or different random options actually help?! Even if one random option is faster by 9 million percent, which would still be minimal in the scheme of things, the hard work still has to be done, taking the private key and transforming it down to the H160. My VBC random is fast; finds a key in a 36 bit range in an avg of 8 seconds. User has option to choose a range or simply enter a bits number such as 66. However, the generation of the random key, and its speed, really doesn’t matter IMO. It takes less than .4 seconds to generate thousands of keys, and yet, the actual computation must begin…the actual work.
|
|
|
|
dextronomous
|
|
November 05, 2023, 11:05:27 PM |
|
Am I understanding this correctly that you have found seed collisions? Because I see different seeds with the same key as output, or is this something else?
This is not a collision. The one that was used is saved. With the -r 1 option you can select the fastest one. If we get lucky. hi there, could you make the github hold your different exe files, so we dont have to compile to test all these mods, i could compile but am a tad late for sleeping i guess. and is this what demining mentiones just wondering /* Magic Mersenne Twister constants */ #define N 624 #define M 397 #define MATRIX_A 0x9908b0dfUL #define UPPER_MASK 0x80000000UL #define LOWER_MASK 0x7fffffffUL Technical Description CVE-2023-39910 The cryptocurrency wallet entropy filling mechanism used in Libbitcoin Explorer 3.0.0–3.6.0 is weak, also known as the Milk Sad problem. Using the Mersenne Twister mt19937 PRNG limits the internal entropy to 32 bits regardless of settings. This allows remote attackers to recover any wallet private keys generated from the entropy results of “bxseed” and steal funds. (Affected users need to transfer funds to a new secure cryptocurrency wallet) is this issue present still in your vanitygen, thanks for the exes.
|
|
|
|
alek76
Member
Offline
Activity: 93
Merit: 16
|
|
November 05, 2023, 11:09:59 PM Last edit: May 01, 2024, 08:38:39 PM by Mr. Big |
|
Also, explain how any of these seeds or different random options actually help?! Even if one random option is faster by 9 million percent, which would still be minimal in the scheme of things, the hard work still has to be done, taking the private key and transforming it down to the H160. My VBC random is fast; finds a key in a 36 bit range in an avg of 8 seconds. User has option to choose a range or simply enter a bits number such as 66. However, the generation of the random key, and its speed, really doesn’t matter IMO. It takes less than .4 seconds to generate thousands of keys, and yet, the actual computation must begin…the actual work.
If loop the seed generation until the Starting key is equal to the target key puzzle bit 32. This takes a long time. We need to know not only the seed. what algorithm was used and the number of rounds. Therefore, I created a function for separating a 512-bit key, one was used as a master key, the other as a chain key. There you can also add serialization and make several keys from a chained key. And make them starting keys. This time is again needed to create the code.
/* Magic Mersenne Twister constants */ #define N 624 #define M 397 #define MATRIX_A 0x9908b0dfUL #define UPPER_MASK 0x80000000UL #define LOWER_MASK 0x7fffffffUL Technical Description CVE-2023-39910 The cryptocurrency wallet entropy filling mechanism used in Libbitcoin Explorer 3.0.0–3.6.0 is weak, also known as the Milk Sad problem. Using the Mersenne Twister mt19937 PRNG limits the internal entropy to 32 bits regardless of settings. This allows remote attackers to recover any wallet private keys generated from the entropy results of “bxseed” and steal funds. (Affected users need to transfer funds to a new secure cryptocurrency wallet) is this issue present still in your vanitygen, thanks for the exes.
I know this very well; this protocol was developed a long time ago. Why are you telling me this again??? 1. This piece of software code is present, AND IT IS NOT USED. For this, OpenSSL and other key generation functions were added. Read the background of this fork! What's added there? And what was removed there on purpose. And why was all this done? 2. Regarding the exe, it has already been explained to you. Don't be pushy. You need to put in the effort if you want results. The values of random keys fixed by the rseed(seed) function are used to check for possible mathematical errors and the correct assembly of the code by the compiler. The constant values used to check the correctness of calculations and speed tests are also present in the GPU code. If these Magic Mersenne Twister constants macro definitions are confusing, you can change the code in Engine.cu - remove rseed(seed) and Rand(256). Opt out of the GPU test.
|
|
|
|
nomachine
Member
Online
Activity: 244
Merit: 12
|
|
November 06, 2023, 12:13:00 AM |
|
Added new code to mods on Github. Saving Seed to the Result.txt file. Then run with the -s option. Seed for mod 006, key generation methods are different. VanitySearch.exe -stop -t 1 -bits 28 -r 1 -s 45730C0CCA52F09AC21B00E4ADA360E9709152473494E91DFD74B6E11938BF30 12jbtzBb54r97TCwW3G1gCFoumpckRAPdY
The installed SEED works if the -r (rekey) option is present. Updated. Without the -r (rekey) option, the start key is selected with the -start option OR -s option and use -bits option. file Result.txt Seed: 45730C0CCA52F09AC21B00E4ADA360E9709152473494E91DFD74B6E11938BF30 PubAddress: 12jbtzBb54r97TCwW3G1gCFoumpckRAPdY Priv (WIF): p2pkh:KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M82GSgY8p5EkUe Priv (HEX): 0xD916CE8 Seed: B6D88248ED9FA96F42684121433DCACEB655BF37E0B65C007E58D0AD59ADECBF PubAddress: 12jbtzBb54r97TCwW3G1gCFoumpckRAPdY Priv (WIF): p2pkh:KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M82GSgY8p5EkUe Priv (HEX): 0xD916CE8
You can reproduce the result Thanks. Btw...We don't need such a long seed lenght - even 9 gets the job done. // Seed if (seed.length() == 0) { // Default seed seed = Timer::getSeed(9); }
if (paranoiacSeed) { seed += Timer::getSeed(9); }
|
|
|
|
digaran
Copper Member
Hero Member
Offline
Activity: 1330
Merit: 899
🖤😏
|
|
November 06, 2023, 12:18:07 AM |
|
Am I understanding this correctly that you have found seed collisions? Because I see different seeds with the same key as output, or is this something else?
This is not a collision. The one that was used is saved. With the -r 1 option you can select the fastest one. If we get lucky. I'm still unable to understand the process, what does it mean selecting the fastest one? Ok, let me get this straight, you are generating what, private keys from a seed? I wanna know how is it possible to generate 1 key from 2 different seeds, this should be impossible unless you are not using random, or you have just changed the key generator, but still doesn't explain how these 2 seeds generated the same private key: 45730c0cca52f09ac21b00e4ada360e9709152473494e91dfd74b6e11938bf30 b6d88248ed9fa96f42684121433dcaceb655bf37e0b65c007e58d0ad59adecbf ELI5, please.
|
🖤😏
|
|
|
nomachine
Member
Online
Activity: 244
Merit: 12
|
|
November 06, 2023, 12:22:05 AM |
|
Am I understanding this correctly that you have found seed collisions? Because I see different seeds with the same key as output, or is this something else?
This is not a collision. The one that was used is saved. With the -r 1 option you can select the fastest one. If we get lucky. I'm still unable to understand the process, what does it mean selecting the fastest one? Ok, let me get this straight, you are generating what, private keys from a seed? I wanna know how is it possible to generate 1 key from 2 different seeds, this should be impossible unless you are not using random, or you have just changed the key generator, but still doesn't explain how these 2 seeds generated the same private key: 45730c0cca52f09ac21b00e4ada360e9709152473494e91dfd74b6e11938bf30 b6d88248ed9fa96f42684121433dcaceb655bf37e0b65c007e58d0ad59adecbf ELI5, please. The one in the file is the fastest. But there is something else here. This script can be modified to search for a seed - you give it a WIF as input and it rotates all the seeds to hit the fastest one.
|
|
|
|
alek76
Member
Offline
Activity: 93
Merit: 16
|
|
November 06, 2023, 12:28:04 AM |
|
Thanks. Btw...We don't need such a long seed lenght - even 9 gets the job done. // Seed if (seed.length() == 0) { // Default seed seed = Timer::getSeed(9); }
if (paranoiacSeed) { seed += Timer::getSeed(9); } You changed the wrong seed. New Seed begins with a capital letter //Set startKey from Seed int BitL = Random_bits - 1; int BitU = Random_bits; Int *Sk = new Int[1]; if (Seed.length() > 0) { // from Seed getKeysFromRandomSeed(BitL, BitU, true, 1, Sk); startKey.Set(&Sk[0]); printf("[i] startKey.Set() from Seed: %s \n", Seed.c_str()); // } delete [] Sk; //
// argv Seed if (Seed.length() == 0) { // Default seed seed = Timer::getSeed(32);// random seed } else { seed = Seed;// -s seed }
Be careful! Previously, the old one was just for starters. Next is the code startKey.SetInt32(0)
|
|
|
|
nomachine
Member
Online
Activity: 244
Merit: 12
|
|
November 06, 2023, 12:36:11 AM Last edit: November 06, 2023, 01:21:19 PM by nomachine |
|
Thanks. Btw...We don't need such a long seed lenght - even 9 gets the job done. // Seed if (seed.length() == 0) { // Default seed seed = Timer::getSeed(9); }
if (paranoiacSeed) { seed += Timer::getSeed(9); } You changed the wrong seed. New Seed begins with a capital letter //Set startKey from Seed int BitL = Random_bits - 1; int BitU = Random_bits; Int *Sk = new Int[1]; if (Seed.length() > 0) { // from Seed getKeysFromRandomSeed(BitL, BitU, true, 1, Sk); startKey.Set(&Sk[0]); printf("[i] startKey.Set() from Seed: %s \n", Seed.c_str()); // } delete [] Sk; //
// argv Seed if (Seed.length() == 0) { // Default seed seed = Timer::getSeed(32);// random seed } else { seed = Seed;// -s seed }
Be careful! Previously, the old one was just for starters. Bit 19 Base Key thId 11: 5BF03 < 80000 or > FFFFF Rekey true Bit 15 Base Key thId 6: 58C0 < 80000 or > FFFFF Rekey true Seed: 31C0F9E7B08DB7B945
Seed: B79E1E04AAAC8DC9CE
Bit 20 CPU Base Key thId 11: A2C56
Bit 18 Base Key thId 6: 31A34 < 80000 or > FFFFF Rekey true
Seed: 50363FA8E9EA517136
Bit 20 CPU Base Key thId 6: BF3E0 cp: cannot create regular file '../drive/MyDrive/Result.txt': No such file or directory
Addr :1HsMJxNiV7TLxmoF6uJNkydxPFDog4NQum Check:1HsMJxNiV7TLxmoF6uJNkydxPFDog4NQum
!!! Result.txt Found key: D2C55 !!! Result.txt Found key: D2C55 !!! Result.txt Found key: D2C55 !!! Result.txt Found key: D2C55 !!! Result.txt Found key: D2C55
Am I understanding this correctly that you have found seed collisions? Because I see different seeds with the same key as output, or is this something else?
With the -r 1 option you can select the fastest one. If we get lucky. Yep...If we get lucky that the same seed works on any puzzle above 65 Start at 20000... (first 66 bit key) and go sequentially, no random generator needed.
from tqdm import tqdm import secp256k1 as ice
# Define the start and end start = 0x20000000000000000 end = 0x3ffffffffffffffff
# Define the chunk size chunk_size = 10_000_000
# Initialize the current start and end values current_start = start current_end = start + chunk_size
# Initialize the chunk number chunk_number = 1
while current_start < end: current_end = min(current_end, end) # Create a tqdm progress bar for the current chunk with tqdm(total=current_end - current_start, desc=f'Chunk {chunk_number} end {current_end}') as pbar: for x in range(current_start, current_end): h160 = ice.privatekey_to_h160(2, True, x) if bytes.fromhex('20d45a6a762535700ce9e0b216e31994335db8a5') in h160: with open("KEYFOUNDKEYFOUND.txt", "a") as f: f.write(str(x) + "-" + (h160.hex()) + "\n") pbar.update(1) # Update the current_start and current_end for the next chunk current_start = current_end current_end += chunk_size chunk_number += 1 Chunk 1 end 36893488147429103232: 22%|█████████████ | 2173663/10000000 [00:32<01:58, 65952.81it/s] About 2 minutes for 10 million hashes. Single core. These are all games for small children, no matter how you turn the ball, the result is small..
|
|
|
|
alek76
Member
Offline
Activity: 93
Merit: 16
|
|
November 07, 2023, 05:12:39 AM Last edit: November 07, 2023, 06:57:27 AM by alek76 |
|
These are all games for small children, no matter how you turn the ball, the result is small.. It seems it’s time for everyone to stop with long posts. Spin the ball in the other direction , like this: void VanitySearch::setSeed(int thId, bool fl) { // Setup rseed() of unix time unsigned long Timestamp_min = 1262293200; unsigned long Timestamp_max = 1672520400; unsigned long ts = (unsigned long)time(NULL); ts = ts + (unsigned long)thId; ts = ts + ts_output; while (ts < Timestamp_min || ts > Timestamp_max) { ts = (ts * 54321) % Timestamp_min; if (ts == 0) ts = (unsigned long)time(NULL); ts = (ts * 12345) % Timestamp_max; if (ts == 0) ts = (unsigned long)time(NULL); } if (fl) { printf("\n[i] Time Unix: %u \n", ts); } rseed(ts);// Set seed ts_output = ts; // }
Using the original Random.cpp
|
|
|
|
AlanJohnson
Member
Offline
Activity: 93
Merit: 11
|
|
November 07, 2023, 03:37:57 PM |
|
Chunk 1 end 36893488147429103232: 0%| | 0/10000000 [00:00<?, ?it/s] Traceback (most recent call last): File "/home/zbigniew/seed1.py", line 24, in <module> h160 = ice.privatekey_to_h160(2, True, x) AttributeError: module 'secp256k1' has no attribute 'privatekey_to_h160'
Why it's not working ?
|
|
|
|
nomachine
Member
Online
Activity: 244
Merit: 12
|
|
November 07, 2023, 04:18:45 PM |
|
Chunk 1 end 36893488147429103232: 0%| | 0/10000000 [00:00<?, ?it/s] Traceback (most recent call last): File "/home/zbigniew/seed1.py", line 24, in <module> h160 = ice.privatekey_to_h160(2, True, x) AttributeError: module 'secp256k1' has no attribute 'privatekey_to_h160'
Why it's not working ? Because it is installed through pip pip3 install secp256k1you will have h160 = ice.privatekey_to_h160(2, True, x) ^^^^^^^^^^^^^^^^^^^^^^ AttributeError: module 'secp256k1' has no attribute 'privatekey_to_h160' it won't work because it's not the one. But custom from here: https://github.com/iceland2k14/secp256k1
|
|
|
|
AlanJohnson
Member
Offline
Activity: 93
Merit: 11
|
|
November 07, 2023, 04:54:14 PM |
|
Chunk 1 end 36893488147429103232: 0%| | 0/10000000 [00:00<?, ?it/s] Traceback (most recent call last): File "/home/zbigniew/seed1.py", line 24, in <module> h160 = ice.privatekey_to_h160(2, True, x) AttributeError: module 'secp256k1' has no attribute 'privatekey_to_h160'
Why it's not working ? Because it is installed through pip pip3 install secp256k1you will have h160 = ice.privatekey_to_h160(2, True, x) ^^^^^^^^^^^^^^^^^^^^^^ AttributeError: module 'secp256k1' has no attribute 'privatekey_to_h160' it won't work because it's not the one. But custom from here: https://github.com/iceland2k14/secp256k1Thank you sir ! Now it works.
|
|
|
|
AlanJohnson
Member
Offline
Activity: 93
Merit: 11
|
|
November 07, 2023, 05:02:45 PM |
|
Still .. what this script is really trying to do ? It just generates random 66bit HEX numbers in hope to hit 66 puzzle ? Or is there something else here ?
|
|
|
|
nomachine
Member
Online
Activity: 244
Merit: 12
|
|
November 07, 2023, 05:25:55 PM |
|
Still .. what this script is really trying to do ? It just generates random 66bit HEX numbers in hope to hit 66 puzzle ? Or is there something else here ?
Not random. It goes Sequentially. "To kill boredom" script. Like all the other useless scripts here.
|
|
|
|
AlanJohnson
Member
Offline
Activity: 93
Merit: 11
|
|
November 07, 2023, 05:37:11 PM |
|
Still .. what this script is really trying to do ? It just generates random 66bit HEX numbers in hope to hit 66 puzzle ? Or is there something else here ?
Not random. It goes Sequentially. "To kill boredom" script. Like all the other useless scripts here. But ... with that speed ... it's a complete joke. I can do the same with existing tools on nvidia card much faster. So what's the point of making such scripts ?
|
|
|
|
albert0bsd
|
|
November 07, 2023, 07:54:44 PM |
|
So what's the point of making such scripts ?
They believe that nobody else tried their "original ideas" before.
|
|
|
|
MoreForUs
Newbie
Offline
Activity: 17
Merit: 0
|
|
November 07, 2023, 09:16:56 PM |
|
I am going to find at least one address between puzzle 66 - 72 I am iterating through this 1 decimal range and all targets equal $1,201,000 at current prices! .target_public_key_hashes = [ bytes.fromhex('20d45a6a762535700ce9e0b216e31994335db8a5'), bytes.fromhex('739437bb3dd6d1983e66629c5f08c70e52769371'), bytes.fromhex('e0b8a2baee1b77fc703455f39d51477451fc8cfc'), bytes.fromhex('61eb8a50c86b0584bb727dd65bed8d2400d6d5aa'), bytes.fromhex('f6f5431d25bbf7b12e8add9af5e3475c44a0a5b8'), bytes.fromhex('bf7413e8df4e7a34ce9dc13e2f2648783ec54adb') ]
target_hashes_found = []
# Define the lower and upper bounds for the decimal number search range lower_bound = Decimal('36893488147420166522') upper_bound = Decimal('55340232221128654832')
# List of additional hex numbers to modify the decimal number additional_hex_numbers = [ '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ] ps.. finally showed my wife what im working on.. and why i couldnt help pay the bills.
|
|
|
|
|