{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Adversarial examples for signatures - example\n", "\n", "This notebook shows a case of adversarial examples for handwritten signatures (https://github.com/luizgh/adversarial_signatures). The following steps are considered:\n", "\n", "1. Load data\n", "2. Extract features and train a WD classifier\n", "3. Perform a type-I attack (change a genuine signature so that it is rejected)\n", "4. Perform a type-II attack (change a skilled forgery so that it is accepted)\n", "\n", "For more details, refer to the paper:\n", "\n", "[1] Hafemann, Luiz G., Robert Sabourin, and Luiz S. Oliveira. \"Characterizing and evaluating adversarial examples for Offline Handwritten Signature Verification\" [preprint](https://arxiv.org/abs/1901.03398)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Load the required libraries:\n", "\n", "import torch\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "# Model and WD training:\n", "from sigver.featurelearning.models import SigNet\n", "from wd import create_trainset_for_user, train_wdclassifier_user\n", "\n", "# Functions to generate attacks\n", "from model_utils import TorchRBFSVM, ToTwoOutputs\n", "from attacks.fgm import fgm\n", "from attack_utils import carlini_attack, rmse\n", "\n", "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1) Loading the data\n", "\n", "We will attack signatures from a fictious user \"Joao\". We will also use features from other users in the MCYT dataset as negative examples (random forgeries)\n", "\n", "Manually download these files:\n", "\n", "Store these on adversarial_examples/data:\n", "\n", "https://drive.google.com/open?id=1MPNJVVQXZwz38dmeqIeyditIUxTpFO2d\n", "\n", "https://drive.google.com/open?id=1r-5lnJtChaAa8R4ocE1ZyorTdTiAqlQA\n", "\n", "Store this on adversarial_examples/models:\n", "\n", "https://drive.google.com/open?id=1l8NFdxSvQSLb2QTv71E6bKcTgvShKPpx" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "All downloaded\n" ] } ], "source": [ "# Download the dataset and model\n", "\n", "from urllib import request\n", "from pathlib import Path\n", "\n", "\n", "if not Path('data/dataset_joao.npz').exists() or not Path('data/mcyt_train_signet_features.npz').exists():\n", " raise RuntimeError('Please download the dataset from the links above')\n", " \n", "\n", "if not Path('models/signet.pth').exists():\n", " raise RuntimeError('Please download the model from the link above')\n", "\n", "print('All downloaded')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Load MCYT features\n", "\n", "mcyt_data = np.load('data/mcyt_train_signet_features.npz')\n", "mcyt_features = mcyt_data['signet_features']\n", "mcyt_y = mcyt_data['y']\n", "mcyt_yforg = mcyt_data['yforg']" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Load dataset for the user under attack\n", "joao_data = np.load('data/dataset_joao.npz')\n", "joao_x, joao_y, joao_yforg = joao_data['x'], joao_data['y'], joao_data['yforg']" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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wowGyklp/d2wYYO2wiNWMY6NjSVvb2/y9fWlRYsWOXNOYFekyjixhe5bB0v9zYnapmG0diEhd2BitiMpRK+1QERQAadlorW1FdHR0Vi8eDE2b96Mq1evory8HAcOHDC5/x/+8Ae88cYbWLdundG2Z555Bv3790e3bt1w584d/Pjjjzh37pyj/wmibty4gb179+Jvf/sbFixYgOjoaKWyIjgwbdljxd/fHzdu3MDAgQPxt7/9TW/b/PnzMXv2bISGhooef/z4cXz++edITk6WO2tW+d3vfodXXnkFb7/9Nn766SekpqZi7dq1iuZJAkckc6ClAAAgAElEQVTFil1xkpycjIqKCrP73Lx5E+PGjRPdPmnSJDQ2NtqTDYfKy8vD+fPnMXr0aOzatUvp7Fii6jLlF7/4BSZPnozbt2/j22+/xahRo/DBBx+goaHB7HGenp749a9/DX9/f1y6dAlnz57Fp59+ip9++gkA0LdvX2zZsgVxcXH2ZrE9UWWZYo2XXnoJQ4cOhb+/PwBg+vTpOHr0qNljwsPD8corrzgje4rav38/WltbMW3aNERGRtqTlGictKuKcadOndC9e3d8+umnAIDz589jy5YtaG5uNrl/fHw8ampqnJE1mzU2NqKoqAj9+/fHwYMHlc6OhqpvYoays7Px7LPPagshjZSUFJSXl5s9NigoCK2trXJnSdStW7fw8ssv449//CP+8pe/AAAef/xxzJ49W8kHIXuo7ia2aNEi7N271+w+1dXVmDVrlsltZ8+e1f5dqklDQwMqKyvRoUMH+Pj4uMJDky6XKVOKiorQqVMnfPHFF3j//ffxwQcfQBAEdOrUCZ999hl++ukn/OMf/8DPfvYzJCQkICQkBE899ZScWWjvVFemWCMpKQn79+/Xfp47d67Ze/szzzwDb29v7Ny50wm5c77c3Fy8//77ePHFF+VOWjxOzDUnO/HH6W7duiX6qrSiosJoei61aGpqovj4eJo6darVSxA7kUvFiqkFMiy9qqyvrxddycdet27dooaGBsrMzCR/f3969NFHyc/PT5YBfSqkqjhZuHChxX02b94sui06Olo116i6upoiIyMpNDTUHV6vukSZIqUP6IQJE5wxqLU9U32ciNHtspmammp2etby8nKHLcqjpG3btlFERIQzuvyJXusH5a6Cu4ry8nLcu3fP5Lbr169b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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Visualize some signatures\n", "f, ax = plt.subplots(2, 5, figsize=(12, 4))\n", "for i in range(5):\n", " ax[0][i].imshow(joao_x[15+i], cmap='Greys')\n", " ax[0][i].axis('off')\n", " ax[0][i].set_title('genuine' if joao_yforg[15+i] == 0 else 'forgery' )\n", " \n", "for i in range(5):\n", " ax[1][i].imshow(joao_x[i], cmap='Greys')\n", " ax[1][i].axis('off')\n", " ax[1][i].set_title('genuine' if joao_yforg[i] == 0 else 'forgery' )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2) Extract features and train a WD classifier\n", "\n", "We will use the SigNet model as a feature extractor, and an SVM with the RBF kernel as the classifier. We will consider a \"Perfect Knowledge\" scenario, where the attacker has full access to the system under attack." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Load the trained model\n", "\n", "state_dict, _, _ = torch.load('models/signet.pth')\n", "\n", "model = SigNet()\n", "model.load_state_dict(state_dict)\n", "model = model.to(device).eval()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Extract features (to train the WD classifier)\n", "def extract_features(model, images):\n", " # Note: input pixels must be between [0, 1] for this model\n", " input = torch.tensor(images).float().div(255).view(-1, 1, 150, 220).to(device)\n", " with torch.no_grad():\n", " return model(input).cpu().numpy()\n", " " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "joao_features = extract_features(model, joao_x)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Let's split the data into train (last 5 samples), and test. For this user, the first 15 samples\n", "# are forgeries, and the remaining are genuine signatures\n", "joao_train_idx = slice(20, None)\n", "joao_test_gen_idx = slice(15, 20)\n", "joao_test_forg_idx = slice(0, 15)\n", "\n", "# Ensure that joao has a \"y\" different from all users in MCYT\n", "assert len(set(joao_y).intersection(set(mcyt_y))) == 0\n", "\n", "# Ensure we chose the indexes correctly: first 15 should be forgery, others should be genuine\n", "assert np.all(joao_yforg[joao_test_gen_idx] == 0)\n", "assert np.all(joao_yforg[joao_test_forg_idx] == 1)\n", "\n", "joao_id = 0 " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# Append this new user to the MCYT data:\n", "\n", "xfeatures_train = np.concatenate((mcyt_features, joao_features[joao_train_idx]))\n", "y_train = np.concatenate((mcyt_y, joao_y[joao_train_idx]))\n", "yforg_train = np.concatenate((mcyt_yforg, joao_yforg[joao_train_idx]))\n", "\n", "# Create the training set for the user\n", "trainingSet = create_trainset_for_user(xfeatures_train, y_train, yforg_train, user=joao_id)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Train the classifier\n", "clf = train_wdclassifier_user('rbf', 1, 2**-11, trainingSet)\n", "\n", "decision_threshold = 0.368 # From the MCYT dataset\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2018-03-16T20:05:04.913730Z", "start_time": "2018-03-16T20:05:04.343297Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions on genuine signatures (True = genuine)\n", "[ True True True False False]\n", "\n", "Predictions on skilled forgeries (True = genuine)\n", "[False False False False False False False False False False False False\n", " False False False]\n" ] } ], "source": [ "# Check the predictions for unseen signatures from the user:\n", "\n", "print('Predictions on genuine signatures (True = genuine)')\n", "print(clf.decision_function(joao_features[joao_test_gen_idx]) > decision_threshold)\n", "print()\n", "\n", "print('Predictions on skilled forgeries (True = genuine)')\n", "print(clf.decision_function(joao_features[joao_test_forg_idx]) > decision_threshold)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-0.5, 219.5, 149.5, -0.5)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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9+7Nxo0bAfsyoNrVSFqiOlYiIiIiFtGMlYiIWO769euULl061uMfffQRe/bsoUOHDgCarZI0R4mViIhYzjAMbt68GeOxxo0bc+rUKTp16sTQoUNdFJmIcymxEhERyxUvXhxfX18Adu/eTXBwMJkyZWL48OG0adPGxdGJOI9hs9lcHQNAighCRJKV4eoALKQxLA6O+lUnT56kYsWKzJ8/38URiVgqzjFMiZWIuIoSKxFJzeIcw3QqUERERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELJLe1QE8ZLg6ABGRJNAYJiKAZqxERERELKPESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELKLESkRERMQiSqxERERELPL/9QA2JBrD79oAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Let's take the first genuine signature (id 15) and the first skilled forgery (id 0) to \n", "# attack - both are correctly classified by the model\n", "\n", "gen_idx = 15\n", "forg_idx = 0\n", "genuine_to_attack = joao_x[gen_idx:gen_idx+1]\n", "forgery_to_attack = joao_x[forg_idx:forg_idx+1]\n", "\n", "# Plot the chosen signatures\n", "f, ax = plt.subplots(1,2, figsize=(10,4))\n", "ax[0].imshow(genuine_to_attack.squeeze(), cmap='Greys')\n", "ax[0].axis('off')\n", "ax[0].set_title('genuine')\n", "ax[1].imshow(forgery_to_attack.squeeze(), cmap='Greys')\n", "ax[1].set_title('forgery')\n", "ax[1].axis('off')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3) Type-I attack: making a genuine signature be rejected\n", "\n", "We will take the genuine signature above and run attacks that attempt to change it to be recognized as a forgery." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# First, let's concatenate the CNN model with the SVM model, so that the whole process\n", "# is implemented in PyTorch, and we can use autograd to compute the gradients:\n", "\n", "cnn_svm = torch.nn.Sequential(model, TorchRBFSVM(clf, device)).eval()\n", "\n", "def to_torch(np_array):\n", " return torch.tensor(np_array).unsqueeze(0).float().div(255).to(device)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2018-03-16T20:05:15.805119Z", "start_time": "2018-03-16T20:05:15.757800Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "classifier score: 0.7031; concatenated model score: 0.7031\n" ] } ], "source": [ "# Let's double check that the concatenated model has the same output as before:\n", "\n", "clf_decision = clf.decision_function(joao_features[gen_idx:gen_idx+1])\n", "cnn_svm_decision = cnn_svm(to_torch(genuine_to_attack)).item()\n", "\n", "print('classifier score: {:.4f}; concatenated model score: {:.4f}'.format(clf_decision.item(), cnn_svm_decision))\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([[-0.3351, 0.3351]], device='cuda:0', grad_fn=)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# For some attacks, we need the output to be two values (prediction for class 0 and for class 1),\n", "# We implement this in the function ToTwoOutputs, that also takes the decision threshold into consideration:\n", "cnn_svm_two_outputs = torch.nn.Sequential(cnn_svm, ToTwoOutputs(decision_threshold)).eval()\n", "cnn_svm_two_outputs(to_torch(genuine_to_attack))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a normalized score (considering the decision threshold). If the value for class 1 (second position) is greater than 0, it means the score is greater than the decision threshold, so the signature is recognized as a genuine." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# Now, let's run the attacks" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "gen_fgm_atk = fgm(cnn_svm_two_outputs, genuine_to_attack, 1000, 0, device,\n", " image_constraints=(0, 255))\n" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "gen_carlini_atk = carlini_attack(cnn_svm_two_outputs, genuine_to_attack, 0, device)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "rmse_gen_fgm = rmse(gen_fgm_atk - genuine_to_attack)\n", "rmse_gen_carlini = rmse(gen_carlini_atk - genuine_to_attack)\n", "score_genuine = cnn_svm_two_outputs(to_torch(genuine_to_attack))[0,1].item()\n", "score_genuine_fgm = cnn_svm_two_outputs(to_torch(gen_fgm_atk))[0,1].item()\n", "score_genuine_carlini = cnn_svm_two_outputs(to_torch(gen_carlini_atk))[0,1].item()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original image score (normalized): 0.3351\n", "FGM attack score (normalized): -1.7107. RMSE (distortion): 5.1233\n", "Carlini attack score (normalized): -0.5007. RMSE (distortion): 1.3703\n" ] } ], "source": [ "print('Original image score (normalized): {:.4f}'.format(score_genuine))\n", "print('FGM attack score (normalized): {:.4f}. RMSE (distortion): {:.4f}'.format(score_genuine_fgm, rmse_gen_fgm))\n", "print('Carlini attack score (normalized): {:.4f}. RMSE (distortion): {:.4f}'.format(score_genuine_carlini, rmse_gen_carlini))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that both attacks were successful in making the signature be classified as a forgery (score < 0). Let's visualize them:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Carlini attack')" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "f, ax = plt.subplots(1, 3, figsize=(12,4))\n", "ax[0].imshow(genuine_to_attack.squeeze(), cmap='Greys')\n", "ax[0].axis('off')\n", "ax[0].set_title('Original')\n", "\n", "ax[1].imshow(gen_fgm_atk.squeeze(), cmap='Greys')\n", "ax[1].axis('off')\n", "ax[1].set_title('FGM attack')\n", "\n", "ax[2].imshow(gen_carlini_atk.squeeze(), cmap='Greys')\n", "ax[2].axis('off')\n", "ax[2].set_title('Carlini attack')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The two images are adversarial but we barely see any difference compared to the original" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 4) Type-II attack: making a forgery be accepted\n", "\n", "We will take the skilled forgery above and run attacks that attempt to change it to be recognized as a genuine." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "forg_fgm_atk = fgm(cnn_svm_two_outputs, forgery_to_attack, 1000, 1, device,\n", " image_constraints=(0, 255))\n" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "forg_carlini_atk = carlini_attack(cnn_svm_two_outputs, forgery_to_attack, 1, device)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "rmse_forg_fgm = rmse(forg_fgm_atk - forgery_to_attack)\n", "rmse_forg_carlini = rmse(forg_carlini_atk - forgery_to_attack)\n", "score_forgery = cnn_svm_two_outputs(to_torch(forgery_to_attack))[0,1].item()\n", "score_forgery_fgm = cnn_svm_two_outputs(to_torch(forg_fgm_atk))[0,1].item()\n", "score_forgery_carlini = cnn_svm_two_outputs(to_torch(forg_carlini_atk))[0,1].item()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original image score (normalized): -0.1657\n", "FGM attack score (normalized): 0.3901. RMSE (distortion): 3.3628\n", "Carlini attack score (normalized): 0.5000. RMSE (distortion): 2.4376\n" ] } ], "source": [ "print('Original image score (normalized): {:.4f}'.format(score_forgery))\n", "print('FGM attack score (normalized): {:.4f}. RMSE (distortion): {:.4f}'.format(score_forgery_fgm, rmse_forg_fgm))\n", "print('Carlini attack score (normalized): {:.4f}. RMSE (distortion): {:.4f}'.format(score_forgery_carlini, rmse_forg_carlini))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, the two attacks were succesful (both attacks are classified as genuine)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Carlini attack')" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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jqQmTZrQcccdRzNmzKANGzbQxo0bqVmzZtS4cWNrvNWrV1ObNm2oXr16VLduXapVqxY1a9aMZs2aRd26dQtcTo0HH3yQ+vTpQ6effjp17dqV+vfvT3379qVzzjnHNQhUV8yePZuuueaaQ5llVffJMvVZTjZNBNk0OOpw0WjUeJ3Dy2gSERUXF9N1111Ha9euTclLGzivssvBPpFIUHFxscug6//79OnjEF1TPIkLL7zQM2+NwYMHU82aNalWrVo0f/58WrNmDX322WfUuHFjatSoUUrcWCxGsViMVq5cScceeyyddNJJDilu2LAhzZkzx2WgbZB1uO+++2jAgAHUvn176tKlC1166aV08sknU/PmzemOO+5IKz2/tidKPn9Tu3m9O6Z3TWPWrFk0cuRI33wl0iDCElXdJ8ttY03k2PZb90VbOP63rU2j0SiNGjWKCgsLUybDXul6pWkqFxFR37596eGHH/Yk0BxBRapLLrmEGjduTPXq1aNFixbR6tWr6aOPPqLGjRvTSSedZC33a6+9Rg0bNqRTTjmFsrKyCAA1atSI7r//furSpUtKnSQk8Xz00UepT58+dP7551Pv3r1p6NCh1L59ezr99NPp9ttvt5Zfp837aJD+Kp+RTE+O57ysJsyePbtM/bUcCIlxWbB69epDks/gwYNp7ty5gcNPnz6dFi5cGChsp06dqFatWnT11Ve7rg8bNozatWuXEv6pp56iQYMGUbNmzahNmzbO7Pfss8+mDRs2EBHRlVdemdZkYdiwYdSgQQM68cQTqUWLFin3L7744pRr06ZNo1tvvZVefPHFwPlUFqZPn05XXXXVoc62qvtkWn1WD5B6sCyLMucHnocJRUVF9Je//IWIDpJFGVcqGnrwNhFfEyKRCCUSCRoyZAg99NBDVFxcnBKGl0/nN2XKFJo6darrHleg4vE4RSIRisVi1KZNGwLg6rPxeJymTZtGzZo1S8lvyZIl1LdvX2revDk1aNCAmjdvTgCooKDA1We3bt2a0h62cg8cOJBq1apF9evXp7y8vBTDfPbZZ6e0y0033URXXXUVrVy5MiVt3h6SWJUFUr2T6dx99900atSotNIsizInUNV9ssw21vbu634RVK03TYa9SPGqVatc4b2ItVZ9idzk12us0eEGDRpE8+fPp1gs5jmJ1femTJlCs2bNct3jRE/310QiQZ06daLc3Fy69tprXWlOmzaN2rdvn1K2J598koYOHUrNmzenU045hc4880yqWbMmdejQgTZv3kxERKNGjfK1sbwew4cPp2OPPZaaNm1KzZo1S6mjydZPnjyZbrzxRnr55Zc98/Abd22wtZ28R0R0xx13VIjwlOZ4EhLjdLFo0aJyuwwExfXXX59W+OHDhwcO+/rrr9PJJ5+cQkgnT55MQ4YMcf6+7777qFWrVpSXl0ddunSh5557joiIevXqRU2bNnW5kgwbNixw/t27d6f8/HwaM2YMvffee8a4w4cPp/fee4+IiO655x46/fTTKS8vj5o0aUJNmzalESNGBM6vojFr1qy02rsCUdV9skzEWP7WfwddkjUhqGvG3Llzafr06da8bIZaknoJmWdJSQldc801KWSRG20Zf/Dgwa60bcuKxcXFtGzZMmrevDmdeOKJzvVIJEIzZsyg/v37O2W+8847qV69enTcccdR586d6eWXX6ZoNEq9e/emevXqufpsp06dXHUxEXqNgQMHUqNGjWjMmDG0fft21zihcc0119D69euJiGjBggXUtGlTZzm4RYsWxn7u5cLBr8n2lkZVL9na3pfZs2fToEGDAi3dek2GykDaq7pPlsvGyrbgxNOrLYLek+EefPBBmjVrVspzkn+n218lIpEIXX311Snp6smVabwYNGiQ672z5ROJRGj58uV00kknUfPmzV11mDx5Ml122WXOtTlz5lDDhg2pUaNG1KVLF1qyZAkRJW1so0aNHFcSIqLf//73rnyC9Nfx48fT119/bVRdr7/+etq4cSMREc2fP59OOeUUaty4MR133HF05plnptg4k2uJDUFckbzSuuuuu2jw4MFp5VVekaUUITFOB3fffXdabg3lQdu2bdMKP23aNHrhhRfSirNu3Trq1KkTde3alSZMmECTJ0+mtm3b0oknnkgFBQXUokULysvLo+bNm9N9993nxNu8eTM1bdrUNRMmSvpCB0GHDh2obdu2LtX3xhtvTAmnl6zuvfdeat++PU2fPt0hyo888gh16tSJ7r///rTqXFFIZxJQwajqPlnmPmsjGUEHWpOfGnfRMGH69Om0ePHilLxkvkFItly650apqKjIcSUyGVZTGadMmUJLly5NUa296lNYWEjdunWjXr160ahRo+jee++lU045hVq2bEk9e/akdu3aUW5u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eB8t23i8JrbWlcIDN998MwYMGIABAwactjwfeeQR9OrVK67HiW3cuLHcvoTxxurVq7F582Z8/vnnOHbsGILBIKpVq4bGjRtjwoQJlW1eZSOhpatQ6OS5qG4+hZrPmEba3Pw/eRiuNLv5NN5zzz0YMmQIrrnmGmP6biqGZr/X9XHjxqFXr164/PLLwzptt/KRkM+/YcMGdOjQwTWeLAfp7+umLHltqNOwbt065ObmYuPGjdi/f7+Td6tWrTB+/Hjfz+j3BAmpHvqBVJj8hHert1EMtoncZo1jbCzKJHBqxcBEaPg7o3Q0v93bbrsNI0eOjHAXkO8BiP64RxMef/xx3HnnnRFjYjRpSHz66aeeJyjJ9LW9BRrok9N+3I44Nm3ahJ07d2Lbtm34/vvvUVpaivT0dLRs2dL109MS0SiyWhjTWch+48czPIN1pYgVI0aMwN/+9je8++67uOGGGxw/xopEaWlp3M/YnTFjRqUT4+nTp2PPnj3OGakZGRlo3LgxevXqFXEMlUViQ1tuldckueAqDu9oCVLhkfnw+5IUB4NBlJaWokqVKhg+fDhee+01TJ8+HT169MAdd9wRNnCXlZWFKZ48T65ImDpbuk4+xGQHb19SheLpatB8bd955x0nTc0FRZYTTSx5+boNGKb3xTF79mzs2rULGzZsQN26dZGamopOnTqhe/fujp8yX671GqDIfq5YmRQn/nx+XCTkc8g65JcA+10lOFuglYG27E7gqxOA7mLBVULKg7td8BNgHn74Ybz66qt488030b17dwwcODCsrpMLhXwX8oMZXqSLH+MYDAYjxkNt4u0HNDF4++23ozpatKyszBcpBuCbFM+ePRubN2/Gnj17kJGRgSpVqqB169a4+eabnaNKeb/k9xn9KLJaH8VVYyLHfvPicNvkXRFt1BJjD9x88824+eab8eqrr2LZsmXIycnBFVdcgZ49e1bICQiTJ0+uEDeB/Pz8uKdpwpo1axxV6fvvv0dZWRmqVq2KevXqoXXr1nj22WdPmy0WFQsvFYE6S7ksalo643F4HjwMDZT8N3dP6NChA9q3b4933nkHS5cuxaJFi3Ddddehbdu2aNWqlTPIyAFXW67lNsnnJveI5557zvkADreNTwLclGkeVi55cqJC17nqxl1WpL+lG8geGnDWr1+P//f//h927tyJb7/91iE3F154Ia688kpMnjzZc6LgR/mXPpCy7sh43McwGmXIj8LoNtjHqBif0dDIhjZpMREXqueSwFA7lydQEFG69tpr0bVrV8yYMQOLFy/GokWL0LVrV1x99dVo3bq101aluxVPk6BNuMleaq+TJ09Gp06dwp5J1lnNDcT0N99sKu0Awtur5pLBy9DU/9B1Sova6/bt23HgwAEcO3YMNWvWRKNGjdC5c2fnVCktn2gU8Whcn7S+3NS2tbJ0S1u+94qGdaWIEqtXr8Y777yDrVu34he/+EXcP11MR73EE2PHjsVVV13l+inVWLBhwwYcPHgQu3fvxg8//IDDhw/j+PHjyMzMRMOGDXHhhRfikksucZa0LaJCoo/GEcc/8b5ELqMC+iYskw8Z/W1S7eiePElCI2Xr1q3Dhx9+iM8//xznnXcepk+fHpYm/2oeEN6By6VffgoD2T5y5Ej8+c9/DiMH8jklKE9KX4b7y1/+gosvvtg507ekpCTsiCU/pzloZfHZZ5/hwIED2LdvH3788Ufk5ubi6NGjuPTSS1G3bl00b94ctWvXRvv27VG1alUnn6KiojDSEw38TJw46fHyWYwmfQ6TH7JJjY8BidxmYzqVQhJM6bqjfZZcS4/+l5tutfb96aef4v3338fOnTuRlZWFmTNnutrH42vtVbpMPfjgg3jllVeiOoWB8jE947PPPovmzZs7X8+Tp+5EO8GiCeS2bdvwxRdfIC8vD3v37sXBgwdx+PBhNG7cGI0bN0aLFi1Qp04ddOrUKWwvgumUG6/n43n7ceHi4YHIs5/LA9MEW55LDcRMlo2RLDEuB6ZPn46ZM2eiadOm6NGjB3r37l2u9GbPno2DBw/ikUceiZOFJ3fevv7662HfRY8FCxYswIEDB7Bt2zbk5eXh2LFjOHHiBLKystCgQQM0adIETZo0iTv5PoeRyIMsQicRRlpM5ELrJEld4R/RkHAjf/wDGNxnVQP3u503bx5mz56Npk2bomPHjrjlllvCzkL18i+VRGHx4sU4dOiQc+C+5uIhyZjp7GbCkiVLMG/ePEydOhWAfp6qtEnaWVBQgE8++QRfffUVcnNz8e233+LYsWMoKChA7dq18atf/QpNmjRBw4YNjV+DDIXCNw565c/tNB2/R0QllsP9Cab6Eu0g6ZV/DPYlbJsNhU7uCWC/PV1MTJNW7b5pqVuuImgKrRu5nTNnDmbMmIFLL70UXbt2Re/evY3vRasX8tq8efNw5MgRZ8OfiXhFM0lavnw53nzzTcyYMSPinlZWcvJP5bFq1Sp8/fXX2Lx5M44cOYKjR4+isLAQWVlZaNeuHWrWrIn69eujT58+RluiIcRav8L3HpAIwJX5UCgUdua0abLJr/NjK7Vnp7+pnPxs1DP9HyUsMa5ITJ06FStXrsT+/ftx0UUX4dJLL0X79u1x8803R5XOsGHDnMEwXujfvz8GDx7sy4d38eLFOHz4MA4cOIBvv/0WR44cwYkTJxAMBlG/fn1Uq1YNrVq1wiWXXFKucxUtfCFhB9n/IKzNyiVMNwXOrROLpmPXNuCZlka520QoFMJbb72F9evX4/Dhw6hfvz4aN26M1q1bO/Wa1GNSMrlKwf2ZR40ahT/96U8ReZWUlHh+KMQ0AA8YMABPPPEEWrZsaXx2IiL/+Mc/8Pnnn6OgoABffPEFDh48iPz8fCQnJ6Nu3brIyMjARRddhE6dOuGqq64ylrVGKv1sUJSDq9/356Yuxqo0yUHZbaUi1rQ9kMhtNqox1muCKNuZnxUM7pPP+wfpK8zTJ7zxxhtYu3YtvvvuO9SvXx/Z2dnIzs7Gf/3Xfzk2ApEfI6FrZN/o0aPxpz/9KSws4D35NJUDANxzzz0YPXo0LrvsMtf4wMkPinz55Zc4ceIEtm/fjry8PPz0009ITk5GvXr1cN5556FJkya48cYb0bJly7B3wCeppkmgPDvdzTc3mpUS0yQpWmXaT9o8fT8rRn7TVGCJ8enC1KlTsX37dnz99dcoKytDeno6rrjiCtSvXx8XXXSRcVPdypUrsXDhQvzv//5v3Gx56aWXsGDBAqxYsQLAyc8908c5fvrpJxw5cgSFhYUoLCzEiRMnULVqVdSuXRtNmzZFkyZN0KJFiwr5kp2FLyTyIGtUoEwdtl9FmcLJJU7tkH4/gzLd48uDpNhSXu+++y42btyI7777zlFHsrOz0aBBAzRr1gxXXnmlajf/ahZ/PlJdtHKQzyttffPNN7FkyRLMmTMHKSkpWLx4MXJzc5GXl4cffvgBJSUlOHToEAoLC50NhBkZGWjZsiUuuugiXHDBBejYsaOrO4gfW/g97mqiKYYmxVEbNPnECdD9Dt1UIO1etMpveV0yXJDIbdbXqRTRKnA0gXRzSdAmhDTh1MK6uU8FAgHMmjULmzdvxv79+wGcJNRt2rRBw4YN0axZs4gJID3LqlWrkJOTg+effz7svsmdyQ1Uf8kves6cOQgEAli0aBG+//57HDlyBD/99BOOHz+OH3/8ESUlJSgqKkIgEEBWVhaaNWuGli1bonbt2ujatauxr4sGXu3O69lM796tHXvVFd5HA1DdLDSV2WSb32fxCUuMKwvLly/HihUrsG/fPvzrX/9CcXExzj//fFStWhXp6emoVq0a6tWrh1WrViEzMxO33noratWqhZo1a6q+uatXrwZwqsIdPXoU33//vTPzPHbsGEKhEI4fP45169ahevXquPDCC1FWVobatWujdu3aOP/889GwYUM0bdrU8WG0SDgk8iAbQYw5aODTNuq4qXh+Oj+/y+VycJFp8+VAiXXr1mHp0qXYu3cvvvnmG1SvXh01a9ZE1apVUadOHSQnJ6Nhw4ZYv349GjRogBtuuAHJycnIzMxE+/btnXz4+aApKSmO4kOT0xMnTqCgoACHDh1Cfn4+iouLsXLlSmRmZuKSSy5BjRo1UFJSgvPOOw/16tXDL3/5S9SpUwddunRx/I1lebh9IU6Dmx9fWVkZUlNTHeLAj5aiiQCF4aCy1gZ4/uEXryVrP4TWb33wqmNxGngTuc1GdVybaelfu69Neuma14oDwUt5dCOLq1evxpIlS/DNN99g7969qF69OrKyspCUlIQ6deogLS0N9evXxz//+U9kZGQ4fsD16tULm/TS86xdu9b5rHwoFEJ+fj727duHwsJCFBcXO4S8qKgI69atc85mpol3rVq1kJWVhTZt2qBWrVro3Llz2Ikcshz9qrYEP+4Lssw4z+PvjX67uadQWDdSK/+W8WVf5aUEx3JyRgywxDiRsGnTJhQVFeHAgQP48ssvsWLFCuTm5qJNmzYoLCx0BqIqVaogPz8fgUDAGZSKiooQDAaRlpaG888/32nAderUQd26dZGUlIT8/Hx89NFH6NGjhz0B4sxFIg+yrsQ4Vnh1gm6bp06cOIFq1aqpHbU2qHL/OSB8FzpXM+nvjRs3IhAI4ODBg9i1axcWLlzouBhVr14dR44cQXp6uuN+cPToUZSUlCAjIwM///yzc2pGVlYWjh8/7kyKL7jgAvziF7/Ajh07sH37dmRnZ2PKlClhfsh+NsNoZWQadL2IDofXZ7C5fZQOAKNy5WZvNIiG6GrP6EedjgGJ3GZ9E2O/6qIboePHscl05ckr2ikWXsohJ05ApK/wpk2bUFZWhsOHD2PLli1YtmwZjh8/jgsuuADVqlXDsWPHws7xpnG2evXqyM/PR0pKCqpUqYKsrCwUFhaiZs2aqFKlCurWrYvMzEwcOnQImzZtQseOHTFu3Liw54hFgXaD1n+Z0uZnS1P/JVfg3EgwhdPc1GT+JC7wuqBtvuP9sOlUEwpH0CZlcVSKnWyMNywxrnzE+ySKLl26YNy4cc45oxZnJBJ5kEUwGAyZNkn47cy8BkCC7Kh5upLUaJ0vH0wBRKgqACK+OEfxtI1ypaWleOCBBzB9+vQIxZIGCfJBdisP/vfgwYMxbNgwdOjQIcI3ORYQKSUXKQ75nAUFBahSpUrEp2Q5caBnkjve5fvlAyMvFy2sRLQTIxO8SLGfODEOwoncZqP+wIdWt7Vw2gTIjZhxeLlBua1+RDMJHjp0KN544w0nLCf1sp37eff9+/fHiBEj0KFDB0/fZDe75TU/edN5zJryqp3P7pa/3wmidt30SXA/8Fr9ibU9RtlujQErTKO28I9GjRrFLa2BAweiZ8+elhRbVCh4ZyzJJP8tCaOciBMxJdLK43FCy39zkkuDGo8nO8akpCTny1FciQAQdgQaJ97Sdv4/+SCTKsbzo4GcjmKj8NwXk4cNBoN48skn0a1bN3Tp0sUhsfxMVJ43lZcbSMnhp21oaQWDQRQXF6N69eoR5c/PmaXwUhXm+clnov/5O/cjwmhheLm7heM2uF1zy4P+Ng3aZzJMzyDrORC+ec0tDZOrBKmH1O6ojpSVlYXVF5qQSnA/fcpHs1u2K+09BwIBtGrVKiys7KO4HV7E6rHHHsO1116Ljh07hpFCXs9NZW0ibkTq/dRT2sBIz0blGQqFIuzhNvEylJMejYxS++XhOAKBgEqK/fRRpjKO9nqs4TzTSZAGnxBGnOkYOXIkUlJS4rqBz6LSkMjqEwCE3BQ8P8v11FkTudQUAtOSremTxnxAJ6KrHTlmWuaXm/U01YqWEYFTZFG6O3A1JRQKobi4GGlpaWEb4UKhEH7729+iatWqeOqpp5z0CwoKUL169Qjb+PKlhGmDHberqKgoTD3mCjop7VTW9P6KiopQXFyM9PR0FBUVITU11QlPYU1qIFe2/MKP6qUpS24DOI/nx0WgHINrIrdZ1zHWTUUE3NV67tZA8XjY0tJSBAKBiPh8Ex5vj/JkBa/83doF3SfbKA153CNXjXl6vP0AwBNPPIHU1NSw9iq/gEl5Aqf6Ey9lWyOlfNJhUlDd3hVvE17X5AochfGCdna7tNH0/t0Qy4pTDLCKcaJi6dKlcUnn5Zdfxv79+y0ptjitMCkRXqoccEqp4Z0zv0eQLhRApHpJAx8NQjw+nahAAx5Xo0g1JYWWrvNPHEu7V65c6fgM07NzXztCamqqQ6xp0xr/JO5f//pX5OXl4amnnlLLS1PRucsIf37yK6Rr/JxoikukmKtN/BQNIsd0HB0ApKWlIT093SlHHp6euaysDMXFxWF2BYNBVKlSJUzVkyq4hqSkJHUzn1Z36H8+uXJT6zQVWFOKo1G4zxSYnkkjINpk06TWcxJMkyRJiuWHaQiBQMBRanld4oooXeMrVDTp5PbyD0wAp4glcLK9ys2qlB/feMdPqqH0+MT3r3/9Kw4dOhRGiuUJNLw8yS5ZtjQZ4JB1MxAIhJFNjSCaVH3NbYvaNT2fTIP3LbLPo3IsKSmJ6JOoH5DgeaekpKh9OA+rQa42xpkUu8IS40rG3Llz45LO4sWLMWbMmLikZWHhBa4wyGVJTeHl9yRo4HVbRtSWOXkn7aZm0X0a/GiwIjs5yZP50n3g5MAQCoWcNisnBLwsuAIll4/pK3IbNmzAvffeG5YWqbomlZyu8bOViQjzDYWynHj+5OJB4OSE8uDnpRLpJXASQuSawnO/c8qTBkWuvJmWeGWZas/D7/E8AfdjwyQ0Nxjt/7MB8pmk6m6KI5VIngYnZrKOEfg7B8LPKpafUNbslSSST6a1CbkkqaFQCPPmzYvIQxItIttaedBqzNq1a3Hfffc54XmeXJU2PRMvc4ovbdIgw/J6r5FG+W7lRJiv8sj64DZRotUi+UwmNxfTNXlPK3OZv7STIN294gVLjCsR69ev96Wi+EGvXr3QsWPHuKRlYeEFL9KgERnToCE37mnp8CVOAl+iJIWIf8iDwsj8uA008Gr3iWzy/LZu3RrmcuC25EeDN9+QFgqFkJaWhlAohG7duqFDhw6O7SUlJUhLS3MG2JKSEofEErGkAZzy15Ryrqhpkw5OeqWrCJ8gkA+1myLECTyVBS0/S0LF/5blxkk9/TYpwLKsTYOi2zs3wev+2QKTQkyQ74ertgRZ/3kdJ/DJnEyf6jMnam55cBWY7vHfnKxSvdy6dasTz/TM1KfIvoSehVZjrr/+elx55ZUOGSR3i5KSkrC6KhVZjTzKvktOFOVkgvdppomgVm/d+mnehjl42zPtAZH+2lKN1vLi71Gz00/b1JT1ilCTLTGuRMyaNQutW7cudzqjRo3CAw88EAeLLCzKDz8dtGkwNnV03B9RA3XQps08GpnihFEbYOQSYCAQwDvvvIPs7GxnEJYbhMh2fp1/PpXymDhxIgYMGOCQg+TkZMeFgBNvuiaXJQFELDFz1Y6T2eLi4jB1iRMBPnEoLS0NU2j5MrIbOSVbuI28HHm5a8vOXMXi70a+Fwmpemn3Zf5einI0ivOZhGjJvmwL0h9WhpNxtQkjgDACReny327qoXZPukJI8vjuu+8iOzvbsVubnJMCTUSWtzEK//vf/x6DBw922lFqaqpTz4kYcgLL7aC+yW99lG4rbqqyfBe8j9EUf+3dkX18Qi/7MVn2vF+Ukxuvd25a3TO1PVNdqkhYYlyJ+Pbbb/Gb3/ymXGlMnDgReXl5cbLIwsI/TB2VPN2BqyFuS42mpTZKUyqTWlxN2eJKEoU1qSwaKeeEbd++fbj//vvDBnSNaAOn1DJ+OgUAPP/88/j5558dgkpLlOTDx90+gFOuDydOnAgrS650kwJH1+VOdX6CBj8fmdInIkz2k9sILSPz5+LqPP3WBkNexpS3JOb8HfCJkVu6UunyUpn4e/QKf7b6f3Y+AAAgAElEQVQiWlLBSYwsNxMZ5kojhdEmspx80aqMXwVbO89X+5t+f/3113jwwQeN9ZMrn9R3ULugOC+88AIKCgqc69xdiAgx73P4qhZvh259ouyTeDnK6zw+hePPwVVqSWg1ci4h2xW3h9LmK91u/ufUpumfJMl+oLVbr8lZeVG+j1xbxIz33nuv3GrxjBkzsGXLFnzwwQdxssrCInqYyCTd49dk5y6JskZ4+EDE0zLtVJd5cB9A2Yn7XZpLSkrCkiVL0KJFC2cQ5Z2+BnoW2nWflJSEnJwcbN++HTNmzAAQvjueTrCQJ2ZQ+tr5xrL8uDotn4sgXR1M5MVLqePvh6tHXEnj9zmJ0AZ+aatbucpn52XgFUbWQx73bFSLveA2GdQmsqZyI8LD/5YqJG9ffKImySAQqURq9mr1iAjhokWL0KJFizDbKY5Wx6gdcBel+fPnY/PmzZg1a5ZjE9kbCAQctyWZDn9uylO6B2mkV5sgeBFk2VZ5mfCw9FxaH8ivcxt5GfF42iqYrBMaqMxMbdutDXpNnuIJqxhXEhYtWoQ//OEPMcfv3r07UlNTLSm2qHRw5UWqAW4qnYynDXaazyEPJ5cH6ToRVzeFhCuTWhiubgLAwoULMXHiRACn/P5Mm4CIBNLSbFJSEoYMGYK0tDSHFFNYIs20SU/70IbcPCfLRZYV//IWDV5c8eIbAwE4G+y4yiN9KPkAS2XAiQ49Kx9kNfVQklaNcJnUNa2cOXHXiLaWpiT7XnXlbIOXiqipr3xCwyFJGf+b6iXVPV6PTW1e9gmm9mkC2ZmTk+O0V0lQZVqy3QLAoEGDUKNGDYcU88mfJP0EuaLB6zhvE3J1iU8kKB3Tdfl+5N98f4GcpHDVlsrFVPc19w9TWRM0gi7TNbnlULxY2l2826olxpWA559/Hm3bto05ft++fXHDDTegf//+cbTKwiJ6cELCBwsO2XHypXTpy8dPMuBheRhtsKHf1Olyf0MinnJZWBI9LR8ilNRmJaHgG+WAU7vzA4EATpw4AeAk6XzkkUfQuXNnXHfddWHPmZKSEkYY+S5+eQoFgR/NppVraWlpmM+vtkmRiC+RWyLJRIK5SwcdO6f5bhOIrEsyIMtUgzap0t6TRkJknZBwGzC9iHBFq1KVCdMkhO5pCix/N/yDHZSGdKHiEyR+tCHPR5tAUTi+8uD3PRLpe+GFF3DZZZdFhJN28tMoaHJYWlqKhx9+GNdeey26devmXANOtiV+KkYgEAg7qtAPmeRlyd28THVe9p/0T25YJXC/ZkqPE2vN9YFPGDT3D7fJhBu4cKBNGNzqoRtkPdMmuuWBdaWoBGzduhVvvfVWTHGHDh2KmjVr4tFHH42zVRYW0cOk/tHfUhECzEvkQPgpEpIImZQNeYg+EP7RAe1Tr5qSIvMh/9pAIIDdu3dj+vTpEbZJVYarsFWrVkUwGMSjjz6KQCCAYcOGhZFofpYy98Gja9oHTKSypg0s/GQJIsBkL1eM+Gew5eY3voGOq98c3MeSnz3MJzluH12g/KSSrL1v04RLDrSm+Fr6EmczEXaDW7kD4Seb0D3udkBpmCYWFJ+3Q/lueZ2mcPwjGETGTX0H1Wmyc/fu3Zg2bVrY83AbKR/eVui0ltGjRwOAczQbTVBlH0dti+JpLknUP3EiTXbwZ+X9EoXjbUQrZ68JAye9vL/QiCnvS7TnkPZzW/yoytJVQ4M2lpjy4L81F5HytmVLjE8z1qxZE/NLGz9+PAoKCvD222/H2SoLi/jArbPknT6AiAFAhgXcfc4orvw6FB9IpCIlBwUijVrHTQPE+vXrkZaWFqZ0y06cH4HGfQwnTZqEn376CTNmzAizjRNoPnCZyDw/hk4SDvpfkln+PNInmJNg/hycQGgnXPB3JpenZVnLs6Glf6nJP1F7X9oEgWAaSL3SNv0+V2CaeMiykBMtP2nxdCSB08pevjc+YSKYJlCUB2Ht2rVh53xrdYW3UX7/D3/4A/Ly8vDGG2+ExeETSt5+pI1SvZTtkuq9tNn0LH7qKu8HZP/jJkiYiKf2nFQG0gat/phUbAk34svTNqXJr7uJLbHAEuPTjOXLl+P666+POt7LL7+MTZs2YcmSJRVglYVFdPDqzPwqCV5xvFQASRL552QlKZNpyEFEDpQUZ+XKlbjuuuucsKQgcXvlIFxaWoo5c+Zg69ateP/998OWPWkzniTBfOABTilmPAwvJ0kUOGk1lZcsC67OcVWPq8T0bF7vQpInqQyaTh/wS0zpubTw2mqAHHRNhPlcJMWAeTOTRmI5weIETyqZvHxNZJhDqqZSPZZtwi0dCvvpp5+ie/fuzm+5mVVLKxQKYdq0adi0aRNycnLCXBzIR5qOVtTypnpvUkV5PdRcGfjzaxMUbeJBkBNVnp5mC09DlgVPh68QuSm+3B7exrX3qNkn09Haq6ntmybF5YX1MT7N2LVrFwYPHhx1vPnz52P8+PEVYJGFRfTw6ny8SBmH7BBNvqxuCiD9T5vOKDxXe0zpceWWd/L096ZNm3D77bc7YTQfX7rHj3pauHAhnnjiCYeA8qOOyC6yjeLRPUmYSQXmdvPn5IOPJBP0N1ergFOuENxtQw7U0keQ/8+Xtvn/mu8jV6D4c0gipSnYnCzJgVK+Sy2+hTe08uRlJ8/MpjAyjp+0+W9JEuk9y/y4PZycaurrxo0bcccddzhxyb+Z1zuygbsuffjhh2Gba7lN3Nef28k3tGr1Uisbastyo55WRrysKV854fQqZ+26bHO8L5BlKtViLS1O+t2IuHadt1VTHfIi+fK+KT+/sMT4NGLBggVo3LhxTHGHDx+Oq6++Os4WWVjEBreORyOX2n1OhDikQiDj8V3VFF52yHJAcVsC5p84lnZ88MEH+OUvf+n4E/J40gY6lYGU6H79+qF9+/ZOeNqYRxt46FmAU+4K/LQLglRstfIjQsoHtaSkJGczHaUjn8NtmZvKxFS20u+YiAIPzzcCcVt5Ojy+iVxIlUgbAN1UtXgpSWcrNPVeEliNMAH+TkqQip92n9cTrlrKuuf2NctFixahefPmat/C05F+qcnJybj77rvRrl07J23+vGQXn+BRPF4f3cixLF83EmlKj7cnDXLyLP+WadOz0T9+JjN3M6O0tcmQVz/u5znpt4zP77nlE29YYnwasWzZMvTq1SvqeLfddhv69OlTARZZWMQGt85IdsqmDk8ufUllkDpiqaxoCrCmKvJ7braSYqttZlmxYgV69+4dZicnqvyz0aR0JSUlYeDAgbjzzjvDCDpt5KNwwCkFStpKO905uBotlRruZ0iqM6XPn5GuAeHHrmkKFSnJ9JxaORLRDoVCzmY7bVe7X2WM8pbXJNwmXLyMvPL2msSdS3AjJqbJCN+QpZWx3LBlKm+5msHJo7SJSKumMC5ZsgS9e/eOUBDJBt5eeT/Sv39/3HnnnWFtmZNEnp+006TcutVt+Vx8siH7Q1lGnIzKvlTzI+Z/u/Xbsk/V0jQRU5OY4UactXQk3CbtXjaVB5YYn0b8+OOP6NixY1Rx7r33XjRq1KiCLLKwiB9kJ6ypF/w+P46MwhFp5Md/EbhiIZf33dRGroBI8I1rchAoLS3Fzz//jDZt2oSlTwMqEUHubxwIBHDvvfeiQYMGYUda0dFt0vWAq7wc5CdNKCkpidjoI4kLEWK+dMwHXEqT+0/Kr3zJSQi9D/6ZXO4uoZ0IQumQPZoyJIm9Bo1wSEJA17XwkhzxsDLMuawoyzakga888MkqV1L5Pfpbrg7IDZiasqnZwFVpjRgCJ+vysWPH0KZNG2N8Xo8JQ4cORb169cJ89OnkGGmbXDXi/xOofXDbeJszkT1+X5v4U9qy7XAlm4f1al88bY1Ua+l7pedFgP0QXc0GOQGQYeI9qU1KkFlyQhhRkejfvz/mzJnjO/yTTz6JHTt22A94nLtI9FFabbNuBEMjNKZBUHbq2jUZnx/v5Gl8yH2HeDAYxD333IMZM2aEEUS5UYh3yhMmTMCePXvwzjvvOGSSBjm+yY8GSblbnfLl9mhKNR+k5WBI7hwlJSVO/txGvoTM7ZEkhucRDAads4z5EW+m90LXtbxk2ct7pnfr9R79XDcR6Gjy80Ait9mox1i38qL7fu6Z/vZKi9cTXsdMm7nuvvtuzJo1K6Jdy4kepT1+/Hjs2bMH7733XgSx5O2d588nAVp7kX/z8nP7ra1mmPo7r3KnNOXmRakwa/G4PabJZ3nbSkVNQmNI1xjYnkpxGvDxxx8jPT3dd/hXXnkF69atw/LlyyvQKguL8kN2Rm4dp7wnBxOuumpxTXkSOPnUBk+ZNx8M5c71pUuXIjMzE8CpAVDubKfBEwCmTZuGbdu2ORNZrtiGQiHntAwiyVK95nbLfEwDmvTH5GSbb/YjBVmeYkGDndxoxO2RHzNws4mrXDQh0IiJLHs/dcUNWjhTmqa456paLKG1EQAR718rMxlXulGYJkK8PmlhZL7kvsMnwcuXL0eDBg0i4pAt/P9gMIjXXnsNn332mXPKEz8OkU9muTuXtjIiy4nslHm7iQIaKXXrA73qsVSXKY7fSYxmt+zj+T3TxMNka0W1tXiQdoJ1pTgNWLx4se+NczNnzsTf/vY3jBo1qoKtsrAoP2Lt+LSVKj8qiAynLasBiCBxWvo04JG6yrFs2TK0aNHCOAiVlJQ4g+ncuXPx3nvv4Z577gkjo0ScA4GAQ4o1fz0+8KSkpDjuDTRA0n25cY4PhFwlo3zkF+/Iv1Ib5LjftHxmuZtfqmd8EkD/tDIzlaV2jRN0/luCl52JnLjhXCXEsqxM6qUb0dTi0jVtYsonQnIDLXfT4fVZ+vNy0sqRk5ODFi1aGJ+VVj7Kysowb948zJs3Dw8++KBzn7uE0ISQ8vQ76eL9kySpWnh5Oot8TvkM/H/TPU5S3dLj8UzkncfV8jf1x3LirOVpgum+n/YcTyXaEuPTgL179+LSSy/1DLd27Vq8+OKLuO+++3DbbbedBsssLE4v3FQPglfnz9PinT4NgPS3XILVOvikpCTnq23cbzk3NxetWrUKs4EGVgCOkrphwwa89NJL6Nu3r7PphwimNoCTDSaVlitV2rPLgYqegeIVFxeHbSoiFT01NdUh6wRJBji42mT6GiF/Pn6NE3r+nvjzSKVJPqObSiXLUiJaEn4uQZskyjYi34nJ35XiyneiKckynlvdo/rM65oWl9u1f/9+p71yu/mn0QOBADZu3IgXX3wR/fr1wy233BIxIeTPw8m7PAlD1kf+LDye7J94uZo2Fmrpu/WXkpRrafLrcu+Hloe01U2N1eKbTs3wguk5/dSpeMIS49OAevXq+VKMJ06ciC5duuChhx46DVZZWMQOvzN4v2E55MDM1VKT+kGDEVd6uMLKCRfPQ9pH4c4//3xceeWVEdflhzaeeeYZdO7cGUOHDlXTkeRCKkXcFjmwyIGLNgTRc3BiUFZWFvZ5Wn6dK2+kYpNNnITwyQRtfiR/aE6UZVp8ECS7pSJoKmf+PLxMCCZFWN7T0pX5mpS+c4kce00YTHWRwmlHdmkkV5vUaJMjE2T74X2CZsP555+PDh06RDwD94kPBoN4+umncc0112Do0KFhNnGizYm0tkqjEUY52aM0TRMRuXlYI9LytywTHk+zxVSu2iY9UxvgkwX5/ngY+bcmQsiwscKrnsUDlhifBvhRf/v164cmTZrgj3/842mwyMKifPDTCflRh+m+VIC0OF6fhNU6bjkIuCmTPI1bb701Ig9uXyAQwODBg9GkSRNMmTIl7BkoDyLynFzy5+CEVJJETSGjHfXaSRYpKSnOpjsiwzRRIJcKsoOXExFbuemPbJB+lTw8uWvwI7C4wsZPr+DvTRJ7NwLNIctGI8r8ukZeTOm63T/b4actSzLq1l65SuuWp1t5m4gPd9XhE7JbbrnFmD7Vm0GDBqFZs2aYNGlShMuGpqpKtZiejadP8aS/PO9bTORYXpMwKbkmIsrz9SKuWhm5EVgtHy+7tbTi0cbiSYCNeSRIZ5AQRlQWBg0aBOCkf7GFxX+Q6M6PIU1F4B2on86UDy5aXO13NNf4df6/zJOIHt+ERxt8KDwfiAcOHAgAmDFjBoBI30g50NCmOnkihbSTTrOQtks/X8qTwsilZ06MpS8jDe5c6eNkXVuq5unwPEpLS5GamurYyEm2aXDV3pWXyuUVP1ZoSl85kMhtNgR4l7OpLGTddiszzb+YE2v633SKDK+DMn9NlZUqpcwnFAph8ODBSElJwbRp01TbKLwkmNzO8tQVr/ru1Udy+7zekVt+bmXnRXa9nllTtP320X4QrzbPYEzMKsYVjNmzZ3uGKSwstKTY4oyHHKC0QUZTE/gAxAdQL0XJTWmUnbNUik0bg1JSUjBv3rywdDSl8tixY3jrrbcillnp7F6pLPHTIuhv2mTH86ETJKg8OCnmfpAUhxNbIrNcGSZCHwqdOpuVf/6Z7hcVFTn28rxJcSalmMqA+zBzhZqTdunCwd+LG2nW3h8vBy2MG2Q8CW1AP1thIhYacSVwQkJ1UCszOXHi0E6jMPmh0gSVtz3T5r+kpCS8//77xgk2IT8/H6+//npEXtwViMflz8ZPeOH3TPVKq0duCqxJtZX3ZBg3ZdaNYPN0Zd7ynmlSqoHbqIXXxBK39Ezpu4HbXB5YYlzB2LRpk+v9//7v/8bcuXNPkzUWFvGDmzprOgze1LlRHNMxS24dnlRQeVxJzv10ruvWrQvbWMY79GAwiBEjRmDBggUIBoPO1+xooCTSyY964qSV0uDnHMty4QMyPZdU0CRh5mSYuz9wckyEnB+jRXmQbzKVM3fb4MRbLmNTGmQjvUeKw20xDYzab+09yffrl8y6bQSSZOhcAi87bZObFo6glZl2PCL/n69Q8LhUx/hESvsQhwlr164Nq5tS1ab2qp37rZ1LLidhfIWFPz/91j4lrz0/f3buviGVcE5QTaoyj2Mi06Z0tL5Q2sLD8bx5WUm7OHieGqn3IvGxwm8f7wVLjCsQa9aswY4dO9R7Tz/9NFq2bIm+ffueZqssLMoPL9UgGpjUCE01lPG81D43ZVkbWFavXo0tW7Y4gyOP/8wzz6Bdu3a44447nHS4nywfVIkY8jw5SXV7Zumby5+FD/pc+eUkVCMJfsqLE2auJpsGRSLDfJB3U7/cYFLCTOqYFs8iOphIDwevS/wa4K3Ea+RZa8dUx3h90vKThBUAPvnkE+zatQtJSac+VEPhn332WVx11VVOe5Vpaaop/c/bKE38JKklyHYu/9eIpon0S/LLbTX1GX4IpzYp1dKIRb2NVgA5E9qr/cBHBWLTpk1o3rx5xPVHH30UH3/8Mfr27Ytu3bpVgmUWFuVDRahrGvElUMfO/Q/9qH1yQJHX5L1t27YhOzs7Iu3HHnsMq1atQs+ePXHttdeGEQY6B5kPenIA5xvW6Lc2mHGlWg54Jt9NUoy5HyTlQWG05+XEX1P4OTnmcaVdnBhwFdB0HJXboClt9KPmnmtKb7zhVn6y3VF4jTB7QdYnWf+kPbKtA5GEcufOnfjVr34VVg+Tk5MxZswYrF69Gt27d8c111wTNlGVnzHnpFDrc3hfw0mddPuSpN9EZGWZmPo9N/KphZF2aoqvtJc/t9b+KY5XG9OIt1c7T2RYYlyByM3NRZMmTcKuPfzww1iyZAkeeugh+xEPizMWbgSnvGlqCpZGik1p8LhuAwdwiojSIJebm4sLL7wQoVAIpaWlCAQC+M1vfoPly5fjwQcfxIgRIyLIaGpqaoS67KUI8Wfj4Kqw/E15mkgsJy+c0GjKkCwXSQJ4uUjSzZ+f7DKVsaZ6mTbneQ2oFhULrV3JSRHBjUBqaUnyJT+vLtOWKzFA+IZSiv/NN9+gQYMGansdPnw4HnrooYgTNeRnzU3Po9Vdt+taeVA4t8m5/G3q30zlzO03tSEv+zQ7/LZDaa+b7WcKrCtFBSIvLw/VqlVzfg8cOBDz589Hv379LCm2OKNREZ0c75A1hYYP0nKzFxDpJyfvmwYrTgzz8/ORmZnpEL7BgwcjJycHvXv3dr6UxZ9d7minf0QoKX2ZpxzI6G/uZ62dAsE3AvHBnRRr7SxWWgrmz0r3KE+pcPMNd0SK5Xsg1Y2/C9PALQdct1MHJCp66fVMWNo9HXAre9lWtHheCiePJ0+jkEcQygkXEH5GNsXPz89H/fr1w9rrhx9+iNtvvx3Dhw930kpKSnI2iVJa/PlMz0r/R6N+aqos/fZDXE0TRhNkXK/4XqQ42vbgJlLwfHg5JDqsYlyBSEpKwtGjRwEAN910E7766isMHToUEyZMqGTLLCwqF34VBE3hBHRFVg5IboMWT0cOjocPHwYA3HjjjThw4AAGDRqECRMmOGf20iY2TvC0vLj7BOXhdgQc5U9p82ensHJQ0RRyaQ+dlMGPZOP+xCYlXqrPkvxyJVuSYjd12I1IaQO2l9rmdd3r3pmkZFUktHrgRuAIbuqnW1z+rjW3Gy0O2UftsLi4GIcOHQIA9OjRA7m5uRg0aBB+//vfO2SYuy9pEzc3FdZNDddO4ZDP5Hbahwlu9mnqbDT13k/fGC/FV5Ls8rSz060423OMKxCTJk3CBx98gIKCAlStWhVjxoxB//79K9ssizMDiT5ax7XNui2j+yVCpsFDkjMa1GjgpNMhQqEQJk2ahFWrVuHo0aNISUnB2LFj0atXr4h8uepKS7h8wNE+fsDzkgMft1W6TPC/JUklG+h5iDBo5EZ+nIPfIz9pUuP4p6+lbTxtItnaEXAawfDzXk333EiC34EzlnoWBRK5zYaieT7NR1xJ0JXseqUTzT1+ogt3wXj66aexYsUKHD16FIFAAI8//jj69OnjaSffxMrt5rZ7kWJpH5+Y8nS09LV0TIq1jKPB6560xxQ31vZxuolrnGA02BLjCsZdd92FGjVqYNq0aZVtisWZhUTvZaJus+XpPE2kl+4B7h0/v+82KJWVlWHIkCFIT0/H//3f/0Wkw90ZCHyA1D5awJVWfk2SVB7OizhrzyXVaT5I83RNZek10TARGT9EwG+cM3Bw5Uhk42MaY6OZfEQ7UYllsgREEktqry+//HJEfNke/ZI7U58h67VGsE39jIn4yjbJ0/djt+kZ/CCR25zflYhywBJjC4szDInZW52Csc16qQ6mezJcNJ1iee+XlpaG+dW6uTgQyLeWq7lEnDXSCphPozAtn3J4DdIccse/adD3qxaZbPQKZ7p2Ng3gDIlsYFRjrKxj0RBYr/t++gCvFQMim1xB9pOGnNyZ7HSr615x/JLbeNTpymgXbiLFGQZLjC0szjAkeo9TYW02lkHXD1Hzowi5gbtf8I1nFM9LheV/y6VXtzhEbk3PwuPJsNIufk07xYLHI7gNgtEQay3OWYZEfqiYiHE0Yb3ILEHWQz91S/724+pBbYz7wscKt7ptWsXxM5GUZeenLP3Y5PYc0fR50YSrqPjxTofBmJg9lcLCwqLCoE28va75IcVuaqrpHsWjNEz5aB8u4HFo8x0Q+ZlmAv8ktGYjP3KNP492vBq3i8eR9pE9PC5d54OoTEMeZ8UHZi0/maYkA17wer9u1xNEyDknYSp7t/cu6xWvTyaiqMXl+fBVEC+7kpLCvwQZK0z2ymMaZTshdVuDbHdu5JmnrbVlrSy82or23rQ4ftu1qV+PF5k9nZNpqxhbWCQmEll9AuLgs6j9dgvLr8WiaMV63y2sm4qlEU5Ten4VJZ6uVzm6XTP5PZri0XXtOaJRuUwor5qfIEhkI13bq1an6LqXGupkUMHKIid/buqvn1UamaZXG+RhCH77LT9qcGUhXm2top6pgsvKKsYWFhaVD00FkiiP6kgKjTaAaelK8srPH5bgn5ylfKQKzNPRvtDHzyDWlpel4iNtAyKPqqN4biq6vOamlptUKJNqJtPUbPGCHJhNSrtFxUD7aAxd59Dqj9enoTXIFRIT0eb/U72Q7YyH04iwtkrk1SZ4mhppNKmo2oqWJMOxEs94hNHgNXnX0tbeTTTwuwJUWRMIqxhbWCQmEkNSMMO1zZ4OVUR2yrEeDeUnH5Oiyr/+5raxh5+nSpADbrRl5qVem4iARj657Sb/Zy9Vm+cTy0BZnpWEBEFCGvUf+Gqvsb4/30b4qE/aPS8V1i0/QlJSUsRXHGNdsYrWDjf7TGqyn3tedvEy8BvXqwz83PPzzAkAoxGWGFtYJCYSoudwwVnRZhOok7Y485HIFcmzvZ4JbaGi3TW8wmqkEij/sYN+4ngRY0I0tlTEOy9vGZ9GWGJsYXGGIbFHqLOszZ4JpMAi4ZHIFei0t1c/xLIyEa+VmoqwKdo8o1X6K+MZEhCWGFtYnGFI9J7FtlkLi3Akcps9K9prIpKuWMhsNO4MZyLOkOexm+8sLCwsJLyEgQQRDiwszlmY3ATinXasMG3Ek8TX7Tli3bzmJ5xp41w8YErrDCDFrrDE2MLC4pyFVwd+pnfwFhaVBT+TTj8krSLaoMk3WAvjBybF2O1+eeA3PS1cPG05W/tH60phYZGYSPQex7ZZC4twJHKbPefba0Uv7yey+0Ai21aJsK4UFhYWFhYWFpWHaFwA4p2Hl6obTfom14mKsNtv/m6wpDg6WMXYwiIxkeg9mW2zFhbhSOQ2a9urhUU4rGJsYWFhYWFhYWFh4QZLjC0sLCwsLCwsLCyQOK4UFhYWFhYWFhYWFpUKqxhbWFhYWFhYWFhYwBJjCwsLCwsLCwsLCwCWGFtYWFhYWFhYWFgAsMTYwsLCwsLCwsLCAoAlxhYWFhYWFhYWFhYALDG2sLCwsLCwsLCwAGCJsYWFhYWFhYWFhQUAS4wtLCwsLCwsLCwsAFhibGFhYWFhYWFhYQHAEmMLCwsLCwsLCwsLAJYYW1hYWFhYWFhYWACwxNjCwsLCwsLCwsICgCXGFhYWFhYWFhYWFgAsMTU7rGMAAACLSURBVLawsLCwsLCwsLAAYImxhYWFhYWFhYWFBQBLjC0sLCwsLCwsLCwAWGJsYWFhYWFhYWFhAcASYwsLCwsLCwsLCwsAlhhbWFhYWFhYWFhYALDE2MLCwsLCwsLCwgKAJcYWFhYWFhYWFhYWACwxtrCwsLCwsLCwsABgibGFhYWFhYWFhYUFAOD/A+FQbqC+ql6EAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "f, ax = plt.subplots(1, 3, figsize=(12,4))\n", "ax[0].imshow(forgery_to_attack.squeeze(), cmap='Greys')\n", "ax[0].axis('off')\n", "ax[0].set_title('Original')\n", "\n", "ax[1].imshow(forg_fgm_atk.squeeze(), cmap='Greys')\n", "ax[1].axis('off')\n", "ax[1].set_title('FGM attack')\n", "\n", "ax[2].imshow(forg_carlini_atk.squeeze(), cmap='Greys')\n", "ax[2].axis('off')\n", "ax[2].set_title('Carlini attack')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }